Juntando atributos do ponto mais próximo no QGIS?

29

Eu tenho duas camadas com pontos, chame-as de A e B, cada uma com atributos diferentes.

Para cada ponto no AI, junte todos os atributos do ponto mais próximo em B.

Idealmente, isso também incluiria um campo medindo a distância entre os dois pontos.

Eu sei como fazer isso no ArcGIS: clique com o botão direito na camada A> junta-se e relaciona-se> junta, depois junta dados com base na localização espacial e escolhe juntar atributos a partir do ponto mais próximo.

Não encontrei funcionalidade semelhante no QGIS. Alguma dica?

Fred
fonte

Respostas:

26

Usando "Matriz de distâncias", você pode calcular o ponto mais próximo. Verifique se as duas camadas estão no mesmo CRS! Em seguida, você pode carregar os resultados e usá-los para unir as tabelas A e B.

Em "Matriz de distâncias", escolha: "Matriz de distâncias lineares" e "use apenas os k pontos-alvo mais próximos: 1"

insira a descrição da imagem aqui

Carregue o CSV usando "Adicionar camada vetorial" e junte as camadas nas propriedades da camada A - guia de junção.

insira a descrição da imagem aqui

E o resultado:

insira a descrição da imagem aqui

underdark
fonte
Se você quer ter as distâncias entre pontos dentro de uma camada usando matriz de distância você deve mudar k = 2, por causa deste problema conhecido: hub.qgis.org/issues/4761
Celia
1
@underdark Parece que esta solução não funciona mais. Eu sou capaz de criar o matrix.csv e associá-lo à minha primeira camada. No seu exemplo, você adicionou uma segunda junção na qual anexa a segunda camada à primeira, com base no TargetID da matriz. Mas os campos associados não são mostrados para mim na caixa de diálogo, portanto, não posso selecionar o TargetID. Claro que eu posso primeira save_as a camada e, em seguida, fazer a segunda juntar-se ...
Bernd V.
13

O plug-in NNJoin deve fazer o trabalho. Para cada recurso da camada de entrada, ele adiciona todos os atributos do recurso mais próximo na camada de junção e também adiciona um atributo de distância com a distância a esse recurso.

Håvard Tveite
fonte
Funciona perfeitamente. Mais rápido que a resposta aceita. Note-se que a resposta aceite se a partir de 2011.
juminet
Hoje, pelo menos, é muito melhor do que a resposta aceita. Muito, muito mais rápido.
Cag
4

Se você pode viver apenas juntando um único atributo da sua camada "B", dê uma olhada na ferramenta "Distância do Hub" no plug-in mmqgis .

Se você precisar do restante dos atributos "B", poderá associar o restante dos atributos "B" a essa camada.

Você também pode, opcionalmente, gerar linhas de A a B, se desejar. Isso é útil para visualizar as distâncias e direções entre os recursos associados.

RyanDalton
fonte
0

Outra abordagem usando o plugin refFunctions .

(1) Conjunto de dados de amostra

insira a descrição da imagem aqui

(2) Abra uma tabela de atributos da camada que possui mais recursos ( points_bcamada neste exemplo) para que nenhum par seja perdido. Crie novos campos.

  • Campo de ID da outra camada: geomnearest('points_a', 'id_a')
  • Campo de distância dos pares detectados: geomnearest('points_a', '$distance')

insira a descrição da imagem aqui

Kazuhito
fonte
-6

Usando o QGIS 1.7 Vector> Gerenciamento de dados> Unir atributos por local

insira a descrição da imagem aqui

Mapperz
fonte
3
Também pensei nisso, mas quando testei, funcionou apenas para correspondências exatas, como polígono de ponto. Não encontrou o ponto mais próximo de outro ponto. Testado na v1.7
RyanDalton 22/06
1
Eu tenho zero partidas. Isso não funciona.
Fred