Qu'est-ce qu'une différence symétrique en SIG ?
La différence symétrique (aussi appelée XOR, ou ou exclusif) est une opération d'overlay vectoriel qui ne conserve que les parties de deux couches de polygones qui ne se chevauchent pas, en écartant entièrement la zone commune. Chaque fois que vous devez savoir ce qui a changé entre deux limites, qu'il s'agisse d'une ancienne ligne de zonage face à une nouvelle, ou de deux zones de couverture que vous voulez comparer, cet outil répond à la question. Il exécute l'intégralité du calcul localement dans votre navigateur : dessinez deux formes directement sur la carte, ou importez un fichier GeoJSON ou un Shapefile compressé, et il fonctionne comme un outil autonome de différence symétrique GeoJSON et Shapefile sans envoyer vos données où que ce soit. La carte elle-même se charge sans fond de carte par défaut, afin que l'outil démarre vite et léger ; activez un fond de carte depuis le panneau latéral uniquement si vous voulez un contexte de rues ou de satellite sous vos couches.
Styliser vos couches
Chaque couche, y compris le résultat, peut être restylée indépendamment, et le fond de carte lui-même est entièrement optionnel :
- Sélecteur de couleur: Cliquez sur la pastille de couleur à côté de n'importe quelle couche dans le panneau latéral pour changer instantanément sa couleur de remplissage et de contour.
- Bascule de visibilité: Décochez une couche pour la masquer sur la carte sans la supprimer, utile pour comparer la Couche A et la Couche B au résultat séparément.
- Bascule du fond de carte: La carte se charge sans fond de carte par défaut afin que l'outil reste rapide et que l'attention reste sur vos formes. Cochez « Afficher le fond de carte » dans le panneau latéral à tout moment pour ajouter un fond de carte Rue ou Satellite sous vos couches, et désactivez-le tout aussi facilement.
Aucun de ces styles n'est enregistré en dehors de votre session, ils contrôlent uniquement l'apparence de la carte pendant que vous travaillez.
Gérer plusieurs couches
Le gestionnaire de couches du panneau latéral conserve dans une seule liste chaque couche de polygones que vous ajoutez, ainsi que chaque résultat de différence symétrique que vous générez. Vous pouvez exécuter l'outil plusieurs fois avec différentes paires de couches, garder tous les résultats sur la carte en même temps, et supprimer toute couche dont vous n'avez plus besoin sans affecter les autres, utile pour vérifier comment plusieurs limites candidates diffèrent chacune d'une couche de base.
Questions fréquentes
Comment ajouter vos couches de polygones
Il existe deux façons d'apporter des polygones dans l'outil avant de calculer une différence symétrique, et les deux acceptent le GeoJSON ou un Shapefile compressé :
- Dessiner sur la carte: Cliquez sur « Dessiner un polygone », cliquez sur la carte pour placer des sommets, puis double-cliquez, appuyez sur Entrée, ou cliquez sur Terminer pour fermer la forme. Répétez pour ajouter un second polygone.
- Importer un fichier: Glissez-déposez un fichier .geojson ou un Shapefile compressé (.zip contenant .shp/.dbf/.shx) n'importe où sur la carte, ou utilisez le bouton Importer. Seuls les features de type Polygon et MultiPolygon sont lus ; les points et les lignes sont ignorés.
Une fois que vous avez au moins deux couches de polygones, choisissez l'une comme Couche A et l'autre comme Couche B dans le panneau latéral, puis cliquez sur « Calculer la différence symétrique » pour ne conserver que la zone où elles ne se chevauchent pas.
Cas d'usage réels
Comment fonctionne l'algorithme de différence symétrique
La différence symétrique a une définition simple issue de la théorie des ensembles : c'est chaque point qui appartient au Polygone A ou au Polygone B, mais pas aux deux. Écrite sous forme de formule, A ⊕ B = (A ∪ B) − (A ∩ B), l'union des deux formes moins leur intersection. Il existe une seconde façon, équivalente, d'écrire la même opération, qui est en pratique plus facile à calculer de façon fiable : A ⊕ B = (A − B) ∪ (B − A), les parties de A dont B a été effacé, combinées aux parties de B dont A a été effacé. Cet outil utilise la seconde forme.
Ce choix compte, car calculer d'abord une union complète puis en soustraire une intersection signifie exécuter deux opérations booléennes d'overlay séparées l'une après l'autre, et toute erreur d'arrondi dans la première se propage dans la seconde. Exécuter à la place deux opérations de différence indépendantes, une pour A moins B et une pour B moins A, puis simplement placer les deux résultats dans la même couche de sortie, ne nécessite aucune géométrie intermédiaire partagée, et chaque moitié peut échouer indépendamment sans casser l'autre. Si un jeu de données réel comporte un anneau mal formé, cet outil renvoie quand même la moitié qui a réussi, étiquetée pour que vous sachiez laquelle est laquelle.
Le pipeline exécuté par cet outil
- Dissoudre chaque couche en entrée: Si une couche contient plus d'un feature, tous les polygones qu'elle contient sont d'abord fusionnés en une seule géométrie via une union booléenne, afin que la couche se comporte comme une seule forme plutôt que comme une liste de parties séparées.
- Calculer A moins B: La géométrie dissoute de la Couche A et celle de la Couche B sont transmises au même algorithme de différence booléenne par balayage de ligne qu'utilise l'Outil de différence de polygones de ce site, en ne conservant que la partie de A qui se trouve hors de B.
- Calculer B moins A: Le même algorithme s'exécute une seconde fois avec les couches inversées, en ne conservant que la partie de B qui se trouve hors de A.
- Étiqueter et combiner les deux moitiés: Chaque partie subsistante est étiquetée dans ses propriétés comme A uniquement ou B uniquement et placée dans une seule couche de sortie, afin que le résultat montre toujours précisément où les deux entrées diffèrent.
- Totaliser la surface exclusive: La surface de chaque feature de sortie est additionnée avec une formule de surface sphérique et affichée en hectares, kilomètres carrés et acres, pour obtenir un chiffre en plus d'une forme.
Chacune des deux passes de différence est elle-même un algorithme de découpage booléen par balayage de ligne de type Martinez-Rueda : il trie chaque extrémité d'arête de gauche à droite, balaie les données avec une ligne verticale, et classe chaque segment résultant comme intérieur ou extérieur à l'autre polygone à l'aide de règles d'enroulement, exactement le même moteur et les mêmes mathématiques qu'utilisent l'Outil d'intersection de polygones et l'Outil de différence de polygones de ce site. La différence symétrique n'a pas besoin d'un nouvel algorithme de découpage, il lui suffit d'appeler celui qui existe déjà deux fois, avec les opérandes inversés.
Les bibliothèques SIG derrière la différence symétrique
La différence symétrique est assez courante pour que la plupart des logiciels SIG la proposent comme un seul outil nommé, même si en interne elle est presque toujours construite à partir des mêmes primitives d'union et de différence que celles décrites sur cette page.
- Turf.js (difference + union): Le moteur propre de cet outil. Turf.js n'a pas de fonction symmetricDifference unique, donc cet outil appelle deux fois @turf/difference et @turf/union pour dissoudre les couches multi-features, le tout en JavaScript pur directement dans votre onglet de navigateur.
- PostGIS ST_SymDifference: L'extension spatiale de PostgreSQL propose ST_SymDifference comme fonction SQL unique, appuyée sur la bibliothèque GEOS, le même moteur C++ qui calcule ST_Intersection et ST_Difference.
- QGIS Différence symétrique: La boîte à outils de traitement de QGIS possède un algorithme dédié « Différence symétrique » sous Overlay vectoriel, qui appelle lui aussi GEOS sous l'interface.
- ArcGIS Différence symétrique: ArcGIS Pro d'Esri propose un outil de géotraitement Différence symétrique avec le même comportement, deux couches en entrée, un XOR en sortie, mais implémenté avec le moteur géométrique propre d'Esri plutôt que GEOS.
- Shapely (symmetric_difference): La bibliothèque Python Shapely expose une méthode .symmetric_difference() directement sur ses objets géométriques, qui, comme presque tout dans Shapely, délègue en interne à GEOS.
Les cinq outils s'accordent sur les mêmes mathématiques sous-jacentes, puisque la différence symétrique n'a qu'une seule réponse correcte pour une paire de géométries donnée. La différence pratique, comme pour les autres outils d'overlay de ce site, réside dans l'endroit où s'exécute le calcul : les outils basés sur GEOS nécessitent PostgreSQL, QGIS ou un environnement Python installé, tandis que le moteur Turf.js de cet outil fonctionne comme un chercheur de XOR de polygones directement sur votre appareil, si bien qu'aucun fichier n'est jamais téléversé où que ce soit.
Étape par étape : trouver une différence symétrique





Exporter vos résultats
Chaque couche peut être exportée indépendamment, ou vous pouvez tout exporter en une fois :
- Export d'une seule couche: L'icône de téléchargement à côté de n'importe quelle couche exporte uniquement les features de cette couche sous forme de fichier .geojson autonome.
- Tout exporter: Le bouton « Télécharger toutes les couches » combine la Couche A, la Couche B et le résultat de la différence symétrique en une seule FeatureCollection GeoJSON, en étiquetant chaque feature avec la couche dont il provient.
- Format GeoJSON: Les fichiers de sortie sont du GeoJSON standard conforme à la RFC 7946, qui s'ouvre directement dans QGIS, ArcGIS, Google Earth, Mapbox et pratiquement tout autre outil SIG.
Comme la sortie est du GeoJSON pur, elle se réimporte proprement dans ce même outil plus tard, ou dans n'importe quel flux GeoJSON ou Shapefile que vous utilisez ensuite dans un logiciel SIG de bureau.
Outils de géotraitement associés
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.
