Jak obliczyć namiar między dwoma punktami w PostGIS?

19

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.

fmark
źródło

Odpowiedzi:

21

Używanie ST_Azimuth

Ł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.

Korzystanie z funkcji trygonometrycznych i ST_distance_sphere

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 arctanfunkcji, aby pobrać kąt.

Adam Matan
źródło
Spróbuję opublikować kod python później i być może dokonam porównań między metodami - Jeśli znajdę ten starszy kod ...
Adam Matan
Czy możesz wyjaśnić, w jaki sposób podchodzisz z odległości do kąta atan? Moja trygonometria jest trochę mglista ...
fmark
11

Dla każdego, kto natknie się teraz na to pytanie - PostGIS obsługuje ST_Azimuth na geografii (sferoidy) od 2.0.0.

EM0
źródło