Questa è un'ottima domanda, ho dovuto fare qualcosa di simile di recente ma con un set di dati molto più piccolo, quindi sono stato in grado di utilizzare un semplice incrocio con qualche controllo di qualità visiva extra e andava bene.
Ma ecco un'idea per questo, anche se non ho codice, ed è una specie di processo pesante. Sicuramente prova prima con un campione dall'insieme di dati completo. Probabilmente puoi trovare del codice utile qui. (Il rientro è diventato un po 'strano di seguito.):
prendi il buon set di geometrie (dove vuoi che finiscano gli attributi) e creane un buffer *
scorrere attraverso ciascuna delle funzionalità del buffer:
2a. calcola l'orientamento generale della funzione (max_y - min_y / max_x - min_x o qualcosa del genere)
2b. effettuare una query di selezione per posizione sull'altro livello utilizzando questa singola funzione
avrai più di una funzione che corrisponde alla query di selezione per posizione, quindi esegui l'iterazione di queste funzionalità selezionate e calcola l'orientamento di ciascuna
ottenere gli attributi da qualunque funzione abbia un orientamento più vicino a quello della funzione buffer.
* Vorrei iniziare con una distanza molto piccola (un'unità della mappa o qualcosa del genere) e quindi eseguire questo processo con distanze crescenti, facendo attenzione a non sovrascrivere gli attributi già trasferiti.
** Probabilmente potresti probabilmente rinunciare a creare le funzionalità del buffer ed eseguire semplicemente la query di selezione in base alla posizione con una distanza del buffer in essa. Non conosco molto bene QGIS, ma sono sicuro che saresti in grado di farlo.
Non è possibile che funzioni perfettamente con tutte le tue funzionalità, ma è un inizio e quindi si riduce allo sviluppo di una buona strategia di controllo qualità / controllo qualità per il controllo e il completamento del trasferimento.
MODIFICA A questo proposito, ecco un esempio di base che romperebbe completamente il sistema se si stesse iniziando con una distanza del buffer molto piccola e scegliendo la funzione con l'orientamento migliore corrispondente come ho raccomandato:
Verranno presi gli attributi dalla linea rossa sbagliata. Per evitare ciò, potresti voler creare una sorta di tolleranza e assumere gli attributi della funzione solo se il suo orientamento (rispetto all'orientamento della funzione blu originale) rientra in quella tolleranza.
EDIT 2 Oops, sono questi poligoni? Immagino di aver appena pensato che fossero linee su uno sfondo grigio. Se sono poligoni, non so davvero se questo concetto di orientamento sia valido. Ma potresti selezionare tutte le caratteristiche che si intersecano e capire quale ha la maggior sovrapposizione (esegui uno strumento di tipo Unione, quindi usa il poligono con l'area più grande ...).