Системы координат
[...]
Shapely не поддерживает преобразования системы координат. Все операции над двумя или более объектами предполагают, что объекты существуют в одной и той же декартовой плоскости.
Источник: http://toblerity.org/shapely/manual.html#coordinate-systems
Будучи shapely
полностью независимым от SRS, совершенно очевидно, что атрибут длины выражается в той же единице координат вашей линейной линии, то есть в градусах. По факту:
>>> from shapely.geometry import LineString
>>> line = LineString([(0, 0), (1, 1)])
>>> line.length
1.4142135623730951
Вместо этого, если вы хотите выразить длину в метрах, вы должны преобразовать свою геометрию из WGS84 в проецируемую SRS, используя pyproj (или, лучше, выполнить вычисление геодезического расстояния, см. Ответ Джина). Подробно, начиная с версии 1.2.18 ( shapely.__version__
), shapely
поддерживаются функции преобразования геометрии ( http://toblerity.org/shapely/shapely.html#module-shapely.ops ), которые мы можем использовать вместе с ними pyproj
. Вот быстрый пример:
from shapely.geometry import LineString
from shapely.ops import transform
from functools import partial
import pyproj
line1 = LineString([(15.799406, 40.636069), (15.810173,40.640246)])
print str(line1.length) + " degrees"
# 0.0115488362184 degrees
# Geometry transform function based on pyproj.transform
project = partial(
pyproj.transform,
pyproj.Proj(init='EPSG:4326'),
pyproj.Proj(init='EPSG:32633'))
line2 = transform(project, line1)
print str(line2.length) + " meters"
# 1021.77585965 meters