Wykonuję bardzo proste obliczenia długości polilinii za pomocą zgrabnego:
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)
Moje współrzędne są w WGS84. Nie mogę znaleźć żadnych informacji o atrybucie długości foremnej. Jaka jest jednostka atrybutu długości? Czy istnieje prosty sposób na przeliczenie na kilometry lub metry?
Odpowiedzi:
Jak mówi kształtnie alfaciano , odległość to odległość euklidesowa lub odległość liniowa między dwoma punktami na płaszczyźnie, a nie odległość wielkiego koła między dwoma punktami na kuli.
W przypadku odległości wielkiego koła musisz użyć algorytmów jako prawa cosinusów lub formuły Haversine (spójrz na Dlaczego prawo cosinusów jest lepsze niż haversine przy obliczaniu odległości między dwoma punktami szerokość-długość geograficzna? ) Lub użyj modułu pyproj, który wykonuje obliczenia geodezyjne.
Możesz przetestować wynik w kalkulatorze długości geograficznej
źródło
geopy
, który zaimplementował obliczanie odległości w kole i odległości Vincenta.geopy
.Źródło: http://toblerity.org/shapely/manual.html#coordinate-systems
Będąc
shapely
całkowicie agnostycznym w odniesieniu do SRS, jest całkiem oczywiste, że atrybut długości jest wyrażony w tej samej jednostce współrzędnych twojego linii, tj. Stopniach. W rzeczywistości:Zamiast tego, jeśli chcesz wyrazić długość w metrach, musisz przekształcić geometrię z WGS84 w rzutowany SRS za pomocą pyproj (lub, lepiej, wykonaj obliczenia odległości geodezyjnej, patrz odpowiedź Gene'a). Szczegółowo, ponieważ wersja 1.2.18 (
shapely.__version__
)shapely
obsługuje funkcje transformacji geometrii ( http://toblerity.org/shapely/shapely.html#module-shapely.ops ), z którymi możemy korzystać w połączeniu z niąpyproj
. Oto szybki przykład:źródło