在纬度、经度对周围获得准确的笛卡尔投影

Get a cartesian projection accurate around a lat, lng pair

我有 WGS84 中的纬度、经度修复列表,我想在上面进行点、多边形等之间的距离测量等计算...为此,我计划使用 shapely,但随后,我需要将其转换为笛卡尔坐标 space,这仅在局部准确。

我的问题是我的位置修正可能来自世界各地,所以如果我使用针对我的区域优化的固定投影,我会在世界其他地方引入错误。是否可以根据当前位置列表的平均位置定义我自己的以位置对为中心的笛卡尔投影?我需要进行计算的定位点总是彼此接近,但不同的定位点列表可以分布在世界各地。

例如:假设我得到 5 个需要进行计算的修复。然后,我想定义一个在这些修复点附近准确的投影,因为这些修复点之间的距离始终在几公里之内。当我得到接下来的 5 个修复时,它们可能位于世界上完全不同的地方,我想定义一个针对这些位置修复优化的投影。

我该如何解决这个问题?似乎使用 pyproj(如果我理解得很好,它会使用 proj.4)是个好主意,但我无法理解初始化投影所需的字符串,如下所示。有人可以帮助我吗?

local_proj = pyproj.Proj(r'+proj=tmerc +lat_0=51.178425 +lon_0=3.561298 +ellps=GRS80 +units=meters')

更新:现在应该使用一个优秀的小 python 包 utm 而不是下面非常笼统的代码段。

考虑使用本地 UTM 带而不是笛卡尔系统。 UTM 区域可以通过 shapely 和 pyproj 轻松工作,并为您提供一个适用于距离查询的本地精确投影系统:

def convert_wgs_to_utm(lon, lat):
    utm_band = str((math.floor((lon + 180) / 6 ) % 60) + 1)
    if len(utm_band) == 1:
        utm_band = '0'+utm_band
    if lat >= 0:
        epsg_code = '326' + utm_band
    else:
        epsg_code = '327' + utm_band
    return epsg_code

# setup your projections
utm_code = convert_wgs_to_utm(input_lon, input_lat)
crs_wgs = proj.Proj(init='epsg:4326') # assuming you're using WGS84 geographic
crs_utm = proj.Proj(init='epsg:{0}'.format(utm_code))

# then cast your geographic coordinates to the projected system, e.g.
x, y = proj.transform(crs_wgs, crs_utm, input_lon, input_lat)

# proceed with your calculations using shapely...

在 Whosebug 上查看这个相关问题:Determining UTM zone (to convert) from longitude/latitude