O que é uma diferença simétrica em GIS?
A diferença simétrica (também chamada de XOR, ou ou exclusivo) é uma operação de overlay vetorial que mantém apenas as partes de duas camadas de polígonos que não se sobrepõem, descartando totalmente a área compartilhada. Sempre que você precisa descobrir o que mudou entre dois limites, seja uma linha de zoneamento antiga comparada a uma nova, ou duas áreas de cobertura que você quer comparar, esta ferramenta responde a isso. Ela executa todo o cálculo localmente no seu navegador: desenhe duas formas diretamente no mapa, ou envie um arquivo GeoJSON ou um Shapefile compactado, e funciona como uma ferramenta autônoma de diferença simétrica de GeoJSON e Shapefile sem enviar seus dados a lugar nenhum. O próprio mapa carrega sem mapa base por padrão, para que a ferramenta abra rápida e leve; ative um mapa base pelo painel lateral apenas se quiser contexto de ruas ou satélite embaixo das suas camadas.
Passo a passo: encontrando uma diferença simétrica





Perguntas frequentes
As bibliotecas GIS por trás da diferença simétrica
A diferença simétrica é comum o suficiente para que a maioria dos softwares GIS a ofereça como uma única ferramenta nomeada, mesmo que por baixo dos panos ela seja quase sempre construída a partir das mesmas primitivas de união e diferença descritas nesta página.
- Turf.js (difference + union): O motor próprio desta ferramenta. O Turf.js não tem uma função única symmetricDifference, então esta ferramenta chama @turf/difference duas vezes e @turf/union para dissolver camadas com múltiplos features, tudo como JavaScript puro diretamente na aba do seu navegador.
- PostGIS ST_SymDifference: A extensão espacial do PostgreSQL oferece ST_SymDifference como uma única função SQL, apoiada na biblioteca GEOS, o mesmo motor em C++ que calcula ST_Intersection e ST_Difference.
- QGIS Diferença Simétrica: A Processing Toolbox do QGIS tem um algoritmo dedicado "Diferença Simétrica" em Overlay Vetorial, que também chama o GEOS por baixo da interface.
- ArcGIS Diferença Simétrica: O ArcGIS Pro da Esri oferece uma ferramenta de geoprocessamento Diferença Simétrica com o mesmo comportamento, duas camadas de entrada, obtenha o XOR, mas implementada com o motor de geometria próprio da Esri em vez do GEOS.
- Shapely (symmetric_difference): A biblioteca Shapely do Python expõe um método .symmetric_difference() diretamente em seus objetos de geometria, que, como quase tudo no Shapely, delega ao GEOS por baixo.
As cinco ferramentas concordam na mesma matemática subjacente, já que a diferença simétrica tem exatamente uma resposta correta para um dado par de geometrias. A diferença prática, como com as outras ferramentas de overlay deste site, está em onde o cálculo roda: ferramentas baseadas em GEOS precisam de PostgreSQL, QGIS ou um ambiente Python instalado, enquanto o motor Turf.js desta ferramenta funciona como um buscador de XOR de polígonos diretamente no seu dispositivo, então nenhum arquivo é enviado a lugar nenhum.
Estilizando suas camadas
Cada camada, incluindo o resultado, pode ser reestilizada de forma independente, e o mapa base em si é totalmente opcional:
- Seletor de cor: Clique na amostra de cor ao lado de qualquer camada no painel lateral para mudar instantaneamente sua cor de preenchimento e contorno.
- Alternar visibilidade: Desmarque uma camada para escondê-la no mapa sem excluí-la, útil para comparar a Camada A e a Camada B com o resultado separadamente.
- Alternar mapa base: O mapa carrega sem mapa base por padrão para que a ferramenta continue rápida e o foco permaneça nas suas formas. Marque "Mostrar mapa base" no painel lateral a qualquer momento para adicionar um mapa base de Rua ou Satélite embaixo das suas camadas, e desative-o com a mesma facilidade.
Nenhum desse estilo é salvo fora da sua sessão, ele apenas controla a aparência do mapa enquanto você trabalha.
Exportando seus resultados
Cada camada pode ser exportada de forma independente, ou você pode exportar tudo de uma vez:
- Exportação de uma única camada: O ícone de download ao lado de qualquer camada exporta apenas os features dessa camada como um arquivo .geojson independente.
- Exportar tudo: O botão "Baixar Todas as Camadas" combina a Camada A, a Camada B e o resultado da diferença simétrica em uma única FeatureCollection GeoJSON, rotulando cada feature com a camada de origem.
- Formato GeoJSON: Os arquivos de saída são GeoJSON padrão conforme a RFC 7946, que abre diretamente no QGIS, ArcGIS, Google Earth, Mapbox e praticamente qualquer outra ferramenta GIS.
Como a saída é GeoJSON puro, ela é reimportada sem problemas nesta mesma ferramenta depois, ou em qualquer fluxo de trabalho de GeoJSON ou Shapefile que você usar em seguida em um software GIS desktop.
Como funciona o algoritmo de diferença simétrica
A diferença simétrica tem uma definição simples de teoria dos conjuntos: é todo ponto que pertence ao Polígono A ou ao Polígono B, mas não a ambos. Escrita como fórmula, A ⊕ B = (A ∪ B) − (A ∩ B), a união das duas formas menos a interseção delas. Existe uma segunda forma, equivalente, de escrever a mesma operação que na prática é mais fácil de calcular de forma confiável: A ⊕ B = (A − B) ∪ (B − A), as partes de A com B apagado, combinadas com as partes de B com A apagado. Esta ferramenta usa a segunda forma.
Essa escolha importa porque calcular primeiro uma união completa e depois subtrair uma interseção dela significa executar duas operações booleanas de overlay separadas, uma após a outra, e qualquer erro de arredondamento na primeira se propaga para a segunda. Executar em vez disso duas operações de diferença independentes, uma para A menos B e outra para B menos A, e simplesmente colocar os dois resultados na mesma camada de saída, não precisa de nenhuma geometria intermediária compartilhada, e cada metade pode falhar de forma independente sem quebrar a outra. Se um conjunto de dados real tiver um anel mal formado, esta ferramenta ainda retorna a metade que deu certo, identificada para que você saiba qual é qual.
O pipeline executado por esta ferramenta
- Dissolver cada camada de entrada: Se uma camada tiver mais de um feature, todos os polígonos dentro dela são primeiro combinados em uma única geometria com uma união booleana, para que a camada se comporte como uma única forma em vez de uma lista de partes separadas.
- Calcular A menos B: A geometria dissolvida da Camada A e a da Camada B são passadas para o mesmo algoritmo de diferença booleana por varredura de linha (sweep-line) que a Ferramenta de Diferença de Polígonos deste site usa, mantendo apenas a parte de A que fica fora de B.
- Calcular B menos A: O mesmo algoritmo roda uma segunda vez com as camadas invertidas, mantendo apenas a parte de B que fica fora de A.
- Rotular e combinar as duas metades: Cada parte que sobrevive é rotulada em suas propriedades como somente A ou somente B e colocada em uma única camada de saída, para que o resultado sempre mostre exatamente onde as duas entradas diferem.
- Somar a área exclusiva: A área de cada feature de saída é somada com uma fórmula de área esférica e exibida em hectares, quilômetros quadrados e acres, para que você tenha um número além de uma forma.
Cada uma das duas passagens de diferença é, em si, um algoritmo de recorte booleano por varredura de linha no estilo Martinez-Rueda: ele ordena cada ponto final de aresta da esquerda para a direita, varre os dados com uma linha vertical, e classifica cada segmento resultante como dentro ou fora do outro polígono usando regras de enrolamento (winding), exatamente o mesmo motor e a mesma matemática que a Ferramenta de Interseção de Polígonos e a Ferramenta de Diferença de Polígonos deste site usam. A diferença simétrica não precisa de um novo algoritmo de recorte, só precisa do já existente chamado duas vezes com os operandos invertidos.
Gerenciando várias camadas
O gerenciador de camadas do painel lateral mantém em uma única lista cada camada de polígono que você adiciona, além de cada resultado de diferença simétrica que você gera. Você pode executar a ferramenta mais de uma vez com pares de camadas diferentes, manter todos os resultados no mapa ao mesmo tempo, e excluir qualquer camada que não precisar mais sem afetar as outras, útil para verificar como vários limites candidatos diferem, cada um, de uma camada base.
Como adicionar suas camadas de polígonos
Existem duas formas de trazer polígonos para a ferramenta antes de calcular uma diferença simétrica, e ambas aceitam GeoJSON ou um Shapefile compactado:
- Desenhar no mapa: Clique em "Desenhar Polígono", clique no mapa para posicionar os vértices, depois dê um duplo clique, pressione Enter, ou clique em Concluir para fechar a forma. Repita para adicionar um segundo polígono.
- Enviar um arquivo: Arraste e solte um arquivo .geojson ou um Shapefile compactado (.zip com .shp/.dbf/.shx dentro) em qualquer lugar do mapa, ou use o botão Enviar. Apenas features do tipo Polygon e MultiPolygon são lidos; pontos e linhas são ignorados.
Assim que tiver pelo menos duas camadas de polígonos, escolha uma como Camada A e a outra como Camada B no painel lateral, depois clique em "Calcular Diferença Simétrica" para manter apenas a área onde elas não se sobrepõem.
Casos de uso reais
Ferramentas de Geoprocessamento Relacionadas
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.
