Esta es una gran pregunta, tuve que hacer algo similar recientemente pero con un conjunto de datos mucho más pequeño, por lo que pude usar una intersección simple con un poco de control de calidad visual adicional y estuvo bien.
Pero aquí hay una idea para esto, aunque no tengo código, y es un proceso bastante pesado. Definitivamente pruebe primero con una muestra del conjunto de datos completo. Probablemente puedas encontrar algún código útil por aquí. (La sangría se puso un poco rara a continuación):
tome el buen conjunto de geometría (donde desea que terminen los atributos) y cree un búfer *
iterar a través de cada una de las características del búfer:
2a. calcular la orientación general de la función (max_y - min_y / max_x - min_x o algo así)
2b. realice una consulta de selección por ubicación en la otra capa utilizando esta característica única
tendrá más de una función que coincida con la consulta de selección por ubicación, de modo que repita estas funciones seleccionadas y calcule la orientación de cada una
obtener los atributos de cualquier característica que tenga una orientación más cercana a la de la característica de búfer.
* Comenzaría con una distancia muy pequeña (una unidad de mapa o algo así) y luego ejecutaría este proceso con distancias crecientes, teniendo cuidado de no sobrescribir ningún atributo que ya haya transferido.
** En realidad, probablemente podría renunciar a hacer las características del búfer, y simplemente hacer la consulta de selección por ubicación con una distancia del búfer. No estoy muy familiarizado con QGIS, pero estoy seguro de que podrá hacerlo.
No hay forma de que esto funcione perfectamente para todas sus funciones, pero es un comienzo, y luego se reduce a desarrollar una buena estrategia de control de calidad / control de calidad para verificar y completar la transferencia.
EDITAR Pensando más en esto, aquí hay un ejemplo básico que rompería completamente el sistema si comenzara con una distancia de búfer muy pequeña y eligiera la función con la mejor orientación coincidente, como recomendé:
Se tomarían los atributos de la línea roja incorrecta. Para evitar esto, es posible que desee crear algún tipo de tolerancia, y solo tome los atributos de la característica si su orientación (en comparación con la orientación de la característica azul original) cae dentro de esa tolerancia.
EDITAR 2 Vaya, ¿son estos polígonos? Supongo que supuse que eran líneas sobre un fondo gris. Si son polígonos, realmente no sé si este concepto de orientación es bueno. Pero puede seleccionar todas las entidades que se cruzan y descubrir cuál tiene la mayor superposición (ejecute una herramienta de tipo Unión y luego use el polígono con el área más grande ...).