Jak znaleźć kierunek między dwoma punktami w PostGIS?
Proszę podać w swojej odpowiedzi, czy metoda wytwarzająca łożysko na sferoidie, czy łożysko płaskie.
Łożysko płaskie można obliczyć za pomocą ST_Azimuth
:
SELECT ST_Azimuth(ST_MakePoint(1,2),
ST_MakePoint(3,4))/(2*pi())*360 as degAz,
ST_Azimuth(ST_MakePoint(3,4),
ST_MakePoint(1,2))/(2*pi())*360 As degAzrev
degaz degazrev
------ ---------
45 225
Dla sferycznego azymutu (Cytując grupę potgis-users ):
Wydaje się, że funkcja azymutu PostGIS używa prostej funkcji arctan do wyznaczania azymutu. Jeśli przekonwertujesz swoje współrzędne na rzutowany układ współrzędnych, a następnie uruchomisz zapytanie, wyniki będą znacznie bliższe wynikom witryny FCC.
Oto szybka konwersja do strefy 31 UTM:
select degrees(azimuth(
'POINT(634714.442133176 5802006.052402816)',
'POINT(634731.2410598891 5801981.648284801)'
));
co daje azymut 145,457858825445. Punkty w środku strefy UTM lub bardziej odpowiednia projekcja dawałyby lepsze wyniki.
Jest to rozwiązanie, które wybrałem, gdy musiałem poradzić sobie z tymi problemami, głównie z powodów starszych (miałem funkcję Pythona, która oblicza azymut). Najpierw musimy znaleźć funkcję, która powiedziałaby nam dokładną odległość między dwoma punktami. Cytując podręcznik Postgis :
ST_distance_sphere (punkt, punkt) Zwraca odległość liniową w metrach między dwoma punktami lat / lon. Wykorzystuje sferyczną ziemię i promień 6370986 metrów. Szybszy niż distance_spheroid (), ale mniej dokładny. Zaimplementowane tylko dla punktów.
Zmierz długość i szerokość geograficzną między punktami i użyj arctan
funkcji, aby pobrać kąt.
atan
? Moja trygonometria jest trochę mglista ...Dla każdego, kto natknie się teraz na to pytanie - PostGIS obsługuje ST_Azimuth na geografii (sferoidy) od 2.0.0.
źródło