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