Я делаю очень простой расчет длины полилинии, используя shapely:
from shapely.geometry import LineString
...
xy_list = [map(float,e) for e in xy_intm]
line = LineString(xy_list)
s = '%s,%s,%s' % (fr,to,line.length)
Мои координаты в WGS84. Я не могу найти какую-либо информацию об атрибуте длины shapely. Какова единица измерения атрибута длины? Есть ли простой способ пересчета в км или метры?
Ответы:
Как красиво говорит Альфачано , расстояние - это евклидово расстояние или линейное расстояние между двумя точками на плоскости, а не расстояние по Большому кругу между двумя точками на сфере.
Для расстояния по большому кругу вам необходимо использовать алгоритмы в качестве закона косинусов или формулы Хаверсайна (см. Почему закон косинусов более предпочтителен, чем хаверсин при расчете расстояния между двумя точками широты и долготы? ) Или использовать модуль pyproj, который выполняет геодезические расчеты.
Вы можете проверить результат в калькуляторе долготы и широты.
источник
geopy
, в котором реализовано расстояние по большому кругу и вычисление расстояния Винсенти.geopy
.Источник: http://toblerity.org/shapely/manual.html#coordinate-systems
Будучи
shapely
полностью независимым от SRS, совершенно очевидно, что атрибут длины выражается в той же единице координат вашей линейной линии, то есть в градусах. По факту:Вместо этого, если вы хотите выразить длину в метрах, вы должны преобразовать свою геометрию из WGS84 в проецируемую SRS, используя pyproj (или, лучше, выполнить вычисление геодезического расстояния, см. Ответ Джина). Подробно, начиная с версии 1.2.18 (
shapely.__version__
),shapely
поддерживаются функции преобразования геометрии ( http://toblerity.org/shapely/shapely.html#module-shapely.ops ), которые мы можем использовать вместе с нимиpyproj
. Вот быстрый пример:источник