Calcolare il rapporto tra perimetro del Convex Hull e area del poligono↵
Quesito: Come calcolare l'indice di compattezza di un poligono usando il rapporto tra il perimetro del suo inviluppo convesso (Convex Hull) e la sua area? Questo indice è utile per identificare poligoni irregolari o molto frastagliati.

Esempio: poligoni con forme irregolari hanno valori più alti dell'indice
Soluzione↵
L'indice di compattezza basato sul Convex Hull permette di misurare quanto un poligono si discosta dalla sua forma convessa ideale. Valori più alti indicano forme più irregolari, frastagliate o allungate.
Passo 1: Calcolare il perimetro del Convex Hull↵
Nel calcolatore di campi, creare un nuovo campo perim_convex di tipo decimale (double):
Questa espressione: - Calcola il Convex Hull (inviluppo convesso) del poligono - Restituisce il perimetro di questa geometria convessa
Passo 2: Calcolare l'indice di compattezza↵
Creare un nuovo campo indice_compattezza di tipo decimale (double):
Oppure, per un indice normalizzato (0-1), dove valori vicini a 1 indicano maggiore compattezza:
Passo 3: Interpretare i risultati↵
Ordinare il campo indice_compattezza per identificare:
- Valori alti (primo metodo): Poligoni molto irregolari, frastagliati o allungati
- Valori bassi (secondo metodo normalizzato): Poligoni molto irregolari
Soluzione completa con una singola espressione↵
Per ottenere direttamente l'indice di compattezza con informazioni aggiuntive:
map(
'nome', "NOME_CAMPO",
'area_mq', round($area, 2),
'perim_convex', round(perimeter(convex_hull($geometry)), 2),
'perim_effettivo', round($perimeter, 2),
'indice_frastagli', round(perimeter(convex_hull($geometry)) / $area * 1000, 4),
'compattezza_norm', round((4 * pi() * $area) / perimeter(convex_hull($geometry))^2, 4)
)
Questa espressione restituisce una mappa con: - Il nome dell'elemento - L'area in metri quadrati - Il perimetro del convex hull - Il perimetro effettivo del poligono - L'indice di frastagliatura (perimetro convex/area) - L'indice di compattezza normalizzato
Selezione dei poligoni più irregolari↵
Per selezionare i poligoni con maggiore irregolarità (es. top 10%):
perimeter(convex_hull(@geometry)) / $area >=
array_get(
array_sort(
array_agg(perimeter(convex_hull(@geometry)) / $area)
),
floor(count($id) * 0.9)
)
Applicazioni pratiche↵
Questo indice è particolarmente utile per:
- Analisi urbanistica: Identificare lotti edilizi irregolari o difficili da edificare
- Catasto: Validare la regolarità delle particelle catastali
- Ecologia del paesaggio: Analizzare la frammentazione di habitat naturali
- Agricoltura: Valutare l'efficienza di appezzamenti agricoli
- Pianificazione territoriale: Identificare aree che potrebbero beneficiare di ricomposizione fondiaria
Confronto tra forme↵
| Forma | Indice frastagl. | Compattezza norm. |
|---|---|---|
| Cerchio | ~0.0035 | 1.0 |
| Quadrato | ~0.004 | ~0.7854 |
| Rettangolo 2:1 | ~0.006 | ~0.628 |
| Poligono frastagliato | >0.01 | <0.5 |
Note↵
- La funzione
convex_hull()genera il più piccolo poligono convesso che contiene la geometria originale - L'indice è sensibile alla scala: normalizzare dividendo per l'area rende il confronto indipendente dalle dimensioni
- Per geometrie multipart, considerare l'uso di
num_geometries()per filtrarle prima dell'analisi - L'indice di compattezza normalizzato (Circle Ratio) varia tra 0 e 1, con 1 che rappresenta un cerchio perfetto
- Valori dell'indice di frastagliatura dipendono dall'unità di misura dell'area e del perimetro
Riferimenti↵
- convex_hull
- perimeter
- $area
- $perimeter
- pi
- round
- map
- ^ (operatore elevamento a potenza)