Saya memiliki dua set poligon dalam dua tabel. Set saling tumpang tindih. Untuk setiap poligon di set A, saya ingin mendapatkan ID poligon di set B yang paling banyak tumpang tindih. Saya menggunakan PostgreSQL dengan ekstensi PostGIS.
Saya tahu cukup banyak tentang SQL untuk mengetahui bahwa Anda hanya dapat bergabung berdasarkan kondisi benar / salah. Jadi ini tidak akan berhasil:
SELECT
a.id as a_id,
b.id as b_id,
FROM
a
JOIN
b
ON
max(ST_Area(ST_Intersection(a.geom, b.geom)))
karena maks () tidak boleh ada dalam klausa ON.
ST_Intersects()
adalah tes benar / salah, jadi saya bisa bergabung dengan itu, tetapi poligon di set A sering akan tumpang tindih dengan lebih dari satu poligon di set B, dan saya perlu tahu mana yang paling tumpang tindih . ST_Intersects mungkin hanya mengembalikan ID yang tumpang tindih pertama yang ditemuinya, terlepas dari tingkat tumpang tindih.
Sepertinya ini bisa dilakukan, tapi itu di luar kemampuanku. Adakah pikiran?
sumber
DISTINCT ON
baru bagi saya - sangat berguna dalam konteks ini.