Temukan poligon yang tumpang tindih di lapisan yang sama dengan SQL

Aug 21 2020

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

2 IanTurton Aug 21 2020 at 10:06

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"
...
Taras Aug 21 2020 at 10:04

Kueri ini akan memeriksa persimpangan mandiri dari setiap fitur

SELECT *
FROM "45k_less"
WHERE St_IsValid(geometry) = 0