Como conectar linhas em uma rede?

15

Eu tenho um shapefile de linhas e outro de polígonos. Quando duas ou mais linhas cruzam um polígono, elas devem ser conectadas (encaixadas), mas às vezes durante a digitalização manual isso não ocorre. Preciso encontrar e corrigir todos esses erros. Eu usei o v.cleanGRASS GIS e ele automaticamente quebrou muitos vértices, o que foi bom, mas algumas dessas linhas desconectadas estão mais longe da tolerância que eu forneci e, se eu aumentar muito a tolerância, começa a gerar outros tipos de erros.

insira a descrição da imagem aqui

Alguma ideia?

vascobnunes
fonte
1
Associe espacialmente os pontos finais da polilinha aos polígonos e resuma as contagens por polígono. Para cada polígono que contém mais de um ponto de extremidade unido, crie uma polilinha que consiste em segmentos irradiando do centróide desses pontos de extremidade para os próprios pontos de extremidade (uma "estrela"). Mesclar as estrelas com as polilinhas originais. Limpe o resultado para remover quaisquer interseções automáticas que surgirem. Cada uma dessas etapas é suportada (e pode ser automatizada) por GIS totalmente capazes. Como não estou familiarizado com os detalhes do QGIS ou GRASS, ofereço esta solução apenas como um comentário.
whuber
mas às vezes todas as linhas terminam fora do polígono ...
vascobnunes
1
O que essas linhas representam? Se são rios, eles são codificados com informações extras, como nome ou ordem do fluxo? A rede é direcionada (como uma rede fluvial), por exemplo, dois fluxos de primeira ordem devem fluir para um fluxo de segunda ordem. Acho que estou tentando dizer que você pode querer colocar alguma inteligência por trás do processo de snapping para superar o problema com o snap desonesto, com crescente tolerância à pesquisa.
precisa saber é o seguinte
1
Seu comentário parece contradizer a pergunta. A pergunta parece dizer que você deseja ajustar os vértices que se enquadram em um polígono comum. Se um vértice fica fora de um polígono, você não fornece nenhum critério sobre como deve ser tratado! Então, qual é exatamente a relação entre os polígonos e as polilinhas?
whuber
1
Eu concordo com whuber; talvez você deva esclarecer a questão. Parece que você deseja linhas que estão 'dentro' do polígono, além de 'fechar', mas excluindo linhas que estão 'dentro', mas que estão unidas corretamente?
precisa saber é o seguinte

Respostas:

7

Meu entendimento do problema é o seguinte:

Se um ponto final da polilinha cruzar um polígono, será necessário conectar a polilinha (adicionando ou ajustando vértices) a todos os pontos adicionais da polilinha que cruzam o mesmo polígono.

Alguns pontos de extremidade da polilinha não cruzam um polígono, sendo abaixo dos limites, mas devem estar conectados como acima.

Esta resposta se baseia em algumas já fornecidas, mas não está completa, pois não conheço todos os comandos do QGIS - talvez alguém possa adicionar isso?

  1. Para cada polilinha, extraia as coordenadas do nó de extremidade ( Vetor> Ferramentas de geometria> Extrair nós e depois arrume) e calcule se elas estão ou não dentro de um polígono ( Vetor> Ferramentas de pesquisa> Selecionar por local ).

  2. Para pontos de extremidade da polilinha que estão dentro de um polígono, estenda essa extremidade da polilinha para o centro do polígono (Extraia o centro do polígono usando Vetor> Ferramentas de geometria> Centróide de polígono , não tenha certeza sobre a modificação da linha, embora você possa trabalhar com os vértices da polilinha como pontos e adicione outros com numeração apropriada antes de reconstruir a polilinha modificada usando o plug-in Points to Paths)

    Você menciona que pode haver situações em que algumas ou todas as linhas foram conectadas corretamente; nessas situações (identificáveis ​​por pontos finais polilíneos coincidentes), você pode optar por usar o local final coincidente em vez do centróide poligonal como o ponto a ser estendido quaisquer polilinhas não conectadas adicionais para esse polígono.

  3. Para pontos finais de polilinha que estão fora de um polígono, estenda essa extremidade da polilinha até o centro do polígono mais próximo. Novamente, não tenho certeza sobre o cálculo do polígono mais próximo, embora o módulo GRASS v.distance pareça fazer o truque.

