Ho un livello vettoriale con milioni di poligoni che coprono continuamente. Devo classificarli in base alla loro forma. Sto già utilizzando diversi indici di forma dell'ecologia del paesaggio come la compattezza ( 4piA / P ^ 2 ), la larghezza media ( 2A / P ), il numero della forma ( P / sqrt (A) ), ho visto anche questa risposta al calcolo di rotondità / compattezza di poligono?
Il mio problema è che tutte queste metriche utilizzano solo un rapporto tra area e perimetro. Anche l' indice della dimensione frattale utilizza solo l'area e il perimetro ( 2ln (0,25P) / ln (A) ). Ma come posso distinguere due poligoni con la stessa area e perimetro ma forma assolutamente diversa? Come questo poligono ramificato A:
che ho provato a disegnare con la stessa area e perimetro della striscia curva B. Tutti i miei indici noti saranno gli stessi per loro. Ma per me è molto importante differenziare strisce semplici (comprese quelle curve come la luna nuova) da forme ramificate complesse.
Mostro intenzionalmente il poligono B come una striscia curva e non una striscia diritta perché sono a conoscenza dell'indice del Circumcircle correlato che rileva forme allungate diritte, ma i miei poligoni possono avere anche gli stessi circoli. Anche se costruisco lo scafo convesso e calcolo un rapporto tra aree Apolygon / Aconvex , qui potrebbe essere molto simile.
Quindi, come posso distinguere automaticamente il poligono ramificato A dal poligono B nei dati vettoriali ? (La loro conversione in raster richiederebbe dimensioni di cella estremamente ridotte, un set di dati enorme e una mancanza di memoria, quindi non è possibile). Esistono altri indici di forma che includono altri parametri? Idealmente, il metodo distinguerebbe non solo i poligoni chiaramente ramificati ma anche C e D:
La mia unica idea è quella di costruire lo scafo convesso quindi cancellare il poligono dallo scafo convesso e contare il numero di (grandi) pezzi che lascia (cancellando il poligono per poligono e non l'intero strato). Ciò potrebbe mostrare la complessità del confine.
Accolgo con favore soluzioni / algoritmi matematici, che successivamente implementerei in Python.