在lat,lng对

时间:2016-10-19 13:18:06

标签: python-2.7 shapely proj

我在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')

1 个答案:

答案 0 :(得分:2)

更新:现在应该使用一个优秀的小python包utm,而不是下面的一般代码片段。

考虑使用本地UTM区域而不是笛卡尔系统。 UTM区域可以通过匀称和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