python中的测地线缓冲

鉴于陆地多边形为Shapely MultiPolygon,我想找到代表例如多边形的多边形(多边形).海岸线周围12海里的缓冲区.

使用Shapely缓冲区方法不起作用,因为它使用欧几里德计算.

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

解决方法:

这不是一个形状问题,因为在其文档中明确地说明该库仅用于平面计算.但是,为了回答您的问题,您应该指定用于多面体的坐标系.
假设您正在使用WGS84投影(lat,lon),这是我在另一个SO问题(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问题).
>我们使用多边形的质心来使投影居中这一事实应该保证答案是足够好的,但是如果你有特定的精度要求,你不应该使用这个解决方案,或者至少对典型的错误进行表征.你正在使用的多边形.

相关文章

https://www.osgeo.cn/qgis-tutorial/overview.html https:...
设计方案是工程建设最关键的环节,也是影响城市规划的基本因...
BIM与GIS的区别与联系http://www.bimcn.org/cjwt/2018111516...
成功有感之给年轻人的10个忠告1、努力工作要努力,随随便便过...
鉴于陆地多边形为ShapelyMultiPolygon,我想找到代表例如多边...
背景与宣言传统的GISC/S开发已经很被别人不屑了,在时代的洪...