Comune piu sviluppato verticale
Trovare il comune più sviluppato in senso verticale (Nord-Sud)↵
Quesito: Usando lo shapefile dei comuni italiani (generalizzato) ISTAT 2025, qual è il comune più sviluppato in senso verticale (Nord-Sud) che non abbia parti separate?

Esempio: il comune di Roma ha due parti separate (multipart geometry), quindi non va considerato
Soluzione↵
Per risolvere questo quesito dobbiamo:
- Filtrare i comuni con geometria singola (escludere le geometrie multipart)
- Calcolare l'estensione verticale di ogni comune (differenza tra coordinate Y massima e minima)
- Ordinare i risultati per trovare il comune con maggiore sviluppo verticale
Passo 1: Creare un campo per identificare geometrie multipart↵
Nel calcolatore di campi, creare un nuovo campo n_parti di tipo intero:
Questa espressione restituisce il numero di parti della geometria. I comuni con una sola parte avranno valore 1.
Passo 2: Calcolare lo sviluppo verticale↵
Creare un nuovo campo sviluppo_verticale_km di tipo decimale (double):
-- Calcola la differenza tra Y massimo e Y minimo
-- e converte in chilometri
(y_max(bounds($geometry)) - y_min(bounds($geometry))) / 1000
Oppure, in alternativa, si può usare:
Passo 3: Filtrare e ordinare↵
Nella tabella attributi:
-
Applicare un filtro per visualizzare solo i comuni con geometria singola:
-
Ordinare il campo
sviluppo_verticale_kmin ordine decrescente
Il primo risultato sarà il comune più sviluppato in senso verticale che non ha parti separate.
Soluzione con una singola espressione↵
È possibile ottenere direttamente il nome del comune e lo sviluppo verticale usando questa espressione nel calcolatore di campi o nella console Python:
array_first(
array_agg(
expression:= map(
'comune', "COMUNE",
'sviluppo_km', bounds_height(@geometry) / 1000
),
filter:= bounds_height(@geometry) = maximum(bounds_height(@geometry), filter:= num_geometries(@geometry) = 1)
)
)
Questa espressione:
- Usa
array_aggper aggregare i dati dei comuni in formato mappa - Filtra solo il comune la cui altezza del bounds è uguale al massimo tra tutti i comuni con geometria singola
- Restituisce una mappa con il nome del comune e il suo sviluppo verticale in km
- Output esempio:
{'comune': 'Nome Comune', 'sviluppo_km': 53.57}
Espressione semplificata per la selezione↵
Per selezionare direttamente il comune cercato:
maximum(bounds_height(@geometry), filter:= num_geometries(@geometry) = 1)
=
bounds_height(@geometry)
Questa espressione confronta l'altezza del bounds della geometria corrente con il massimo delle altezze di tutte le geometrie che hanno una sola parte (num_geometries = 1).
Note↵
- La funzione
num_geometries()restituisce1per geometrie singole e>1per geometrie multipart - La funzione
bounds_height()è equivalente ay_max(bounds()) - y_min(bounds()) - I calcoli sono effettuati nel sistema di riferimento del layer (tipicamente EPSG:32632 o EPSG:3857 per i dati italiani)
- Per dataset molto grandi, è più efficiente creare campi separati per filtrare e ordinare nella tabella attributi