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 ...).