OnlineMapMaker logo

Symmetric Difference Tool: GeoJSON e Shapefile

Desenhe ou envie duas camadas de polígonos e mantenha apenas as partes que não se sobrepõem entre elas. Abrir em ecrã inteiro ↗

Rate this tool:
Advertisement
Loading map…
Precisa de ajuda com o seu projeto de GIS?Conheça Nossos Serviços

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

Mapa vazio da ferramenta de diferença simétrica sem mapa base carregado, mostrando os botões desenhar, enviar e polígono de exemplo antes de qualquer camada ser adicionada
1
Passo 1: Abra a ferramenta e adicione sua primeira camada
A ferramenta vazia começa sem mapa base: desenhe um polígono, envie um arquivo, ou clique em Polígonos de Exemplo.
Duas camadas de polígonos de exemplo sobrepostas em um fundo simples sem mapa base, com a lista de camadas visível no painel lateral
2
Passo 2: Adicione uma segunda camada sobreposta
Duas camadas carregadas, ainda sem mapa base. A Camada A e a Camada B já estão escolhidas para você.
Close-up do painel lateral mostrando os seletores suspensos Camada A e Camada B e o botão Calcular Diferença Simétrica
3
Passo 3: Escolha a Camada A e a Camada B
Confirme a Camada A e a Camada B, depois clique em Calcular Diferença Simétrica para executar o overlay.
A diferença simétrica calculada mostrada como duas formas destacadas separadamente no mapa com uma leitura de área total no painel lateral, mapa base agora ativado
4
Passo 4: Revise o resultado sem sobreposição
O resultado: as áreas exatas sem sobreposição, além do tamanho combinado delas. Um mapa base foi ativado aqui para contexto.
Painel do gerenciador de camadas listando a Camada A, a Camada B e a camada de diferença simétrica com controles de exportação e download
5
Passo 5: Exporte a camada de resultado
Exporte o resultado sozinho, ou as três camadas juntas, como GeoJSON.

Perguntas frequentes

Posso enviar um GeoJSON ou Shapefile, ou só desenhar?
Os dois. Desenhe diretamente no mapa, solte um arquivo .geojson, ou solte um Shapefile compactado (.zip contendo .shp, .dbf e .shx). Os três métodos de entrada podem ser combinados para a Camada A e a Camada B.
Posso usar isso com vários polígonos por camada?
Sim. Se uma camada tiver mais de um feature, eles são primeiro combinados em uma única forma com uma união booleana, para que a diferença simétrica seja calculada entre as duas camadas como um todo, e não feature por feature.
Qual algoritmo calcula a diferença simétrica, e ele é preciso?
A ferramenta executa duas vezes um algoritmo de diferença booleana por varredura de linha no estilo Martinez-Rueda, uma vez para A menos B e outra para B menos A, o mesmo motor usado pela Ferramenta de Diferença de Polígonos e pela Ferramenta de Interseção de Polígonos deste site. Ele lida corretamente com polígonos côncavos e polígonos com buracos.
O que é uma diferença simétrica em GIS?
A diferença simétrica é uma operação de overlay vetorial que mantém apenas a área pertencente a exatamente uma das duas camadas de polígonos, não a ambas. É escrita como A ⊕ B = (A ∪ B) − (A ∩ B): tudo o que está em qualquer uma das formas, menos o que elas compartilham.
Por que o mapa começa sem mapa base, e como eu ativo um?
O mapa carrega sem tiles de rua ou satélite por padrão para que a ferramenta abra rápido e o foco fique nos seus polígonos. Marque a caixa "Mostrar mapa base" no painel lateral sempre que quiser contexto geográfico, e escolha Rua ou Satélite assim que ele estiver ativado.
Qual software GIS tem uma ferramenta de diferença simétrica embutida?
O PostGIS tem ST_SymDifference como função SQL, o QGIS tem um algoritmo "Diferença Simétrica" na sua Processing Toolbox, o ArcGIS Pro tem uma ferramenta de geoprocessamento Diferença Simétrica, e o Shapely do Python tem um método .symmetric_difference(). Todos calculam o mesmo resultado que esta ferramenta.
Meus dados são enviados para algum lugar?
Não. O desenho, a leitura de arquivos, a etapa de dissolução, as duas passagens de diferença e o cálculo final de área acontecem localmente no seu navegador com JavaScript. Nada é enviado a um servidor.
Esta ferramenta também mostra a área sobreposta, ou só as partes sem sobreposição?
Só as partes sem sobreposição. A área compartilhada e sobreposta é descartada de propósito, esse é todo o sentido de uma diferença simétrica. Se você precisar da sobreposição em si, a Ferramenta de Interseção de Polígonos deste site calcula exatamente isso.
Como encontro as partes de dois polígonos que não se sobrepõem?
Desenhe ou envie duas camadas de polígonos, escolha-as como Camada A e Camada B nesta ferramenta, e clique em "Calcular Diferença Simétrica". A área sobreposta é totalmente descartada, e apenas as duas partes sem sobreposição permanecem no resultado.
Qual é a diferença entre isso e uma diferença comum (erase)?
Uma diferença comum é unidirecional: ela subtrai a Camada B da Camada A e mantém apenas o que sobra de A. A diferença simétrica é bidirecional: ela mantém a parte exclusiva de A e a parte exclusiva de B, então você vê o que mudou dos dois lados, não só de um.

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.

Advertisement

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

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

Advertisement

Casos de uso reais

🌊
Atualizações de mapas de zonas de inundação
Compare um limite de zona de inundação mais antigo, no estilo FEMA, com um atualizado para destacar exatamente quais propriedades foram adicionadas ou removidas da área de risco de inundação.
📡
Comparação de cobertura de telecomunicações
Compare os polígonos de cobertura de duas operadoras para isolar as áreas atendidas por exatamente uma rede e não pela outra, as partes que mais importam em uma análise competitiva de cobertura.
🛰️
Detecção de mudanças de cobertura do solo via satélite
Compare uma camada de classificação do solo de um ano contra a mesma área de um ano posterior para isolar exatamente quais parcelas mudaram de classificação, sem precisar inspecionar cada polígono manualmente.
📐
Disputas de limites de levantamento topográfico e escritura
Sobreponha um limite de propriedade levantado profissionalmente ao limite registrado em uma escritura para isolar a exata faixa de terra em disputa onde os dois divergem.
🗺️
Detecção de mudanças de zoneamento e limites
Carregue um limite de zoneamento antigo como Camada A e o novo limite proposto como Camada B para ver exatamente quais áreas foram adicionadas e quais foram removidas em um único resultado combinado, em vez de comparar dois mapas a olho.
🗳️
Revisão de redistritamento e limites eleitorais
Carregue um limite de distrito eleitoral atual e um redesenho proposto para ver com precisão quais áreas, e quais eleitores, mudariam de distrito.
Advertisement

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.

Muhammad Gulraiz Khan, especialista em GIS e fundador da KONAKTIVE e do OnlineMapMaker.com

Sobre o Autor

Muhammad Gulraiz Khan

Especialista e Consultor em GIS · Fundador da KONAKTIVE

Muhammad Gulraiz Khan é um especialista em GIS com mais de uma década de experiência profissional fornecendo soluções geoespaciais para o setor de energia, incluindo projetos para o Banco Mundial, a Corporação Financeira Internacional (IFC) e a USAID. Ele criou o OnlineMapMaker.com para tornar ferramentas profissionais de mapeamento gratuitas e acessíveis para todos.

Advertisement