将跨越多个 UTM 区域的一组 lat/lon 点投影到单个网格中

Projecting a set of lat/lon points that spans on multiple UTM zones into a single grid

我正在做一个项目,我需要转置很多地理位置(由他们的 latitude/longitude 给出),所有这些都在一个相对较小的区域(例如像荷兰这样的国家的大小),进入网格以便运行一些聚类算法和其他东西。

我当前的实现 使用 utm and geopy 模块。它在某些情况下就像一个魅力(韩国很好地以单个 UTM 区域为中心),但是 不会在点跨越几个不同的 UTM 区域时立即起作用 (就是这种情况荷兰)。

我一直在考虑 clumsy/inelegant 这样做的方法(比如将所有点的经度移动几度以尝试 'recenter' 它,或者尝试 'stick back'区域彼此),但后来我一直在搜索,我意识到确实存在 many 坐标系统,以及几个 python 模块(pyproj,底图,......)处理他们。
所以我宁愿不重新发明轮子,如果你明白我的意思,尤其是不要重新发明一个方形的。

我不需要很高的精度,与实际距离相差5%对我来说绝对可以接受。但我需要的是能够将地球的一个区域(给定纬度和经度的界限)转换成一个单一的连贯网格。

我认为性能不会成为问题,因为我最多有大约 100 万点,而且我并不着急(如果转换需要几分钟,那就这样吧)。

你有什么建议?
我更喜欢开箱即用的解决方案,而不是自己实现一个坐标转换器,并且由于该项目是用 Python3 编码的,坚持使用该语言肯定是一个优势。

请注意,解决方案 Google 地图早在 2005 年就出现了,为了解决这些限制,创建了所谓的 Web Mercator, currently known by the EPSG: 3857

I do not need a great accuracy, a variation of 5% from the real distances is definitely acceptable for me

在这种情况下,您绝对可以使用 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 墨卡托实现比 UTM 等实现简单得多,因此性能会好得多。