Saya menggunakan PostGIS untuk menghitung tetangga terdekat poligon. Yang ingin saya hitung adalah jarak minimum dari setiap poligon, ke poligon terdekat.
Sejauh ini saya mendapat banyak bantuan dari jawaban Mike Toews (yang saya kutip dengan perubahan kecil) di sini:
SELECT
a.hgt AS a_hgt,
b.hgt AS b_hgt,
ST_Distance(a.the_geom, b.the_geom) AS distance_between_a_and_b
FROM
public."TestArea" AS a, public."TestArea" AS b
WHERE
a.hgt != b.hgt AND ST_Distance(a.the_geom, b.the_geom) < 400
Lalu saya menghitung minimum:
SELECT a_hgt, MIN(distance_between_a_and_b)
FROM public."lon_TestArea"
GROUP BY a_hgt
Namun, tantangan saya adalah menghitung ini untuk sejumlah besar poligon (1.000.000). Karena perhitungan di atas membandingkan setiap poligon dengan setiap poligon lain, saya bertanya-tanya bagaimana saya bisa meningkatkan perhitungan sehingga saya tidak harus melakukan perhitungan 10 ^ 12.
Satu pemikiran yang saya miliki adalah untuk buffer setiap poligon, dan kemudian menghitung tetangga terdekat dari semua nilai dalam buffer untuk poligon itu, dan mencatat minimum. Saya tidak yakin apakah itu pendekatan terbaik, atau apakah ada fungsi di PostGIS yang harus saya gunakan.
EDIT: Menggunakan salah satu saran Nicklas, saya bereksperimen dengan ST_Dwithin()
:
CREATE TABLE mytable_withinRange AS SELECT
a.hgt AS a_hgt,
b.hgt AS b_hgt,
ST_DWithin(a.the_geom, b.the_geom, 400)
FROM
public."lon_TestArea" AS a, public."lon_TestArea" AS b
Ini mengembalikan tabel ID dari setiap poligon, dan apakah itu dalam jarak tertentu atau tidak. Apakah mungkin untuk membangun IF/ELSE
pernyataan tipe menggunakan SQL? (Saya membaca tentang menggunakan CASE
kondisi) Atau haruskah saya mencoba bergabung dengan tabel yang saya hasilkan ke tabel asli dan kemudian menjalankan kueri lagi menggunakan ST_Distance?