Wie kann ich die Peilung zwischen zwei Punkten in PostGIS berechnen?

19

Wie finde ich die Peilung zwischen zwei Punkten in PostGIS?

Bitte geben Sie in Ihrer Antwort an, ob die Methode zur Herstellung eines Lagers auf dem Sphäroid oder ein Planarlager ist.

fmark
quelle

Antworten:

21

Verwendung von ST_Azimuth

Planare Lager können berechnet werden mit 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

Für kugelförmiges Azimut ( Potgis-Benutzergruppe zitieren ):

Die PostGIS-Azimutfunktion scheint eine einfache Arctan-Funktion zur Bestimmung des Azimuts zu verwenden. Wenn Sie Ihre Koordinaten in ein projiziertes Koordinatensystem konvertieren und dann die Abfrage ausführen, sind Ihre Ergebnisse den Ergebnissen der FCC-Site viel näher.
Hier ist eine schnelle Umstellung auf UTM Zone 31:

select degrees(azimuth(
'POINT(634714.442133176 5802006.052402816)',
'POINT(634731.2410598891 5801981.648284801)'
));

was einen Azimut von 145,457858825445 ergibt. Punkte in der Mitte der UTM-Zone oder eine geeignetere Projektion führen zu besseren Ergebnissen.

Mit trigonometrischen Funktionen und ST_distance_sphere

Dies ist die Lösung, die ich gewählt habe, als ich mich hauptsächlich aus Legacy-Gründen mit diesen Problemen befassen musste (ich hatte eine Python-Funktion, die den Azimut berechnet). Zuerst müssen wir eine Funktion finden, die uns den genauen Abstand zwischen zwei Punkten angibt. Zitat aus dem Postgis-Handbuch :

ST_distance_sphere (point, point) Gibt den linearen Abstand in Metern zwischen zwei Lat / Lon-Punkten zurück. Verwendet eine kugelförmige Erde und einen Radius von 6370986 Metern. Schneller als distance_spheroid (), aber ungenauer. Nur für Punkte implementiert.

Messen Sie den Längen- und Breitengradabstand zwischen den Punkten und verwenden Sie die arctanFunktion, um den Winkel abzurufen.

Adam Matan
quelle
Ich werde versuchen , später den Python - Code zu schreiben, und vielleicht einige Vergleiche zwischen den Methoden machen - wenn ich das Legacy - Code finden ...
Adam Matan
Können Sie klären, wie Sie aus der Ferne in einen Winkel mit gehen atan? Meine Trigonometrie ist ein wenig verschwommen ...
fmark
11

Für alle, die jetzt auf diese Frage stoßen - PostGIS unterstützt ST_Azimuth für Geographie (Sphäroid) ab 2.0.0.

EM0
quelle