@Dano solleva giustamente alcuni problemi che sono meglio risolti in una risposta completa.
Una difficoltà , già notata da @Celenius, è che un'unione tra B e A (in entrambe le direzioni) duplica tutti i campi; può essere oneroso correggerlo. Ho suggerito nei commenti che l'ovvio modo semplice (esportazione in un foglio di calcolo) solleva questioni di integrità dei dati. Un'altra difficoltà , già affrontata dalla proposta di Celenius, riguarda la risoluzione di questo problema quando nessuna combinazione di attributi può servire da chiave sia per A che per B, poiché ciò impedisce un join al database. L'unione spaziale aggira quel problema.
Qual è, allora, una buona soluzione? Un approccio utilizza A per identificare i record corrispondenti di B contenenti i dati desiderati. A seconda delle ipotesi sulle configurazioni dei poligoni - se si sovrappongono, se alcuni possono contenere altri, ecc. - Ciò può essere effettuato in vari modi: usando uno strato per selezionare oggetti nell'altro, o tramite unioni. Il punto qui è che tutto ciò che vogliamo fare in questa fase è selezionare il sottoinsieme di B corrispondente ad A.
Dopo aver raggiunto quella selezione, esporta la selezione e lascia che sostituisca A. Fatto .
Questa soluzione presuppone che tutti i campi in B siano destinati a sostituire le loro controparti in A. In caso contrario, è davvero necessario eseguire un join 1-1 di B (sorgente) con A (destinazione). Il join basato sugli identificatori è il migliore, ma fare un join sull'identità poligonale (Celenius) funziona bene se gli ID non sono disponibili e non è possibile che le corrispondenti forme poligonali in A e B possano differire, anche se leggermente . (Questo è un punto sottile, e la potenziale causa di errori insidiosi, perché le precedenti modifiche in B ai poligoni che non corrispondono ad A potrebbero comunque modificare in modo invisibile gli altri poligoni in B se il GIS sta "scattando" o "mantenendo la topologia" o altrimenti apportando automaticamente modifiche globali durante le modifiche locali.)
In questo frangente, ci sono due copie di ogni campo: se [Foo] è un campo comune ad A e B, allora il join contiene A. [Foo] e B. [Foo]. Utilizzando un calcolo di campo , copiare B. [Foo] in A. [Foo]. Ripetere l'operazione per tutti i campi necessari. Al termine, rimuovere il join.
Sebbene questa procedura possa essere un po 'onerosa quando sono coinvolti molti campi, i suoi meriti includono
- Scrivere è semplice e veloce.
- Lo scripting lascia una traccia di controllo che documenta l'elaborazione in corso sui dati. Questo è fondamentale per proteggere l'integrità dei dati.
- Difende da alcuni tipi di errori all'ingrosso, come la conservazione del campo errato dopo l'unione (mantenendo quindi i vecchi dati anziché i nuovi dati per quel campo) o l'eliminazione di un campo cruciale.
- Sfrutta le difese integrate offerte dal sistema di gestione del database, come l'applicazione del tipo di dati e l'applicazione delle regole di business, che operano per prevenire e identificare errori e per mantenere la coerenza tra tutte le tabelle e i livelli nel database.
Alcuni dei principi guida coinvolti in questo suggerimento sono
- Utilizzare un sistema di gestione del database per elaborare i dati anziché utilizzare software non progettato o non idoneo per questa attività.
- Evitare di modificare le strutture del database (come eliminare o aggiungere campi) quando le operazioni non lo richiedono assolutamente.
- Utilizzare le funzionalità del software per l'automazione per semplificare il lavoro, documentarlo e rendere le operazioni riproducibili.
Si potrebbe obiettare che in molti casi ci sono modi più veloci e più facili per raggiungere lo stesso risultato. Sì, ci può essere e possono essere efficaci e di solito funzionano se eseguiti con cura. Ma le soluzioni che rischiano i dati sono difficili da raccomandare e difendere come risposte di carattere generale. Sono meglio impiegati in situazioni una tantum con piccoli set di dati in cui la corruzione nei dati dovrebbe rapidamente diventare evidente e le conseguenze di tali errori sono irrilevanti.