我使用如下代码来计算给定中心点的圆坐标:
from shapely import ops
from shapely.geometry import Point
from pyproj import Proj, transform
from functools import partial
def circleByPoint(lat, lon, km=5):
proj_wgs84 = Proj('+proj=longlat +datum=WGS84')
aeqd_proj = '+proj=aeqd +lat_0={lat} +lon_0={lon} +x_0=0 +y_0=0'
project = partial(transform,
Proj(aeqd_proj.format(lat=lat, lon=lon)), proj_wgs84)
buf = Point(0, 0).buffer(km * 1000) # distance in metres
return ops.transform(project, buf).exterior.coords[:]
升级到 pyproj 3.6.0 后,我收到警告消息
C:\Program Files\python\Lib\site-packages\shapely\ops.py:276: FutureWarning: This function is deprecated. See: https://pyproj4.github.io/pyproj/stable/gotchas.html#upgrading-to-pyproj-2-from-pyproj-1
shell = type(geom.exterior)(zip(*func(*zip(*geom.exterior.coords))))
然后我检查了https://pyproj4.github.io/pyproj/stable/gotchas.html#upgrading-to-pyproj-2-from-pyproj-1,有一个示例如下:
旧代码:
from functools import partial
from pyproj import Proj, transform
proj_4326 = Proj(init="epsg:4326")
proj_3857 = Proj(init="epsg:3857")
transformer = partial(transform, proj_4326, proj_3857)
transformer(12, 12)
新代码:
from pyproj import Transformer
transformer = Transformer.from_crs("EPSG:4326", "EPSG:3857")
transformer.transform(12, 12)
但是我仍然不知道如何修改我的代码,有人帮助我吗?
我得到的答案如下:
from shapely.ops import transform
from shapely.geometry import Point
from pyproj import Transformer, CRS
def circleByPoint(lat, lon, km=5):
proj_wgs84 = CRS('EPSG:4326')
proj_aeqd = CRS(f'+proj=aeqd +lat_0={lat} +lon_0={lon} +x_0=0 +y_0=0')
transformer = Transformer.from_crs(proj_aeqd, proj_wgs84, always_xy=True)
buf = Point(0, 0).buffer(km * 1000) # distance in metres
return transform(transformer.transform, buf).exterior.coords[:]