【问题标题】:Get a cartesian projection accurate around a lat, lng pair在 lat、lng 对周围获得准确的笛卡尔投影
【发布时间】:2017-03-01 03:52:52
【问题描述】:

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

【问题讨论】:

  • 转换为本地 UTM 投影怎么样?如果需要,这可以自动化。

标签: python-2.7 shapely proj


【解决方案1】:

更新:现在应该使用一个优秀的小 python 包 utm,而不是下面非常通用的 sn-p。

考虑使用本地 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

【讨论】:

  • 谢谢,这确实是我需要的!
  • 警告,UTM中存在不规则区域:gis.stackexchange.com/questions/2561/…
  • 感谢此次转换。但是,对于小于 10 的区域,这在 Python 2.7 中不起作用。 convert_wgs_to_utm(-158, 71.8) 在应该给出 32604 时给出 3264.0。将第一行更改为 utm_band = str(int(math.floor((lon + 180) / 6 ) % 60) + 1).zfill(2) 然后删除第一个 if 语句会得到正确答案。
  • 现在有一个很棒的小包utm 可以处理这些转换,虽然我不知道它是否支持 Python 2。
猜你喜欢
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 2015-10-21
  • 2017-10-26
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 2018-04-20
相关资源
最近更新 更多