鉴于陆地多边形为Shapely MultiPolygon
,我想找到代表例如地球的多边形(多边形)。海岸线周围12海里的缓冲区。
使用Shapely buffer
方法不起作用,因为它使用了欧氏计算。
有人可以告诉我如何在python中计算测地线缓冲区吗?
答案 0 :(得分:6)
这不是一个形状问题,因为在其文档中明确地说明该库仅用于平面计算。但是,为了回答您的问题,您应该指定用于多面体的坐标系。
假设您正在使用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坐标系。
需要特别小心: