I was quite unsatisfied with Calculating Length of Linestrings in WGS84 in Miles. It kept me wondering if there is a more convenient, Pythonic way to calculate the length of a WKT linestring according to a given SRID.
I have in mind something like:
srid="WGS84"
line="LINESTRING(3.0 4.0, 3.1 4.1)"
print length(line, srid)
I'm looking for an accurate answer, not sin\cos
approximations.
Any ideas?
Answer
The geopy module provides the Vincenty formula, which provides accurate ellipsoid distances. Couple this with the wkt
loading in Shapely, and you have reasonably simple code:
from geopy import distance
from shapely.wkt import loads
line_wkt="LINESTRING(3.0 4.0, 3.1 4.1)"
# a number of other elipsoids are supported
distance.VincentyDistance.ELLIPSOID = 'WGS-84'
d = distance.distance
line = loads(line_wkt)
# convert the coordinates to xy array elements, compute the distance
dist = d(line.xy[0], line.xy[1])
print dist.meters
No comments:
Post a Comment