Pular para o conteúdo
AI Agent
QGIS
Tutorial

Junção espacial no QGIS: por localização ou mais próximo

Publicado em

Mapa de ruas do 8º arrondissement de Lyon com pontos vermelhos de escolas, cada um ligado por uma linha preta à parada de bonde azul mais próxima, e o texto 710 m, distância mediana de uma escola de Lyon até uma parada de bonde.

Uma junção espacial copia os campos de uma camada para outra com base em onde as feições estão, e não em um ID em comum. No QGIS, abra Vector > Data Management Tools > Join Attributes by Location… (em português, Vetor > Ferramentas de gerenciamento de dados > Unir atributos por localização…), escolha a camada que vai receber os novos campos, a camada de onde eles vêm e uma regra como "intersect", e execute. Para perguntas do tipo "qual é o mais próximo", use Join Attributes by Nearest ou digite a tarefa inteira em uma frase para o AI Agent.

O que você querFerramentaTempo no nosso teste
Dar a cada ponto o nome da área onde ele estáJoin Attributes by Location0,21 s, 382 escolas
O mesmo, digitado em uma fraseAI Agent22 s, contagem e vizinho mais próximo juntos
Contar ou somar pontos por áreaJoin Attributes by Location (Summary)0,02 s, 9 áreas
Achar a feição mais próxima e a distância até elaJoin Attributes by Nearest0,06 s, 382 escolas

Os dados de teste

Todos os números deste guia vêm de uma única execução com dados abertos reais de Lyon, na França, em 15 de outubro de 2026:

  • 9 arrondissements (os distritos da cidade) e 382 escolas do OpenStreetMap.
  • 106 paradas de bonde do OpenStreetMap.
  • 103.910 edifícios da BD TOPO do IGN, a base topográfica nacional da França.

Todas as camadas estão em Lambert-93 (EPSG:2154), um sistema projetado em metros. Os tempos vêm do QGIS 3.44 em um MacBook Air M4.

Método 1: Join attributes by location

Esta é a junção espacial clássica. Aqui, cada escola recebe o nome do seu arrondissement.

Abra a ferramenta

Vector > Data Management Tools > Join Attributes by Location…. Você também pode procurar "join attributes" na Caixa de Ferramentas de Processamento (Ctrl+Alt+T).

Escolha as duas camadas

Join to features in é a camada que recebe os novos campos, aqui schools. By comparing to é a camada de onde você os tira, aqui arrondissements.

Marque um predicado

intersect é o padrão seguro para pontos em polígonos. A seção abaixo mostra o que cada opção significa.

Escolha os campos e o tipo de junção

Em Fields to add, mantenha só o que você precisa, aqui name. Defina Join type como um-para-um e adicione um prefixo como arr_ para achar o novo campo com facilidade.

Execute

Deixe Joined layer como camada temporária para conferir o resultado primeiro e depois salve em GeoPackage.

A janela Join attributes by location do QGIS. Join to features in: schools. Predicate: intersect está marcado. By comparing to: arrondissements. Fields to add: name. Join type: Take attributes of the first matching feature only (one-to-one). Joined field prefix: arr_.
A junção que executamos: as escolas recebem o nome do arrondissement onde estão. Todas as 382 foram associadas em 0,21 segundo.

Marque Discard records which could not be joined só se quiser descartar os registros sem correspondência. No início, deixe desmarcado: as linhas vazias mostram o que deu errado.

Use quando: você quer um ou alguns campos da feição em que cada objeto está ou que ele toca.

Evite quando: as feições nunca se tocam, como uma escola e uma parada de bonde. Esse é o Método 4.

Método 2: peça ao AI Agent em uma frase

O AI Agent é o nosso plugin do QGIS que executa tarefas a partir de um pedido digitado. Ele lê os nomes das suas camadas e campos, escolhe as ferramentas e as executa no seu projeto.

Demos a ele este pedido, com as mesmas camadas de Lyon carregadas:

Conte as escolas em cada arrondissement e depois dê a cada escola o nome da parada de bonde mais próxima e a distância até ela em metros.

Ele executou duas ferramentas de processamento do QGIS e depois uma etapa curta em Python que gravou os dois novos campos na camada de escolas. O painel mostrou "Worked for 22 s". Ele pediu permissão uma vez, porque ia editar o GeoPackage em disco. As contagens bateram exatamente com a nossa execução manual: 382 escolas, de 27 no 2º e no 4º até 56 no 5º.

QGIS com os arrondissements de Lyon preenchidos em laranja e pontos de escolas, e o painel do AI Agent à direita. O pedido diz: Count the schools in each arrondissement, then give every school the name of its nearest tram stop and the distance to it in metres. A resposta lista as contagens por arrondissement, 382 escolas no total, e informa que as 382 escolas receberam nearest_tram e tram_distance_m, com distâncias de 49,6 a 4.949,2 m.
As mesmas duas junções a partir de uma frase. A resposta traz o link para a nova camada e lista o que mudou.

