2024-04-24 10:39:09 发布
网友
给定陆地多边形为ShapelyMultiPolygon,我想找到代表海岸线周围12海里缓冲区的(多)多边形。在
MultiPolygon
使用Shapelybuffer方法不起作用,因为它使用欧几里德计算。在
buffer
有人能告诉我如何在python中计算测地缓冲区吗?在
这不是一个shapely问题,因为shapely在其文档中明确指出该库仅用于平面计算。但是,为了回答您的问题,您应该指定用于多边形的坐标系。 假设您使用的是WGS84投影(lat,lon),这是我在另一个SO问题(fix-up-shapely-polygon-object-when-discontinuous-after-map-projection)中找到的一个方法。您将需要pyproj库。在
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坐标系。在
pol_buff_on_globe
需要特别注意:
这不是一个shapely问题,因为shapely在其文档中明确指出该库仅用于平面计算。但是,为了回答您的问题,您应该指定用于多边形的坐标系。 假设您使用的是WGS84投影(lat,lon),这是我在另一个SO问题(fix-up-shapely-polygon-object-when-discontinuous-after-map-projection)中找到的一个方法。您将需要
pyproj
库。在pol_buff_on_globe
函数执行以下操作。首先,建立一个以多边形质心为中心的方位等距投影。然后,将多边形的坐标系更改为该投影。然后在那里建立缓冲区,然后将缓冲多边形的坐标系改为WGS84坐标系。在需要特别注意:
相关问题 更多 >
编程相关推荐