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