Temukan poligon yang tumpang tindih di lapisan yang sama dengan SQL
Saya memiliki satu lapisan dengan poligon 40k dan saya ingin membuat lapisan baru hanya dengan poligon yang saling tumpang tindih.
Saya telah mencoba menggunakan SQL di db manager untuk membuat beberapa pemisahan tetapi sepertinya saya tidak dapat menjalankan kueri pada satu lapisan.
inilah cara saya mencoba melakukan itu:
SELECT "45k_less".*,
ST_Overlaps("45k_less"."geometry","45k_less"."geometry") "overlaps"
FROM "45k_less"
Saya juga mencoba hal yang sama dengan berisi tetapi sepertinya saya melewatkan sesuatu di sini - mungkin karena itu lapisan yang sama?
Saya melihat ada cara untuk melakukannya dengan pemeriksa topologi tetapi adakah cara untuk melakukan kueri ini di dalam db manager?
Jawaban
Ini mirip dengan cara Anda menemukan duplikat dalam sebuah atribut, Anda perlu menggabungkan lapisan itu sendiri dan kemudian mengecualikan tumpang tindih diri. Jadi kueri seperti:
select a.name, b.name
from us_counties.states a, us_counties.states b
where a.fid <> b.fid and ST_Touches(a.geom_4269, b.geom_4269)
Atau
select a.name, b.name from us_counties.states a
JOIN us_counties.states b
ON a.fid <> b.fid and ST_Touches(a.geom_4269, b.geom_4269)
order by a.name, b.name
Catatan Saya menggunakan ST_Touches karena saya tidak memiliki data yang tumpang tindih, ini memberi
"name","name-2"
"Kansas","Oklahoma"
"Kansas","Missouri"
"Kansas","Nebraska"
"Kansas","Colorado"
"Oregon","Idaho"
"Oregon","Nevada"
"Oregon","California"
"Oregon","Washington"
"Texas","Oklahoma"
"Texas","Louisiana"
"Texas","New Mexico"
"Texas","Arkansas"
"Idaho","Nevada"
...
Kueri ini akan memeriksa persimpangan mandiri dari setiap fitur
SELECT *
FROM "45k_less"
WHERE St_IsValid(geometry) = 0