Yanıtlar:
Düzlemsel rulman aşağıdakiler kullanılarak hesaplanabilir 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
Küresel azimut için (Alıntı potgis-users grubu ):
PostGIS azimut fonksiyonu, azimutu belirlemek için basit bir arktan fonksiyonu kullanıyor gibi görünmektedir. Koordinatlarınızı öngörülen bir koordinat sistemine dönüştürüp sorguyu çalıştırırsanız, sonuçlarınız FCC sitesinin sonuçlarına çok daha yakın olacaktır.
İşte UTM Zone 31'e hızlı bir dönüştürme:
select degrees(azimuth(
'POINT(634714.442133176 5802006.052402816)',
'POINT(634731.2410598891 5801981.648284801)'
));
145.457858825445'lik bir azimut verir. UTM bölgesinin ortasındaki noktalar veya daha uygun bir projeksiyon daha iyi sonuç verir.
Bu, özellikle eski nedenlerle (azimutu hesaplayan bir Python işlevim vardı) bu sorunlarla başa çıkmak zorunda kaldığım zaman seçtiğim çözümdür. İlk olarak, bize iki nokta arasındaki tam mesafeyi anlatacak bir fonksiyon bulmamız gerekiyor. Postgis kılavuzundan alıntı :
ST_distance_sphere (nokta, nokta) İki lat / lon noktası arasındaki metre cinsinden doğrusal mesafeyi döndürür. Küresel bir dünya ve 6370986 metrelik yarıçapı kullanır. Distance_spheroid () 'den daha hızlı, ancak daha az doğru. Yalnızca noktalar için uygulanır.
Noktalar arasındaki Boylam ve Enlem mesafesini ölçün ve arctan
açıyı almak için işlevi kullanın.
atan
? Benim trigonmetri biraz puslu ...