Eu tenho duas camadas vetoriais, das quais uma é uma camada pontual baseada em "eventos" por sensoriamento remoto e a segunda é uma camada linear de pesquisa local.
No meu caso, são terremotos e falhas tectônicas, mas acho que alguém poderia simplesmente escolher "acidentes de carro e estradas" como um exemplo geral.
Então, o que eu gostaria de fazer é mover / copiar os pontos para o ponto mais próximo das linhas, desde que a uma distância de tolerância (digamos 1-2km ou 0,0xx °), com a nova camada de pontos (+ attr movido s / n).
Alguma ideia ?
Linux, QGIS 1.8
Respostas:
Publicou um trecho de código (testado no console python) que faz o abaixo
Edit: Acabei de descobrir que o método @radouxju usando o closestSegmentWithContext fornece os mesmos resultados em menos linhas de código. Eu me pergunto por que eles inventaram esse nome estranho de método? deveria ter sido algo como o mais próximoPointOnGeometry.
Para que possamos evitar formas e fazer algo assim,
fonte
Aqui está um pseudo-código para começar. Espero que isso ajude e que alguém tenha tempo para fornecer o código completo (não tenho no momento)
A primeira coisa a fazer é fazer um loop no ponto e selecionar as linhas que estão localizadas dentro da distância limite de cada ponto. Isso pode ser feito com QgsSpatialIndex
Dentro do primeiro loop, a segunda coisa a fazer é fazer um loop nas linhas selecionadas e encontrar o ponto mais próximo da linha. Isso pode ser feito diretamente com base em QgsGeometry :: closestSegmentWithContext
o terceiro passo (dentro do primeiro loop) consistiria em atualizar a geometria do ponto com a geometria do minDistPoint com a menor distância
atualizar com algum código (no QGIS3)
fonte