OnlineMapMaker logo

Symmetric Difference Tool: GeoJSON e Shapefile

Disegna o carica due livelli di poligoni e mantieni solo le parti che non si sovrappongono tra loro. Apri a schermo intero ↗

Rate this tool:
Advertisement
Loading map…
Hai bisogno di aiuto con il tuo progetto GIS?Scopri i Nostri Servizi

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

📡
Confronto della copertura di rete telefonica
Confronta i poligoni di copertura di due operatori per isolare le aree servite da esattamente una rete e non dall'altra, le parti più importanti per un'analisi competitiva della copertura.
🛰️
Rilevamento satellitare dei cambiamenti di uso del suolo
Confronta un livello di classificazione del suolo di un anno con la stessa area di un anno successivo per isolare esattamente quali particelle hanno cambiato classificazione, senza ispezionare ogni poligono a mano.
🗳️
Revisione della ridistribuzione dei collegi elettorali
Carica un confine di collegio elettorale attuale e una proposta di ridisegno per vedere con precisione quali aree, e quali elettori, si sposterebbero tra i collegi.
📐
Controversie su confini catastali e rogiti
Sovrapponi un confine di proprietà rilevato professionalmente al confine registrato in un rogito per isolare la precisa striscia di terreno contesa in cui i due non coincidono.
🌊
Aggiornamenti delle mappe delle zone alluvionali
Confronta un vecchio confine di zona alluvionale in stile FEMA con uno aggiornato per evidenziare esattamente quali proprietà sono state aggiunte o rimosse dall'area a rischio di alluvione.
🗺️
Rilevamento di cambiamenti di zonizzazione e confini
Carica un vecchio confine di zonizzazione come Livello A e il nuovo confine proposto come Livello B per vedere esattamente quali aree sono state aggiunte e quali rimosse in un unico risultato combinato, invece di confrontare due mappe a occhio.

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.

Advertisement

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

Mappa vuota dello strumento di differenza simmetrica senza mappa di base caricata, che mostra i pulsanti disegna, carica e poligono di esempio prima di aggiungere qualsiasi livello
1
Passo 1: Apri lo strumento e aggiungi il tuo primo livello
Lo strumento vuoto parte senza mappa di base: disegna un poligono, carica un file, oppure clicca su Poligoni di Esempio.
Due livelli di poligoni di esempio sovrapposti su uno sfondo semplice senza mappa di base, con l'elenco dei livelli visibile nel pannello laterale
2
Passo 2: Aggiungi un secondo livello sovrapposto
Due livelli caricati, ancora senza mappa di base. Il Livello A e il Livello B sono già scelti per te.
Primo piano del pannello laterale che mostra i selettori a tendina Livello A e Livello B e il pulsante Trova Differenza Simmetrica
3
Passo 3: Scegli Livello A e Livello B
Conferma il Livello A e il Livello B, poi clicca su Trova Differenza Simmetrica per eseguire l'overlay.
La differenza simmetrica calcolata mostrata come due forme separate evidenziate sulla mappa con un riquadro dell'area totale nel pannello laterale, mappa di base ora attivata
4
Passo 4: Esamina il risultato non sovrapposto
Il risultato: le aree esatte non sovrapposte, più la loro dimensione combinata. Qui è stata attivata una mappa di base per il contesto.
Pannello del gestore livelli che elenca Livello A, Livello B e il livello di differenza simmetrica con controlli di esportazione e download
5
Passo 5: Esporta il livello del risultato
Esporta il risultato da solo, oppure tutti e tre i livelli insieme, come GeoJSON.

Domande frequenti

