Tengo una capa vectorial con millones de polígonos que hacen una cobertura continua. Necesito clasificarlos según su forma. Ya estoy usando varios índices de formas de la ecología del paisaje como la compacidad ( 4piA / P ^ 2 ), el ancho medio ( 2A / P ), el número de forma ( P / sqrt (A) ), también vi esta respuesta para Calcular la redondez / compacidad de ¿polígono?
Mi problema es que todas estas métricas utilizan solo una proporción de área y perímetro. Incluso el índice de Dimensión Fractal está usando solo área y perímetro ( 2ln (0.25P) / ln (A) ). Pero, ¿cómo puedo distinguir dos polígonos con la misma área y perímetro pero con una forma absolutamente diferente? Como este polígono ramificado A:
que traté de dibujar con la misma área y perímetro que la tira curva B. Todos mis índices conocidos serán los mismos para ellos. Pero para mí es muy importante diferenciar las tiras simples (incluidas las curvas como la luna nueva) de las formas ramificadas complejas.
Muestro intencionalmente el polígono B como una franja curva y no una franja recta porque conozco el índice de circunferencia circunscrita que detecta formas alargadas rectas, pero mis polígonos también pueden tener las mismas circunferencias. Incluso si construyo el casco convexo y calculo una proporción de áreas Apolygon / Aconvex , puede ser muy similar aquí.
Entonces, ¿cómo puedo distinguir claramente el polígono A ramificado del polígono B en los datos vectoriales automáticamente? (Convertirlos en ráster requeriría un tamaño de celda extremadamente pequeño, un enorme conjunto de datos y una falta de memoria, por lo que no es posible). ¿Hay otros índices de forma que incluyen otros parámetros? Idealmente, el método distinguiría no solo polígonos claramente ramificados sino incluso C y D:
Mi única idea es construir el casco convexo, luego borrar el polígono de su casco convexo y contar el número de piezas (grandes) que deja (borrando polígono por polígono y no toda la capa). Esto podría mostrar la complejidad de la frontera.
Doy la bienvenida a soluciones / algoritmos matemáticos, que luego implementaría en Python.