Преобразование Shapely / Pyproj генерирует OverflowError - определение длины LineString - PullRequest
0 голосов
/ 22 марта 2020

Я работаю в ноутбуке Jupyter и удалил код, который, как мне казалось, мне не нужен. Теперь я получаю ошибку переполнения при запуске ноутбука. Я почти уверен, что код работал нормально, и проблема вызвана тем, что я тупо удаляю вещи.

В любом случае, я не могу найти то, чего не хватает, и был бы очень признателен за помощь. Я использую список с координатами, преобразую их в строку и затем преобразую их. Наконец, я ищу длину.

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_metri c, который не генерирует LineString.

1 Ответ

0 голосов
/ 22 марта 2020

Я запустил ваш код и получил это предупреждение:

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

Конечно, я изменил pyproj Трансформатор и получил результат:

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

дает длина 3984 км . Я использовал последние версии в venv:

pyproj==2.6.0
Shapely==1.7.0

В приведенном выше предупреждении также содержится еще одно важное замечание относительно изменения порядка оси ; короче говоря:

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

первый способ предпочтителен, а второй устарел.

...