Quale algoritmo calcola la differenza simmetrica, ed è accurato?
Lo strumento esegue due volte un algoritmo di differenza booleana con scansione a linee in stile Martinez-Rueda, una volta per A meno B e una per B meno A, lo stesso motore usato dallo Strumento Differenza tra Poligoni e dallo Strumento di Intersezione tra Poligoni di questo sito. Gestisce correttamente poligoni concavi e poligoni con buchi.
In cosa si differenzia da una differenza normale (erase)?
Una differenza normale è unidirezionale: sottrae il Livello B dal Livello A e mantiene solo ciò che resta di A. La differenza simmetrica è bidirezionale: mantiene la parte esclusiva di A e la parte esclusiva di B, così vedi cosa è cambiato su entrambi i lati, non solo su uno.
Posso usarlo con più poligoni per livello?
Sì. Se un livello ha più di un feature, questi vengono prima uniti in un'unica forma tramite un'unione booleana, così la differenza simmetrica viene calcolata tra i due livelli nel loro insieme, non feature per feature.
I miei dati vengono caricati da qualche parte?
No. Il disegno, la lettura dei file, il passaggio di dissoluzione, entrambi i passaggi di differenza e il calcolo finale dell'area avvengono tutti localmente nel tuo browser tramite JavaScript. Non viene inviato nulla a un server.
Perché la mappa parte senza mappa di base, e come ne attivo una?
La mappa si carica senza tile stradali o satellitari per impostazione predefinita, così lo strumento si apre velocemente e l'attenzione resta sui tuoi poligoni. Seleziona la casella "Mostra mappa di base" nel pannello laterale ogni volta che vuoi un contesto geografico, e scegli Stradale o Satellitare una volta attivata.
Questo strumento mostra anche l'area sovrapposta, o solo le parti non sovrapposte?
Solo le parti non sovrapposte. L'area condivisa e sovrapposta viene deliberatamente scartata, questo è l'intero senso di una differenza simmetrica. Se ti serve la sovrapposizione stessa, lo Strumento di Intersezione tra Poligoni di questo sito calcola esattamente quella.
Cos'è una differenza simmetrica in GIS?
La differenza simmetrica è un'operazione di overlay vettoriale che mantiene solo l'area appartenente esattamente a uno dei due livelli di poligoni, non a entrambi. Si scrive A ⊕ B = (A ∪ B) − (A ∩ B): tutto ciò che è in una delle due forme, meno ciò che condividono.
Come trovo le parti di due poligoni che non si sovrappongono?
Disegna o carica due livelli di poligoni, scegli Livello A e Livello B in questo strumento, e clicca su "Trova Differenza Simmetrica". L'area sovrapposta viene scartata completamente, e nel risultato rimangono solo le due parti non sovrapposte.
Quale software GIS ha uno strumento di differenza simmetrica integrato?
PostGIS ha ST_SymDifference come funzione SQL, QGIS ha un algoritmo "Differenza Simmetrica" nella sua Processing Toolbox, ArcGIS Pro ha uno strumento di geoelaborazione Differenza Simmetrica, e Shapely di Python ha un metodo .symmetric_difference(). Tutti calcolano lo stesso risultato di questo strumento.
Posso caricare GeoJSON o Shapefile, o solo disegnare?
Entrambi. Disegna direttamente sulla mappa, rilascia un file .geojson, oppure rilascia uno Shapefile compresso (.zip contenente .shp, .dbf e .shx). Tutti e tre i metodi di input possono essere combinati per il Livello A e il Livello B.

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.

Advertisement

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.

Advertisement

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.

Muhammad Gulraiz Khan, esperto GIS e fondatore di KONAKTIVE e OnlineMapMaker.com

Informazioni sull’Autore

Muhammad Gulraiz Khan

Esperto e Consulente GIS · Fondatore di KONAKTIVE

Muhammad Gulraiz Khan è un esperto GIS con oltre dieci anni di esperienza professionale nella fornitura di soluzioni geospaziali per il settore energetico, tra cui progetti per la Banca Mondiale, l’International Finance Corporation (IFC) e USAID. Ha creato OnlineMapMaker.com per rendere gli strumenti di mappatura professionali gratuiti e accessibili a tutti.

Advertisement