PostGIS'te iki nokta arasındaki yönü nasıl hesaplayabilirim?


19

PostGIS'te iki nokta arasındaki yönü nasıl bulabilirim?

Lütfen cevabınızda sferoid üzerinde yatak üreten yöntemin mi yoksa düzlemsel yatak mı olduğunu belirtin.

Yanıtlar:


21

ST_Azimuth kullanma

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.

Trigonometrik fonksiyonları ve ST_distance_sphere'i kullanma

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 arctanaçıyı almak için işlevi kullanın.


Daha sonra python kodunu göndermeye çalışacağım ve belki de yöntemler arasında bazı karşılaştırmalar yapacağım - Bu eski kodu bulabilirsem ...
Adam Matan

Uzaktan bir açıyla nasıl gideceğinizi açıklayabilir misiniz atan? Benim trigonmetri biraz puslu ...
fmark

11

Şimdi bu soruya rastlayan herkes için - PostGIS 2.0.0 itibariyle ST_Azimuth'u coğrafyada (sferoid) desteklemektedir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.