在 lat, lng 对周围获得准确的笛卡尔投影

Kar*_*elV 1 proj python-2.7 shapely

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

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

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

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

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

son*_*olo 6

更新:现在应该使用一个优秀的小 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...
Run Code Online (Sandbox Code Playgroud)

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