你需要做你所说的。为此,您需要使用处理投影的库(此处为pyproj
)。有一个在Geodesic buffering in python
import pyproj
from shapely.geometry import MultiPolygon, Polygon, Point
from shapely.ops import transform as sh_transform
from functools import partial
wgs84_globe = pyproj.Proj(proj='latlong', ellps='WGS84')
def point_buff_on_globe(lat, lon, radius):
#First, you build the Azimuthal Equidistant Projection centered in the
# point given by WGS84 lat, lon coordinates
aeqd = pyproj.Proj(proj='aeqd', ellps='WGS84', datum='WGS84',
lat_0=lat, lon_0=lon)
#You then transform the coordinates of that point in that projection
project_coords = pyproj.transform(wgs84_globe, aeqd, lon, lat)
# Build a shapely point with that coordinates and buffer it in the aeqd projection
aeqd_buffer = Point(project_coords).buffer(radius)
# Transform back to WGS84 each coordinate of the aeqd buffer.
# Notice the clever use of sh_transform with partial functor, this is
# something that I learned here in SO. A plain iteration in the coordinates
# will do the job too.
projected_pol = sh_transform(partial(pyproj.transform, aeqd, wgs84_globe),
aeqd_buffer)
return projected_pol
功能类似的问题point_buff_on_globe
会给你纬度经度多角形的缓冲,在这一点上(你可以做的最好的为中心的等距方位投影给定点的结果您的需求两个意见:。
- 我不记得
radius
参数的单位,我认为是米,所以如果你需要有10公里的缓冲区,你就需要通过它10E3但是,请检查它!
- 小心使用此与半径to宽或点彼此远离。当点靠近投影中心点时,投影效果很好。