@Dano soulève à juste titre certains problèmes qui doivent être résolus dans une réponse complète.
Une difficulté , déjà notée par @Celenius, est qu'une jointure entre B et A (dans les deux sens) duplique tous les champs; il peut être onéreux de corriger cela. J'ai suggéré dans les commentaires que la manière évidente et facile (exporter vers une feuille de calcul) soulève des questions d'intégrité des données. Une autre difficulté , déjà abordée par la proposition de Celenius, concerne la résolution de ce problème lorsqu'aucune combinaison d'attributs ne peut servir de clé pour A et B, car cela empêche une jointure de base de données. La jointure spatiale contourne ce problème.
Quelle est donc la bonne solution? Une approche utilise A pour identifier les enregistrements correspondants de B contenant les données souhaitées. En fonction d'hypothèses sur les configurations des polygones - qu'ils se chevauchent, que certains puissent en contenir d'autres, etc. - cela peut être effectué de différentes manières: en utilisant une couche pour sélectionner des objets dans l'autre, ou via des jointures. Le point ici est que tout ce que nous voulons faire à ce stade est de sélectionner le sous-ensemble de B correspondant à A.
Une fois cette sélection effectuée, exportez la sélection et laissez-la remplacer A. Terminé .
Cette solution suppose que tous les champs de B sont destinés à remplacer leurs homologues en A. Sinon, il est vraiment nécessaire d' effectuer une jointure 1-1 de B (source) vers A (destination). La jointure basée sur des identificateurs est la meilleure, mais la création d'une jointure sur l'identité de polygone (Celenius) fonctionne bien si les identifiants ne sont pas disponibles et qu'il n'y a aucune chance que les formes de polygone correspondantes dans A et B puissent différer, même légèrement . (Ceci est un point subtil, et la cause potentielle d'erreurs insidieuses, car les modifications précédentes dans B aux polygones qui ne correspondent pas à A pourraient toujours modifier de manière invisible les autres polygones dans B si le SIG "accroche" ou "maintient la topologie" ou autrement effectuer automatiquement des changements globaux lors des modifications locales.)
À ce stade, il existe deux copies de chaque champ: si [Foo] est un champ commun à A et B, alors la jointure contient A. [Foo] et B. [Foo]. À l'aide d'un calcul de champ , copiez B. [Foo] dans A. [Foo]. Répétez pour tous les champs nécessaires. Après cela, supprimez la jointure.
Bien que cette procédure puisse être un peu onéreuse lorsque de nombreux domaines sont impliqués, ses mérites incluent
- Le script est simple et rapide.
- Le scriptage laisse une piste d'audit documentant le traitement effectué sur les données. Ceci est crucial pour protéger l'intégrité des données.
- Il se défend contre certains types d'erreurs de gros, comme la conservation du mauvais champ après la jointure (conservant ainsi les anciennes données au lieu des nouvelles données pour ce champ) ou la suppression d'un champ crucial.
- Il tire parti des défenses intégrées offertes par le système de gestion de base de données, telles que l'application du type de données et l'application des règles métier, qui fonctionnent pour prévenir et identifier les erreurs et pour maintenir la cohérence entre toutes les tables et couches de la base de données.
Certains des principes directeurs impliqués dans cette suggestion sont
- Utilisez votre système de gestion de base de données pour traiter les données plutôt que d'utiliser un logiciel non conçu ou inadapté à cette tâche.
- Évitez de modifier les structures de base de données (telles que la suppression ou l'ajout de champs) lorsque les opérations ne le nécessitent pas absolument.
- Utilisez les capacités d'automatisation du logiciel pour simplifier le travail, le documenter et rendre les opérations reproductibles.
On pourrait objecter que dans de nombreux cas, il existe des moyens plus rapides et plus faciles d'atteindre le même résultat. Oui, il peut y en avoir, et ils peuvent être efficaces et ils fonctionnent généralement lorsqu'ils sont effectués avec soin. Mais les solutions qui risquent les données sont difficiles à recommander et à défendre en tant que réponses générales. Il est préférable de les utiliser dans des situations ponctuelles avec de petits ensembles de données où la corruption dans les données devrait rapidement devenir évidente et les conséquences de telles erreurs sont sans importance.