计算圆时如何将pyproj1转换为pyproj2?

问题描述 投票:0回答:1

我使用如下代码来计算给定中心点的圆坐标:

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)

但是我仍然不知道如何修改我的代码,有人帮助我吗?

shapely functools pyproj
1个回答
0
投票

我得到的答案如下:

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[:]
© www.soinside.com 2019 - 2024. All rights reserved.