Bir poligonun bir noktası ve en yakın kısmı arasındaki mesafe ve yön nasıl elde edilir?


9

SQL yazmak ve PostGIS'i kullanmak için oldukça yeniyim, bu biraz basit veya açık görünüyorsa özür dilerim. Bir postGIS veritabanında tutulan çokgen özellikleri bir tablo var ve tüm öznitelikleri, mesafe ve çokgen özelliklerinin belirli bir mesafe içinde belirli bir mesafe içinde yönünü seçmek için bir SQL sorgusu yazmak gerekiyor. Ben özellikleri seçmek ve (ST_Distance kullanarak) mesafeyi hesaplamak başardı ama rulman elde nasıl çalışamaz.

Bu şimdiye kadar kullandığım komut dosyasıdır:

SELECT *,
  ST_Distance (Geometry, ST_GeomFromText ('POINT(292596 90785)', 27700))
FROM mytable
WHERE
  ST_DWithin(
    Geometry,
    ST_GeomFromText('POINT(292596 90785)', 27700),
    250) 

Mesafenin yanı sıra özelliklerin nasıl taşındığını nasıl anlayabilirim?

Yanıtlar:


4

Yatağı hesaplamak için ST_Azimuth'u kullanabilirsiniz, ancak parametre olarak sadece nokta geometrilerini alır, böylece hangi yatağı gerçekten istediğinize karar vermeniz gerekir.

@Nicklas'ın önerdiği gibi en kısa satırı seçebilirsiniz (zaten hesapladığınız mesafeye sahip olanı), bu da çokgene ulaşmak için en hızlı "yön" e ihtiyacınız varsa mantıklıdır. Başka bir şey için, keyfi şekiller için daha iyi sonuçlar vermesi gereken çokgen sentroidine (ST_Centroid) karşı hesaplamanızı öneririm.


2

kullanım

ST_Azimuth (ST_Shortestline (geom1, geom2))

Düzenle

Sadece ST_Azimuth'un argumetn olarak bir linestring almadığını fark ettim, bunun yerine iki puan vermeniz gerekecek.

Geometrilerden biri bir nokta ise, bunu doğrudan kullanabilir ve çokgen üzerindeki noktayı elde etmek için ST_ClosestPoint'i kullanabilirsiniz.


1

ST_Azimuth istediğiniz işlevdir. Radyan cinsinden açıyı kuzeyden saat yönünde döndürür . Üzerinde numunenin olarak ST_Azimuth()sayfa gösterileri, sadece sararak degrees()o ihtiyacınız buysa size derece açı verecek fonksiyonu.

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.