1

我有 WGS84 中的 lat、lng 修复列表,我想在其上进行计算,例如点、多边形等之间的距离测量...为此,我计划使用 shapely 但随后,我需要将其转换为笛卡尔空间,这只是局部准确的。

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

例如:假设我有 5 个需要进行计算的修复。然后,我想定义一个在这些修复附近准确的投影,因为这些修复总是在彼此相距几公里的范围内。当我得到接下来的 5 个修复(可能位于世界上完全不同的地方)时,我想定义一个针对这些位置修复优化的投影。

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

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

1 回答 1

7

更新:现在应该使用一个优秀的小 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...

请参阅有关 stackoverflow 的相关问题:Determining UTM zone (to convert) from longitude/latitude

于 2016-10-19T19:50:11.733 回答