Shapely / Pyproj转换会引发OverflowError-确定LineString的长度

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

我正在使用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)

此返回

OverflowError:无法将浮点无穷大转换为整数

问题已经与ls_metric产生,它不生成LineString。

python shapely pyproj
1个回答
0
投票

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

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

确定我更改了pyproj Transformer并得到了结果:

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

给出的长度为3984 km。我在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] ...

不推荐使用第一种,而不推荐使用第二种。

© www.soinside.com 2019 - 2024. All rights reserved.