Use quando: você sabe a pergunta, mas não sabe qual das quatro ferramentas de junção responde a ela, ou quando encadeia várias etapas.

Evite quando: você executa a mesma junção toda semana. Salve-a uma vez como modelo ou script Python.

Preço: plano gratuito, sem cartão. O Pro custa € 49 por mês, impostos não inclusos.

Método 3: contar e resumir com uma junção espacial

O Método 1 dá a cada escola o seu distrito. A pergunta inversa, quantas escolas cada distrito tem, exige a versão de resumo.

Procure Join attributes by location (summary) na Caixa de Ferramentas de Processamento. Coloque os polígonos em Join to features in, os pontos em By comparing to e escolha as estatísticas em Summaries to calculate: contagem, soma, média, mediana, mínimo, máximo e outras. O QGIS adiciona um campo por estatística, com nomes como osm_id_count.

Mapa dos nove arrondissements de Lyon coloridos do amarelo claro ao laranja escuro conforme o número de escolas, cada um com seu rótulo: 9e 38, 4e 27, 1e 33, 6e 41, 5e 56, 2e 27, 3e 54, 7e 53, 8e 53. Pontos vermelhos marcam as escolas.
Escolas por arrondissement com uma única junção de resumo: 0,02 segundo.

Ele também soma números. Nos edifícios do IGN, uma execução deu a cada arrondissement o número de edifícios e de moradias registradas neles: 9.474 edifícios e 51.743 moradias no 3º, o maior valor nos dois casos.

Para uma contagem simples, Vector > Analysis Tools > Count Points in Polygon… (em português, Vetor > Ferramentas de análise > Contar pontos em polígono…) faz o mesmo com menos opções.

Use quando: a resposta é um número por área: contagem, total, média.

Evite quando: você precisa da lista das correspondências em si. Use o Método 1 com um-para-muitos.

Método 4: Join attributes by nearest

Quando as feições nunca se tocam, una-as pela distância. Procure Join attributes by nearest na Caixa de Ferramentas de Processamento.

Defina Input layer como schools, Input layer 2 como tram_stops e Maximum nearest neighbors como 1. O QGIS adiciona os campos da parada, mais um campo distance e as coordenadas das duas pontas.

Mapa de ruas do 8º arrondissement de Lyon. Pontos vermelhos de escolas, cada um ligado por uma linha preta à parada de bonde azul mais próxima. Várias escolas compartilham a mesma parada.
Cada escola ligada à parada de bonde mais próxima. Em Lyon inteira, a mediana é de 710 m, e 86 das 382 escolas estão a até 300 m.

Duas configurações mudam o resultado:

  • Maximum distance. Com 300 m, só 86 escolas receberam uma parada. As outras 296 ficaram na saída com campos vazios, a menos que você marque Discard records which could not be joined.
  • Maximum nearest neighbors. Com 3, as 382 escolas viraram 1.146 linhas, uma por escola e parada. Um empate exato também adiciona uma linha: nos 103.910 edifícios do IGN, obtivemos 103.911 linhas.

A distância é em linha reta, e não a distância a pé pelas ruas.

Use quando: você pergunta "qual é o mais próximo" e "a que distância".

Evite quando: você precisa da distância de deslocamento. Use as ferramentas de análise de rede da Caixa de Ferramentas de Processamento.

Qual predicado marcar

O predicado é a regra espacial que decide se há correspondência. O QGIS o lê como "camada A [predicado] camada B", em que A é a camada que recebe os campos.

Diagrama de oito relações espaciais entre uma forma vermelha A e uma forma azul B: intersect, compartilham qualquer parte; contain, A contém todo o B; are within, A está dentro de B; equal, mesma geometria; touch, compartilham apenas uma borda; overlap, mesmo tipo com parte compartilhada; cross, uma linha atravessa; e no match, disjoint, nada é unido.
O vermelho é a camada que recebe os campos, o azul é a camada com a qual você compara.

Três regras cobrem a maior parte do trabalho:

  • intersect para pontos em polígonos e para tudo que só precisa se tocar. Ele também pega feições sobre a borda.
  • are within quando a feição precisa estar totalmente dentro. Nos nossos edifícios, 112 que intersectam Lyon não estavam totalmente dentro de um único arrondissement: 108 cruzam o limite da cidade e 4 cruzam uma divisa interna.
  • contain para o sentido inverso, polígonos que contêm pontos.

Você pode marcar vários predicados. Uma feição então é associada se qualquer um deles for verdadeiro.

Um-para-um, um-para-muitos ou maior sobreposição

Um edifício sobre uma divisa toca dois distritos. O Join type decide o que acontece com ele. Nos 46.250 edifícios do IGN que intersectam Lyon:

Tipo de junçãoLinhas na saídaTempo
Um-para-muitos (uma feição por correspondência)46.2541,13 s
Apenas a primeira feição correspondente (um-para-um)46.2500,99 s
Apenas a maior sobreposição (um-para-um)46.2509,62 s

