Tengo un conjunto de polígonos que representan grandes áreas, por ejemplo, barrios de la ciudad. Quiero identificar las grandes áreas superpuestas entre ellos.
Pero hay un problema: a veces estos polígonos se superponen a lo largo de sus perímetros (porque fueron dibujados con poca precisión). Esto generará superposiciones largas y estrechas que no me importan.
Pero otras veces habrá grandes superposiciones de polígonos robustos, lo que significa grandes áreas donde el polígono de un vecindario se superpone a otro. Quiero seleccionar solo estos.
Vea la imagen a continuación de solo las superposiciones. Imagine que quisiera seleccionar solo el polígono azul en la esquina inferior izquierda.
Podría mirar áreas, pero a veces las angostas son tan largas que terminan teniendo áreas tan grandes como el polígono azul. Intenté hacer una relación de área / perímetro, pero eso también arrojó resultados mixtos.
Incluso he intentado usar ST_MinimumClearance
, pero a veces las áreas grandes tendrán una parte estrecha unida o dos vértices muy cercanos.
¿Alguna idea de otros enfoques?
Al final, lo que mejor funcionó para mí fue usar un búfer negativo, como lo sugieren @Cyril y @FGreg a continuación.
Usé algo como:
ST_Area(ST_Buffer(geom, -10)) as neg_buffer_area
En mi caso, las unidades eran metros, entonces 10 m de amortiguación negativa.
Para polígonos estrechos, esta área devolvió cero (también, la geometría estaría vacía). Luego usé esta columna para filtrar los polígonos estrechos.