पार्टी के लिए देर से, लेकिन एक उपयोगी योगदान के साथ। भूगोल का उपयोग करते हुए एसडब्ल्यू के उत्तर पर निर्माण , मैंने एक छोटा फ़ंक्शन लिखा जो मनमाने ढंग से कई निर्देशांक के साथ एक सुडौल लाइनस्ट्रिंग ऑब्जेक्ट के लिए गणना करता है। यह pairs
Stackoverflow से एक पुनरावृत्ति का उपयोग करता है ।
मुख्य विशेषता: स्निपेट्स की तुलना में डॉकस्ट्रिंग्स बहुत लंबे होते हैं।
def line_length(line):
"""Calculate length of a line in meters, given in geographic coordinates.
Args:
line: a shapely LineString object with WGS 84 coordinates
Returns:
Length of line in meters
"""
# Swap shapely (lonlat) to geopy (latlon) points
latlon = lambda lonlat: (lonlat[1], lonlat[0])
total_length = sum(distance(latlon(a), latlon(b)).meters
for (a, b) in pairs(line.coords))
return round(total_length, 0)
def pairs(lst):
"""Iterate over a list in overlapping pairs without wrap-around.
Args:
lst: an iterable/list
Returns:
Yields a pair of consecutive elements (lst[k], lst[k+1]) of lst. Last
call yields the last two elements.
Example:
lst = [4, 7, 11, 2]
pairs(lst) yields (4, 7), (7, 11), (11, 2)
Source:
/programming/1257413/1257446#1257446
"""
i = iter(lst)
prev = i.next()
for item in i:
yield prev, item
prev = item