Bagaimana cara mendapatkan jarak & bantalan antara titik dan bagian terdekat dari poligon?

9

Saya cukup baru dalam menulis SQL dan menggunakan PostGIS jadi minta maaf jika ini tampak agak sederhana atau jelas. Saya memiliki tabel fitur poligon yang disimpan dalam database postGIS dan saya perlu menulis query SQL untuk memilih semua atribut, jarak dan arah fitur poligon dalam jarak tertentu dari titik yang telah ditentukan. Saya telah berhasil memilih fitur dan menghitung jarak (menggunakan ST_Distance) tetapi tidak dapat menemukan cara mendapatkan bantalan.

Ini skrip yang saya gunakan sejauh ini:

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

Bagaimana cara mengetahui bantalan fitur serta jarak?

JamesC
sumber

Jawaban:

4

Anda dapat menggunakan ST_Azimuth untuk menghitung bantalan, tetapi hanya membutuhkan titik geometri sebagai parameter, jadi Anda harus memutuskan bantalan mana yang benar-benar Anda inginkan.

Anda bisa memilih garis terpendek seperti yang disarankan @Nlaslas (yang dengan jarak yang sudah Anda hitung), yang masuk akal jika Anda membutuhkan "arah" tercepat untuk mencapai poligon. Untuk hal lain, saya sarankan Anda menghitungnya terhadap poligon centroid (ST_Centroid), yang akan memberikan hasil yang lebih baik untuk bentuk sewenang-wenang.

lynxlynxlynx
sumber
2

Menggunakan

ST_Azimuth (ST_Shortestline (geom1, geom2))

sunting

Saya baru menyadari bahwa ST_Azimuth tidak mengambil linestring sebagai argumetn sehingga Anda perlu memberikan dua poin sebagai gantinya.

Jika salah satu geometri adalah sebuah titik maka Anda dapat menggunakannya secara langsung dan menggunakan ST_ClosestPoint untuk mendapatkan titik pada poligon.

Nicklas Avén
sumber
1

ST_Azimuth adalah fungsi yang Anda inginkan. Ia mengembalikan sudut dalam radian searah jarum jam dari utara. Seperti yang ST_Azimuth()ditunjukkan sampel pada halaman, cukup membungkusnya dalam degrees()fungsi akan memberi Anda sudut dalam derajat jika itu yang Anda butuhkan.

MerseyViking
sumber