Eu tenho um conjunto de polígonos representando grandes áreas, digamos bairros da cidade. Quero identificar as grandes áreas sobrepostas entre elas.
Mas há um problema: às vezes esses polígonos se sobrepõem ao longo de seus perímetros (porque foram desenhados com pouca precisão). Isso irá gerar sobreposições longas e estreitas com as quais não me importo.
Outras vezes, porém, haverá grandes sobreposições de polígonos robustos, o que significa grandes áreas em que o polígono de um bairro se sobrepõe a outro. Eu quero selecionar apenas estes.
Veja a figura abaixo apenas das sobreposições. Imagine que eu queria selecionar apenas o polígono azul no canto inferior esquerdo.
Eu podia olhar para as áreas, mas às vezes as estreitas são tão longas que acabam tendo áreas tão grandes quanto o polígono azul. Eu tentei fazer uma proporção de área / perímetro, mas isso também produziu resultados mistos.
Eu até tentei usar ST_MinimumClearance
, mas às vezes as grandes áreas terão uma parte estreita anexada a ela, ou dois vértices muito próximos.
Alguma idéia de outras abordagens?
No final, o que funcionou melhor para mim foi usar um buffer negativo, conforme sugerido por @Cyril e @FGreg abaixo.
Eu usei algo como:
ST_Area(ST_Buffer(geom, -10)) as neg_buffer_area
No meu caso, as unidades eram metros, portanto 10 m de buffer negativo.
Para polígonos estreitos, essa área retornou zero (também, a geometria estaria vazia). Então usei essa coluna para filtrar os polígonos estreitos.