python 中的测地线缓冲

2024-02-15

给定土地多边形作为Shapely https://pypi.python.org/pypi/Shapely MultiPolygon,我想找到代表例如的(多)多边形海岸线周围12海里缓冲区。

使用匀称buffer方法不起作用,因为它使用欧几里德计算。

有人能告诉我如何在 python 中计算测地线缓冲区吗?


这不是一个 shapely 问题,因为 shapely 在其文档中明确指出该库仅用于平面计算。然而,为了回答您的问题,您应该指定用于多边形的坐标系。 假设您使用的是 WGS84 投影(纬度,经度),这是我在另一个 SO 问题中找到的食谱(地图投影后不连续时修复形状多边形对象 https://stackoverflow.com/questions/38102927/fix-up-shapely-polygon-object-when-discontinuous-after-map-projection)。你会需要pyproj图书馆。

import pyproj
from shapely.geometry import MultiPolygon, Polygon
from shapely.ops import transform as sh_transform
from functools import partial

wgs84_globe = pyproj.Proj(proj='latlong', ellps='WGS84')

def pol_buff_on_globe(pol, radius):
    _lon, _lat = pol.centroid.coords[0]
    aeqd = pyproj.Proj(proj='aeqd', ellps='WGS84', datum='WGS84',
                       lat_0=_lat, lon_0=_lon)
    project_pol = sh_transform(partial(pyproj.transform, wgs84_globe, aeqd), pol)
    return sh_transform( partial(pyproj.transform, aeqd, wgs84_globe),
                          project_pol.buffer(radius))

def multipol_buff_on_globe(multipol, radius):
    return MultiPolygon([pol_buff_on_globe(g, radius) for g in multipol])

pol_buff_on_globe函数执行以下操作。首先,构建以多边形质心为中心的方位等距投影。然后,将多边形的坐标系更改为该投影。之后,在那里建立缓冲区,然后将缓冲多边形的坐标系更改为WGS84坐标系。

需要一些特殊的照顾:

  • 您需要了解如何将所需距离转换为 aeqd 投影中使用的距离。
  • 小心不要缓冲包括杆子(参见提到的SO问题)。
  • 事实上,我们使用多边形的质心来居中投影应该保证答案足够好,但如果您有特定的精度要求,则不应使用此解决方案,或者至少对典型多边形的误差进行表征您正在使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 中的测地线缓冲 的相关文章

随机推荐