Shapely/Pyproj 转换抛出 OverflowError - 确定 LineString 的长度

Shapely/Pyproj transformation throws OverflowError - determining length of LineString

我正在使用 Jupyter Notebook 并删除了我认为不需要其他代码的代码。现在我得到一个溢出错误,当 运行 笔记本。我很确定代码过去工作得很好,问题是我愚蠢地删除了东西造成的。

无论如何,我似乎找不到缺少的东西,非常感谢帮助。我正在使用带坐标的列表,将它们转换为线串,然后进行转换。最后,我查找了长度。

import pyproj
from pyproj import Transformer
from shapely.ops import transform
from shapely.geometry import LineString

route = [[41.875562, -87.624421], [29.949932, -90.070116], [40.712728, -74.006015]]

ls = LineString(route) 

project = pyproj.Transformer.from_proj(
    pyproj.Proj(init='epsg:4326'),
    pyproj.Proj(init='epsg:3857'))

ls_metric = transform(project.transform, ls) 

ls_metric_length = round(ls_metric.length / 1000)

这个returns

OverflowError: cannot convert float infinity to integer

问题已经出现在 ls_metric 中,它不生成 LineString。

我 运行 您的代码并收到此警告:

FutureWarning: '+init=<authority>:<code>' syntax is deprecated.
'<authority>:<code>' is the preferred initialization method

果然改了pyproj T运行sformer得到了结果:

project = pyproj.Transformer.from_proj(
    pyproj.Proj('epsg:4326'),
    pyproj.Proj('epsg:3857'))

给出长度 3984 公里。 我在venv中使用了最新版本:

pyproj==2.6.0
Shapely==1.7.0

上面的警告还给出了关于 axis order changes 的另一个重要说明;简而言之:

pyproj.Proj('epsg:4326') works with [lat,lng], [lat,lng] ...
pyproj.Proj(init='epsg:4326') works with [lng,lat], [lng,lat] ...

第一个是首选方式,第二个已弃用。