SQL을 사용하여 동일한 레이어에서 겹치는 다각형 찾기

Aug 21 2020

40k 폴리곤이있는 레이어가 하나 있는데, 서로 겹치는 폴리곤만으로 새 레이어를 만들고 싶습니다.
일부 분리를 만들기 위해 db 관리자에서 SQL을 사용하려고 시도했지만 한 레이어에서 쿼리를 실행할 수없는 것 같습니다.

이것이 내가 그것을 시도한 방법입니다.

SELECT "45k_less".*,
ST_Overlaps("45k_less"."geometry","45k_less"."geometry") "overlaps" 
FROM "45k_less"

포함으로도 똑같이 시도했지만 여기에서 뭔가 놓친 것 같습니다. 동일한 레이어이기 때문일까요?

토폴로지 검사기로 수행하는 방법이 있지만 db 관리자 내 에서이 쿼리를 수행하는 방법이 있습니까?

답변

2 IanTurton Aug 21 2020 at 10:06

이것은 속성에서 중복을 찾는 방법과 유사하며 레이어를 자체에 결합한 다음 자체 중복을 제외해야합니다. 따라서 다음과 같은 쿼리가 있습니다.

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)

또는

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

내 데이터에 겹치는 부분이 없기 때문에 ST_Touches를 사용하고 있습니다.

"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

이 쿼리는 각 기능의 자체 교차를 확인합니다.

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