Tengo dos capas de vectores, de las cuales una es una capa de puntos basada en "eventos" por teledetección y la segunda es una capa de línea de investigación local.
En mi caso, se trata de terremotos y fallas tectónicas, pero supongo que uno podría simplemente elegir "accidentes automovilísticos y carreteras" como ejemplo general.
Entonces, lo que me gustaría hacer es mover / copiar los puntos en el punto más cercano de las líneas, siempre que esté dentro de una distancia de tolerancia (digamos 1-2 km o 0.0xx °), con la nueva capa de puntos (+ attr movido y / n).
Algunas ideas ?
Linux, QGIS 1.8
Respuestas:
Publicó un fragmento de código (probado en la consola de Python) que hace lo siguiente
Editar: justo ahora descubrí que el método @radouxju que utiliza el más cercanoSegmentWithContext da los mismos resultados en menos líneas de código. Me pregunto por qué se les ocurrió este extraño nombre de método. debería haber sido algo así comoarestPointOnGeometry.
Así podemos evitar bien y hacer me gusta,
fuente
Aquí hay un pseudocódigo para comenzar. Espero que esto ayude y que alguien tenga tiempo para proporcionar el código completo (no lo tengo en este momento)
Lo primero que debe hacer es recorrer el punto y seleccionar las líneas que se encuentran dentro de la distancia umbral a cada punto. Esto se puede hacer con QgsSpatialIndex
Dentro del primer bucle, lo segundo que debe hacer es recorrer las líneas seleccionadas y encontrar el punto más cercano en la línea. Esto se puede hacer directamente basado en QgsGeometry ::arestSegmentWithContext
El tercer paso (dentro del primer bucle) consistiría en actualizar la geometría del punto con la geometría del minDistPoint con la menor distancia
actualizar con algún código (en QGIS3)
fuente