SQL ile aynı katmanda çakışan çokgenleri bulun
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
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"
...
Bu sorgu, her özelliğin kendi kendine kesişimini kontrol edecek
SELECT *
FROM "45k_less"
WHERE St_IsValid(geometry) = 0