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.
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.
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 arctan
Funktion, um den Winkel abzurufen.
atan
? Meine Trigonometrie ist ein wenig verschwommen ...Für alle, die jetzt auf diese Frage stoßen - PostGIS unterstützt ST_Azimuth für Geographie (Sphäroid) ab 2.0.0.
quelle