Coordinate Systems
[...]
Shapely does not support coordinate system transformations. All
operations on two or more features presume that the features exist in
the same Cartesian plane.
Source: http://toblerity.org/shapely/manual.html#coordinate-systems
Being shapely
completely agnostic in reference to SRS, it's quite obvious that the length attribute is expressed in the same unit of coordinates of your linestring, i.e. degrees.
In fact:
>>> from shapely.geometry import LineString
>>> line = LineString([(0, 0), (1, 1)])
>>> line.length
1.4142135623730951
Instead, if you want to express length in meters, you have to transform your geometries from WGS84 to a projected SRS using pyproj (or, better, execute geodesic distance calculation, see Gene's answer). In detail, since version 1.2.18 (shapely.__version__
), shapely
supports the geometry transform functions ( http://toblerity.org/shapely/shapely.html#module-shapely.ops) that we can use it in conjunction with pyproj
. Here's a quick example:
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