SQL ile aynı katmanda çakışan çokgenleri bulun

Aug 21 2020

40k çokgenli bir katmanım var ve yalnızca birbiriyle örtüşen çokgenlerle yeni katman oluşturmak istiyorum.
Bazı ayrımlar oluşturmak için db yöneticisinde SQL kullanmayı denedim ama sorguyu tek bir katmanda çalıştıramıyorum gibi görünüyor.

bunu böyle yapmaya çalıştım:

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

Aynı şeyi içerir ile de denedim ama burada bir şeyi özlüyorum - belki de aynı katman olduğu için?

Bunu topoloji denetleyicisiyle yapmanın bir yolu olduğunu gördüm, ancak bu sorguyu db yöneticisi içinde yapmanın bir yolu var mı?

Yanıtlar

2 IanTurton Aug 21 2020 at 10:06

Bu, bir öznitelikte yinelenenleri bulma şeklinize benzer, katmanı kendisine birleştirmeniz ve ardından kendiliğinden çakışmaları hariç tutmanız gerekir. Yani şöyle bir sorgu:

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)

Veya

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

Not Verilerimde hiçbir örtüşme olmadığı için ST_Touches kullanıyorum, bu

"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

Bu sorgu, her özelliğin kendi kendine kesişimini kontrol edecek

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