Cos'è una differenza simmetrica in GIS?
La differenza simmetrica (chiamata anche XOR, o esclusivo) è un'operazione di overlay vettoriale che mantiene solo le parti di due livelli di poligoni che non si sovrappongono, scartando completamente l'area condivisa. Ogni volta che devi capire cosa è cambiato tra due confini, che si tratti di una vecchia linea di zonizzazione rispetto a una nuova, o di due aree di copertura da confrontare, questo strumento risponde alla domanda. Esegue l'intero calcolo localmente nel tuo browser: disegna due forme direttamente sulla mappa, oppure carica un file GeoJSON o uno Shapefile compresso, e funziona come uno strumento autonomo di differenza simmetrica GeoJSON e Shapefile senza inviare i tuoi dati da nessuna parte. La mappa stessa si carica senza mappa di base per impostazione predefinita, così lo strumento parte veloce e leggero; attiva una mappa di base dal pannello laterale solo se vuoi un contesto stradale o satellitare sotto i tuoi livelli.
Casi d'uso reali
Come aggiungere i tuoi livelli di poligoni
Ci sono due modi per portare poligoni nello strumento prima di calcolare una differenza simmetrica, ed entrambi accettano GeoJSON o uno Shapefile compresso:
- Disegna sulla mappa: Clicca su "Disegna Poligono", clicca sulla mappa per posizionare i vertici, poi fai doppio clic, premi Invio, oppure clicca su Fine per chiudere la forma. Ripeti per aggiungere un secondo poligono.
- Carica un file: Trascina e rilascia un file .geojson o uno Shapefile compresso (.zip con .shp/.dbf/.shx all'interno) in qualsiasi punto della mappa, oppure usa il pulsante Carica. Vengono letti solo i feature di tipo Polygon e MultiPolygon; punti e linee vengono ignorati.
Una volta che hai almeno due livelli di poligoni, scegli uno come Livello A e l'altro come Livello B nel pannello laterale, poi clicca su "Trova Differenza Simmetrica" per mantenere solo l'area in cui non si sovrappongono.
Esportare i tuoi risultati
Ogni livello può essere esportato in modo indipendente, oppure puoi esportare tutto insieme:
- Esportazione di un singolo livello: L'icona di download accanto a qualsiasi livello esporta solo i feature di quel livello come file .geojson autonomo.
- Esporta tutto: Il pulsante "Scarica Tutti i Livelli" combina il Livello A, il Livello B e il risultato della differenza simmetrica in un'unica FeatureCollection GeoJSON, etichettando ogni feature con il livello da cui proviene.
- Formato GeoJSON: I file di output sono GeoJSON standard secondo RFC 7946, che si apre direttamente in QGIS, ArcGIS, Google Earth, Mapbox e praticamente ogni altro strumento GIS.
Poiché l'output è GeoJSON semplice, viene reimportato senza problemi in questo stesso strumento in seguito, oppure in qualsiasi flusso di lavoro GeoJSON o Shapefile che usi successivamente in un software GIS desktop.
Come funziona l'algoritmo di differenza simmetrica
La differenza simmetrica ha una definizione semplice basata sulla teoria degli insiemi: è ogni punto che appartiene al Poligono A o al Poligono B, ma non a entrambi. Scritta come formula, A ⊕ B = (A ∪ B) − (A ∩ B), l'unione delle due forme meno la loro intersezione. Esiste un secondo modo, equivalente, di scrivere la stessa operazione che in pratica è più facile da calcolare in modo affidabile: A ⊕ B = (A − B) ∪ (B − A), le parti di A con B cancellato, combinate con le parti di B con A cancellato. Questo strumento usa la seconda forma.
Questa scelta è importante perché calcolare prima un'unione completa e poi sottrarne un'intersezione significa eseguire due operazioni booleane di overlay separate una dopo l'altra, e qualsiasi errore di arrotondamento nella prima si propaga nella seconda. Eseguire invece due operazioni di differenza indipendenti, una per A meno B e una per B meno A, e semplicemente inserire entrambi i risultati nello stesso livello di output, non richiede alcuna geometria intermedia condivisa, e ciascuna metà può fallire indipendentemente senza compromettere l'altra. Se un set di dati reale ha un anello mal formato, questo strumento restituisce comunque la metà che è riuscita, etichettata in modo da sapere quale sia.
La pipeline eseguita da questo strumento
- Dissolvere ogni livello di input: Se un livello ha più di un feature, tutti i poligoni al suo interno vengono prima uniti in un'unica geometria tramite un'unione booleana, in modo che il livello si comporti come una singola forma anziché come un elenco di parti separate.
- Calcolare A meno B: La geometria dissolta del Livello A e quella del Livello B vengono passate allo stesso algoritmo di differenza booleana con scansione a linee (sweep-line) usato dallo Strumento Differenza tra Poligoni di questo sito, mantenendo solo la parte di A che si trova al di fuori di B.
- Calcolare B meno A: Lo stesso algoritmo viene eseguito una seconda volta con i livelli invertiti, mantenendo solo la parte di B che si trova al di fuori di A.
- Etichettare e combinare entrambe le metà: Ogni parte rimanente viene etichettata nelle sue proprietà come solo A o solo B e inserita in un unico livello di output, in modo che il risultato mostri sempre esattamente dove i due input differiscono.
- Sommare l'area esclusiva: L'area di ogni feature di output viene sommata con una formula di area sferica e mostrata in ettari, chilometri quadrati e acri, così ottieni un numero oltre a una forma.
Ciascuno dei due passaggi di differenza è a sua volta un algoritmo di clipping booleano con scansione a linee in stile Martinez-Rueda: ordina ogni estremità di bordo da sinistra a destra, spazza i dati con una linea verticale e classifica ogni segmento risultante come interno o esterno all'altro poligono usando regole di avvolgimento (winding), esattamente lo stesso motore e la stessa matematica usati dallo Strumento di Intersezione tra Poligoni e dallo Strumento Differenza tra Poligoni di questo sito. La differenza simmetrica non richiede un nuovo algoritmo di clipping, ha solo bisogno di quello esistente chiamato due volte con gli operandi invertiti.
Le librerie GIS dietro la differenza simmetrica
La differenza simmetrica è abbastanza comune da essere offerta dalla maggior parte dei software GIS come un singolo strumento con nome proprio, anche se sotto il cofano è quasi sempre costruita a partire dalle stesse primitive di unione e differenza descritte in questa pagina.
- Turf.js (difference + union): Il motore proprio di questo strumento. Turf.js non ha un'unica funzione symmetricDifference, quindi questo strumento chiama @turf/difference due volte e @turf/union per dissolvere livelli con più feature, tutto come JavaScript puro direttamente nella scheda del tuo browser.
- PostGIS ST_SymDifference: L'estensione spaziale di PostgreSQL offre ST_SymDifference come singola funzione SQL, basata sulla libreria GEOS, lo stesso motore C++ che calcola ST_Intersection e ST_Difference.
- QGIS Differenza Simmetrica: La Processing Toolbox di QGIS ha un algoritmo dedicato "Differenza Simmetrica" sotto Overlay Vettoriale, che chiama anch'esso GEOS sotto l'interfaccia.
- ArcGIS Differenza Simmetrica: ArcGIS Pro di Esri offre uno strumento di geoelaborazione Differenza Simmetrica con lo stesso comportamento, due livelli in input, ottieni lo XOR, ma implementato con il motore geometrico proprio di Esri anziché GEOS.
- Shapely (symmetric_difference): La libreria Python Shapely espone un metodo .symmetric_difference() direttamente sui suoi oggetti geometrici, che, come quasi tutto in Shapely, delega internamente a GEOS.
Tutti e cinque gli strumenti concordano sulla stessa matematica di base, poiché la differenza simmetrica ha esattamente una risposta corretta per una data coppia di geometrie. La differenza pratica, come per gli altri strumenti di overlay di questo sito, sta in dove viene eseguito il calcolo: gli strumenti basati su GEOS richiedono PostgreSQL, QGIS o un ambiente Python installato, mentre il motore Turf.js di questo strumento funziona come un cercatore di XOR di poligoni direttamente sul tuo dispositivo, quindi nessun file viene mai caricato da nessuna parte.
Passo dopo passo: trovare una differenza simmetrica





Domande frequenti
Gestire più livelli
Il gestore livelli nel pannello laterale mantiene in un unico elenco ogni livello di poligoni che aggiungi, oltre a ogni risultato di differenza simmetrica che generi. Puoi eseguire lo strumento più di una volta con coppie di livelli diverse, mantenere tutti i risultati sulla mappa contemporaneamente, ed eliminare qualsiasi livello di cui non hai più bisogno senza influire sugli altri, utile per verificare come diversi confini candidati differiscono ciascuno da un livello di base.
Stilizzare i tuoi livelli
Ogni livello, incluso il risultato, può essere ristilizzato in modo indipendente, e la mappa di base stessa è del tutto opzionale:
- Selettore colore: Clicca sul campione di colore accanto a qualsiasi livello nel pannello laterale per cambiare istantaneamente il suo colore di riempimento e contorno.
- Attiva/disattiva visibilità: Deseleziona un livello per nasconderlo sulla mappa senza eliminarlo, utile per confrontare il Livello A e il Livello B con il risultato separatamente.
- Attiva/disattiva mappa di base: La mappa si carica senza mappa di base per impostazione predefinita, così lo strumento resta veloce e l'attenzione resta sulle tue forme. Seleziona "Mostra mappa di base" nel pannello laterale in qualsiasi momento per aggiungere una mappa di base Stradale o Satellitare sotto i tuoi livelli, e disattivala altrettanto facilmente.
Nessuno di questi stili viene salvato al di fuori della tua sessione, controllano solo l'aspetto della mappa mentre lavori.
Strumenti di Geoelaborazione Correlati
Map tiles © OpenStreetMap contributors and CARTO, Esri (satellite, opt-in). Symmetric difference math powered by Turf.js. Shapefile parsing by shpjs. Map rendering by Leaflet. All drawing, file reading and calculation is local, no data is uploaded to any server.
