Antworten:
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 ...