J'ai une couche vectorielle avec des millions de polygones assurant une couverture continue. J'ai besoin de les classer selon leur forme. J'utilise déjà plusieurs indices de forme de l'écologie du paysage comme la compacité ( 4piA / P ^ 2 ), la largeur moyenne ( 2A / P ), le numéro de forme ( P / sqrt (A) ), j'ai également vu cette réponse à Calcul de la rondeur / compacité de polygone?
Mon problème est que toutes ces mesures utilisent uniquement un certain rapport de surface et de périmètre. Même l' indice de dimension fractale utilise uniquement l'aire et le périmètre ( 2ln (0,25 P) / ln (A) ). Mais comment distinguer deux polygones ayant la même surface et le même périmètre mais une forme absolument différente? Comme ce polygone ramifié A:
que j'ai essayé de dessiner avec la même surface et le même périmètre que la bande courbe B. Tous mes index connus seront les mêmes pour eux. Mais pour moi, il est très important de différencier les bandes simples (y compris incurvées comme la nouvelle lune) des formes ramifiées complexes.
Je montre intentionnellement le polygone B sous forme de bande incurvée et non de bande droite parce que je connais l' indice de cercle circonscrit qui détecte les formes allongées droites, mais mes polygones peuvent également avoir les mêmes cercles. Même si je construis une coque convexe et calcule un ratio de zones Apolygone / Aconvex , cela peut être très similaire ici.
Alors, comment puis-je distinguer clairement le polygone ramifié A du polygone B dans les données vectorielles automatiquement? (Les convertir en raster nécessiterait une taille de cellule extrêmement petite, un énorme ensemble de données et un manque de mémoire, donc ce n'est pas possible). Existe-t-il d'autres indices de forme qui incluent d'autres paramètres? Idéalement, la méthode distinguerait non seulement des polygones clairement ramifiés, mais même C et D:
Ma seule idée est de construire la coque convexe puis d'effacer le polygone de sa coque convexe et de compter le nombre de (gros) morceaux qu'elle laisse (effacer polygone par polygone et non la couche entière). Cela pourrait montrer la complexité de la frontière.
Je me réjouis des solutions / algorithmes mathématiques, que je mettrais plus tard en œuvre en Python.