Aqui existem duas camadas com a representação das ruas e a idéia é: Queremos atualizar a camada mais recente (com a linha vermelha) com alguns dos dados armazenados na outra (a azul claro), mas essas camadas são semelhante na posição geográfica que pode ser muito próxima e um pouco mais distante, dependendo do local no mapa e apenas um atributo corresponde nos casos em que uma linha é a mesma na outra (codlog x codlog5).
Por exemplo: No meio da imagem, há um quadrado em ambas as camadas, mas como faço para reconhecer no azul que o azul é igual ao verde e atualizar a camada recente?
Como eu posso fazer isso? Existe algum plugin ou ferramenta que ajude com isso?
qgis
layers
latitude-longitude
Jhonatan Oliveira
fonte
fonte
Respostas:
Essa é uma ótima pergunta, eu tive que fazer algo semelhante recentemente, mas com um conjunto de dados muito menor, então pude usar uma interseção simples com algumas verificações extras de qualidade visual e tudo bem.
Mas aqui está uma idéia para isso, embora eu não tenha código, e é meio que um processo pesado. Definitivamente teste primeiro com uma amostra do conjunto de dados completo. Você provavelmente pode ter algum código útil por aqui. (O recuo ficou um pouco estranho abaixo.):
pegue o bom conjunto de geometrias (onde você deseja que os atributos terminem) e crie um buffer *
itere através de cada um dos recursos do buffer:
2a calcular a orientação geral do recurso (max_y - min_y / max_x - min_x ou algo parecido)
2b. faça uma consulta de seleção por localização na outra camada usando esse único recurso
você terá mais de um recurso que corresponde à consulta selecionar por local, para percorrer esses recursos selecionados e calcular a orientação de cada um
obtenha os atributos de qualquer recurso que tenha uma orientação mais próxima da do recurso de buffer.
* Eu começaria com uma distância muito pequena (uma unidade de mapa ou algo assim) e depois executaria esse processo com distâncias crescentes, tomando cuidado para não substituir nenhum atributo que você já tenha transferido.
** Na verdade, você provavelmente poderia deixar de criar os recursos do buffer e apenas fazer a consulta de seleção por local com uma distância de buffer. Eu não estou muito familiarizado com o QGIS, mas tenho certeza que você seria capaz de fazer isso.
Não há como isso funcione perfeitamente para todos os seus recursos, mas é um começo e tudo se resume ao desenvolvimento de uma boa estratégia de QA / QC para verificar e concluir a transferência.
EDIT Pensando nisso mais, aqui está um exemplo básico que interromperia completamente o sistema se você estivesse iniciando com uma distância muito pequena do buffer e escolhendo o recurso com a melhor orientação correspondente, conforme recomendado:
Os atributos da linha vermelha incorreta seriam utilizados. Para evitar isso, convém criar algum tipo de tolerância e usar apenas os atributos do recurso se sua orientação (quando comparada à orientação do recurso azul original) se enquadrar nessa tolerância.
EDIT 2 Opa, são esses polígonos? Acho que assumi que eram linhas em um fundo cinza. Se eles são polígonos, eu realmente não sei se esse conceito de orientação é bom. Mas você pode selecionar todos os recursos que se cruzam e descobrir qual tem mais sobreposição (execute uma ferramenta do tipo União e use o polígono com a maior área ...).
fonte
Se você deseja adicionar alguns atributos da camada vermelha à camada azul e um atributo é comum nas duas camadas, você deve usar a opção Adicionar junção de vetor .
Eu escrevi sobre isso aqui .
É isso aí.
Aqui você tem um exemplo com capturas de tela.
fonte
Eu prefiro a resposta do @ dmh126, pois o método dele permite que a camada red_line seja atualizada com bastante facilidade.
Apenas para adicionar uma alternativa, você pode usar a ferramenta de tabela Associar atributos na caixa de ferramentas de processamento e selecionar suas camadas com o campo comum. Observe que este método cria um novo shapefile em vez de atualizar um existente:
fonte
Se você tiver algum ID exclusivo em ambas as camadas, que possa ser usado para associar facilmente valores à nova camada da antiga, é fácil. Mas isso não parece ser o caso.
Caso contrário, é um problema bastante difícil. Gostaria de saber por que o comentário do usuário30184, sugerindo o uso do OpenJUMP e do plugin http://www.vividsolutions.com/products.asp?catg=spaapp&code=roadmatcher, não foi postado como resposta, porque parece completamente legítimo para mim nesse caso.
Caso contrário, não acho que você possa fazer isso sem alguma codificação. Com o QGIS, você pode usar formas bem torneadas e, ao combinar buffer e interseção, deve poder fazer uma verificação automática significativa.
Uma abordagem poderia ser comparar um buffer razoavelmente grande de linhas vermelhas com linhas azuis e obter atributos correspondentes e proporções de quanto ele corresponde. No pseudo-código:
fonte