Andy Harfoot
fonte
Essa é uma boa justificativa para a solução do problema. Eu também cheguei a algo assim com a resposta de alexgleith. Mas fiquei preso na operação para "estender essa extremidade da polilinha até o centro do polígono mais próximo". A questão agora é como faço isso? Se eu usar v.clean.snap para os centróides dos polígonos ainda vai mover quaisquer vértices que não são endpoints ...
vascobnunes
Uma abordagem seria converter as polilinhas em pontos, conforme descrito e, se necessário, adicionar um ponto adicional no início ou no final de uma determinada linha, conforme determinado pela localização do ponto inicial ou final existente. A localização do ponto adicionado seria o centróide do polígono e o ponto seria atribuído com um número de sequência de vértices de -1 ou 1000000 para colocá-lo no início ou no final da polilinha. Este seria, então permitir que as polilinhas de ser reconstruído usando os pontos a ferramenta Path
Andy Harfoot
2

Eu acho que eu poderia fazê-lo com algum algoritmo personalizado ... Observe como você gostaria de implementá-lo, mas acho que funcionaria.

Para cada linha, para cada ponto final, faça um ponto no polígono para o vértice no ponto final e vincule-o ao polígono.

Então, para cada polígono, se houver mais de um ponto final de uma linha vinculada, eu os mesclaria (moveria) todos para a coordenada média, ou talvez para o centróide do polígono.

Isso é bem simples. Mas não está disponível em operadores padrão. Eu acho que isso poderia ser feito no ArcGIS com um tempo de codificação de dias.

Outra observação, na imagem que você postou, uma das linhas está fora do polígono ... Você pode lidar com isso de uma maneira mais simples, simplesmente encontrando o vértice mais próximo de cada vértice final, garantindo que a proximidade seja mútua (acho que é necessário, para que você tenha os vértices encaixados apenas de uma maneira), você pode movê-los para a posição média dos vértices.

Alex Leith
fonte
1

Problema interessante! Não consigo pensar em uma maneira de executar o snap automaticamente, mas aqui está uma etapa na identificação de áreas para pelo menos procurar a correção manual:

  • Adicione uma nova coluna à sua camada de linha e defina-a como '1' para todos os recursos.
  • Em Vetor> Unir atributos por local, defina a camada Destino como sua camada poligonal e a camada de linha como camada de junção. Em seguida, selecione "Obter resumo dos recursos de interseção" e clique em "Soma". Dê um local para o arquivo de saída e "OK".
  • O arquivo de polígono resultante será sua camada de polígono original, mas com alguns campos adicionais. O campo SUM é o que você deseja; quando é 2, significa que você pode aplicar zoom e ajustar manualmente os recursos.

Dependendo da situação (número de recursos, número que está nessa situação versus aqueles que não estão, etc.), isso pode economizar algum tempo.

EDIT: você também pode usar os polígonos com uma soma de 2 para criar um subconjunto de suas camadas de linha e, em seguida, execute a limpeza naquelas com uma tolerância maior para não alterar os outros recursos.

Darren Cope
fonte
Eu já tinha feito algo assim. Até usei o v.net para recuperar os nós das linhas e fiz uma seleção espacial dos polígonos correspondentes aos nós. Eu encontro muitos erros para corrigir usando isso, mas ainda tenho 3 grandes problemas: 1) existem milhares de erros para corrigir manualmente, o que leva um longo tempo; 2) Não recebo todos os erros, porque em alguns casos as linhas ou os nós nem 'tocam' nos polígonos; 3) eu recebo erros que não são erros, porque quando duas linhas se conectam corretamente, elas também são selecionadas.
vascobnunes
0

uma vez que você tenha os pontos finais, eu faria um diagrama de aranha tomando os centróides de polígonos como instalações e os pontos finais das linhas próximas como alvos. Você executa a análise do diagrama de aranha e, como resultado, teria um segmento para cada polilinha.

Isso funcionaria mesmo para aqueles que terminam fora dos polígonos. Como fazer isso no QGIS Não sei, desculpe, mas faria isso nos produtos da ESRI que conheço bem. Foi o que entendi quando whuber, na primeira resposta, sugeriu construir uma "estrela".

Tenho certeza de que há pessoas aqui que sabem como realizar essa análise no QGIS

ankilosado
fonte
4
Bem-vindo ao GIS Stack Exchange! Percebi que sua resposta atraiu alguns votos negativos e suspeito que seja porque você sugeriu uma alternativa à tecnologia que o solicitante está usando (GRASS / QGIS). Minha recomendação seria sugerir comentários e não respostas e, se o solicitante parecer interessado, transfira as informações para uma resposta.
PolyGeo