SQLと同じレイヤーでオーバーラップするポリゴンを検索します
Aug 21 2020
40kポリゴンのレイヤーが1つあり、ポリゴンが重なっているだけで新しいレイヤーを作成したいと思います。
分離を作成するためにデータベースマネージャーでSQLを使用しようとしましたが、1つのレイヤーでクエリを実行できないようです。
これは私がそれをやろうとした方法です:
SELECT "45k_less".*,
ST_Overlaps("45k_less"."geometry","45k_less"."geometry") "overlaps"
FROM "45k_less"
私もcontainsで同じことを試しましたが、ここで何かが足りないようです-おそらく同じレイヤーであるためですか?
トポロジーチェッカーでそれを行う方法があるのを見ましたが、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