C'est une excellente question, j'ai dû faire quelque chose de similaire récemment, mais avec un ensemble de données beaucoup plus petit, j'ai donc pu utiliser une simple intersection avec une vérification de qualité visuelle supplémentaire et c'était bien.
Mais voici une idée pour cela, même si je n'ai pas de code, et c'est une sorte de processus lourd. Effectuez d'abord un test avec un échantillon de l'ensemble de données complet. Vous pouvez probablement trouver du code utile ici. (L'indentation est devenue un peu bizarre ci-dessous.):
prenez le bon ensemble de géométrie (où vous voulez que les attributs finissent) et créez-en un tampon *
parcourir chacune des fonctionnalités du tampon:
2a. calculer l'orientation générale de l'entité (max_y - min_y / max_x - min_x ou quelque chose comme ça)
2b. faire une requête de sélection par emplacement sur l'autre couche en utilisant cette seule fonctionnalité
vous aurez plus d'une fonctionnalité qui correspond à la requête de sélection par emplacement, alors parcourez ces fonctionnalités sélectionnées et calculez l'orientation de chacune
obtenir les attributs de la fonction dont l'orientation est la plus proche de celle de la fonction tampon.
* Je commencerais par une très petite distance (une unité de carte ou quelque chose), puis exécuter ce processus avec des distances croissantes, en prenant soin de ne pas écraser les attributs que vous avez déjà transférés.
** Vous pourriez en fait renoncer à créer les fonctionnalités du tampon et simplement faire la requête de sélection par emplacement avec une distance de tampon. Je ne connais pas très bien QGIS, mais je suis sûr que vous pourriez le faire.
Il n'y a aucun moyen que cela fonctionne parfaitement pour toutes vos fonctionnalités, mais c'est un début, puis cela revient à développer une bonne stratégie QA / QC pour vérifier et terminer le transfert.
EDIT En y réfléchissant davantage, voici un exemple de base qui briserait complètement le système si vous débutiez avec une très petite distance de tampon et en choisissant la fonctionnalité avec l'orientation la mieux adaptée comme je l'ai recommandé:
Les attributs de la mauvaise ligne rouge seraient pris. Pour éviter cela, vous pouvez créer une sorte de tolérance et ne prendre les attributs de l'entité que si son orientation (par rapport à l'orientation de l'entité bleue d'origine) se situe dans cette tolérance.
EDIT 2 Oups, sont ces polygones? Je suppose que je viens de supposer qu'il s'agissait de lignes sur fond gris. S'ils sont des polygones, je ne sais pas vraiment si ce concept d'orientation est bon. Mais vous pouvez sélectionner toutes les entités qui se croisent et déterminer celle qui a le plus de chevauchement (exécutez un outil de type Union, puis utilisez le polygone avec la plus grande surface ...).