我正在做一个项目,其中我需要转换很多地理位置(根据其纬度/经度),所有这些地理位置都在相对较小的区域(一个国家的大小)中(例如Nederlands),请放入网格,以便在其上运行一些聚类算法和其他内容。
我当前的实现使用utm和geopy模块。在某些情况下,它的工作原理就像是一种魅力(韩国很好地集中在单个UTM区域上),但是当这些点跨越几个不同的UTM区域时,不会马上出现(这就是Nederlands的情况) 。
我一直在考虑这样做的笨拙/模糊的方法(例如,将所有点的经度偏移几个度以尝试使其“居中”,或试图使区域彼此“粘在一起”),但是然后我一直在搜索,我意识到实际上存在many坐标系,以及几个处理它们的python模块(pyproj,底图等)。
因此,如果您明白我的意思,我宁愿不要重新发明轮子,尤其是不要重新发明正方形的轮子。
我并不需要很高的准确性,对于我来说,与实际距离相差5%绝对可以接受。但是我需要的是能够将一个地球区域(在经度和纬度范围内)转换为单个连贯的网格。
我认为性能不是问题,因为我最多只有100万点,而且我也不着急(如果要花几分钟的时间来转换,就这样吧)。
您对我有什么建议?
我更喜欢开箱即用的解决方案,而不是自己实现一个coords转换器,并且由于该项目是使用Python3编码的,因此坚持使用该语言绝对是一个加分。
答案 0 :(得分:1)
请注意,Google Maps的解决方案可以追溯到2005年,当时要解决Web Mercator的这种问题,而EPSG: 3857正是这种情况。
我不需要很高的精度,与真实值相差5% 距离对我来说绝对可以接受
在这种情况下,您绝对可以使用Web Mercator。
可能的Python实现:
import math
def merc_x(lon):
r_major=6378137.000
return r_major*math.radians(lon)
def merc_y(lat):
if lat>89.5:lat=89.5
if lat<-89.5:lat=-89.5
r_major=6378137.000
r_minor=6356752.3142
temp=r_minor/r_major
eccent=math.sqrt(1-temp**2)
phi=math.radians(lat)
sinphi=math.sin(phi)
con=eccent*sinphi
com=eccent/2
con=((1.0-con)/(1.0+con))**com
ts=math.tan((math.pi/2-phi)/2)/con
y=0-r_major*math.log(ts)
return y
请注意,Web Mercator的实现比例如UTM简单得多,因此性能会更好。