O um-para-muitos duplicou os 4 edifícios que cruzam uma divisa interna. Isso está certo para uma lista de correspondências e errado para qualquer soma: esses edifícios seriam contados duas vezes.

A "primeira correspondente" fica com a que o QGIS encontra primeiro, então um edifício na divisa pode cair em qualquer um dos distritos. A "maior sobreposição" escolhe o distrito que contém a maior parte dele, que é a resposta justa, mas levou dez vezes mais tempo aqui.

Armadilhas de CRS

Um sistema de referência de coordenadas errado raramente impede uma junção. Ele muda o resultado em silêncio.

  • CRS misturados funcionam em junções por localização. Deixamos as escolas em WGS 84 (EPSG:4326) e os distritos em Lambert-93. O QGIS reprojetou na hora e as 382 foram associadas.
  • As distâncias seguem as unidades da camada de entrada. Execute a Join by nearest nos arquivos em WGS 84 e a "distância" mediana sai como 0,0071. Isso é em graus, não em metros. Reprojete as duas camadas para um CRS projetado em metros antes, com Vector > Data Management Tools > Reproject Layer….
  • Maximum distance usa as mesmas unidades. Um valor 300 em graus cobre o planeta inteiro.

Nosso guia sobre o que é um CRS explica graus versus metros e como corrigir uma camada que aparece no lugar errado.

Velocidade em camadas grandes

O QGIS faz junções em escala de cidade em segundos. Nos 103.910 edifícios do IGN:

  • Junção um-para-um com os 9 distritos: 0,97 s a partir de um GeoPackage.
  • A mesma camada como Shapefile: 1,69 s. Depois de Vector > Data Management Tools > Create Spatial Index…, 1,04 s.
  • Parada de bonde mais próxima para cada edifício: 3,5 s.
  • Maior sobreposição: 9,62 s, a opção mais lenta.

Quatro hábitos mantêm as junções grandes rápidas:

  • Trabalhe a partir de GeoPackage. Ele já traz um índice espacial. Um Shapefile precisa do arquivo .qix, que o Create Spatial Index grava.
  • Peça menos campos. Preencha Fields to add em vez de copiar tudo.
  • Evite a maior sobreposição a menos que as feições de borda realmente importem.
  • Corrija as geometrias antes. Um polígono inválido interrompe a execução com "has invalid geometry". A ferramenta Fix geometries da Caixa de Ferramentas de Processamento o repara. Você também pode mudar Invalid feature filtering sob o ícone de chave de boca ao lado da camada de entrada.

Confira também onde ficam os seus pontos. Só 211 dos 382 pontos de escolas caíram dentro de um edifício do IGN. Os demais marcam pátios e quadras, então "escola dentro de edifício" teria perdido 171 escolas.

O que lembrar

Use Join Attributes by Location com intersect para dar aos pontos o nome da sua área.

Use a versão Summary para contar ou somar por área e Join Attributes by Nearest para a feição mais próxima e a distância até ela.

Escolha um-para-um para totais e um-para-muitos quando precisar de todas as correspondências.

Reprojete para um CRS em metros antes de qualquer distância.

Se não tiver certeza de qual ferramenta serve, descreva o resultado que você quer ao AI Agent e confira o que ele construiu.

Perguntas frequentes

O que é uma junção espacial no QGIS?

Uma junção espacial adiciona os campos de uma camada a outra com base na localização: dentro, tocando ou mais próximo. No QGIS, as principais ferramentas são Join Attributes by Location, sua versão Summary para contagens e estatísticas, e Join Attributes by Nearest para distâncias.

Como unir atributos por localização no QGIS?

Abra Vector > Data Management Tools > Join Attributes by Location…. Defina a camada que recebe os campos em Join to features in e a camada de origem em By comparing to, marque intersect, escolha os campos e um tipo de junção um-para-um e execute.

Qual é a diferença entre a junção por localização e a junção pelo vizinho mais próximo?

A junção por localização exige que as feições se toquem ou se sobreponham, conforme o predicado marcado. A junção pelo mais próximo não exige contato: ela encontra a feição mais próxima e adiciona um campo de distância, nas unidades do CRS da camada de entrada.

Por que minha junção espacial retorna campos vazios?

Em geral, as feições não atendem ao predicado: pontos logo fora dos polígonos, um predicado rígido demais como "are within" ou geometrias inválidas. Confira as duas camadas no mapa, tente "intersect" e execute Fix Geometries. A falta de CRS em uma das camadas também a coloca no lugar errado.

A IA consegue fazer uma junção espacial no QGIS?

Sim. O AI Agent executa as ferramentas do QGIS a partir de um pedido digitado. No nosso teste em Lyon, ele fez uma contagem por distrito e uma junção pelo mais próximo a partir de uma frase, em 22 segundos, com os mesmos resultados da execução manual.

Experimente o AI Agent grátis no QGIS, sem cartão

Escrito porTerraLab
·14 min read
Contatar