@Dano słusznie podnosi pewne problemy, które najlepiej rozwiązać w pełnej odpowiedzi.
Jedną z trudności , zauważoną już przez @Celeniusa, jest to, że połączenie między B i A (w obu kierunkach) powiela wszystkie pola; poprawienie tego może być uciążliwe. Zasugerowałem w komentarzach, że oczywisty łatwy sposób (eksport do arkusza kalkulacyjnego) rodzi pytania o integralność danych. Inna trudność , rozwiązana już w propozycji Celeniusa, dotyczy rozwiązania tego problemu, gdy żadna kombinacja atrybutów nie może służyć jako klucz dla A i B, ponieważ wyklucza to przyłączenie do bazy danych. Połączenie przestrzenne omija ten problem.
Co zatem jest dobrym rozwiązaniem? Jedno podejście wykorzystuje A do identyfikacji odpowiednich zapisów B zawierających pożądane dane. W zależności od założeń dotyczących konfiguracji wielokątów - czy się pokrywają, czy niektóre mogą zawierać inne itp. - można to zrobić na różne sposoby: używając jednej warstwy do wybierania obiektów w drugiej, lub poprzez połączenia. Chodzi o to, że wszystko, co chcemy zrobić na tym etapie, to wybrać podzbiór B odpowiadający A.
Po osiągnięciu tego wyboru wyeksportuj zaznaczenie i pozwól mu zastąpić A. Gotowe .
To rozwiązanie zakłada, że wszystkie pola w B mają zastąpić ich odpowiedniki w A. Jeśli nie, to naprawdę konieczne jest wykonanie łączenia 1-1 z B (źródło) z A (miejsce docelowe). Łączenie na podstawie identyfikatorów jest najlepsze, ale połączenie na podstawie tożsamości wielokąta (Celenius) działa dobrze, jeśli identyfikatory nie są dostępne i nie ma szans, że odpowiadające kształty wielokątów w A i B mogą się nieznacznie różnić . (Jest to subtelna kwestia i potencjalna przyczyna podstępnych błędów, ponieważ poprzednie zmiany w B wielokątów, które nie odpowiadają A, mogłyby nadal niewidocznie modyfikować inne wielokąty w B, jeśli GIS „przyciąga” lub „utrzymuje topologię” lub w inny sposób automatycznie wprowadzać zmiany globalne podczas lokalnych edycji).
W tym momencie są dwie kopie każdego pola: jeśli [Foo] jest wspólnym polem dla A i B, to złączenie zawiera A. [Foo] i B. [Foo]. Korzystając z obliczenia pola , skopiuj B. [Foo] do A. [Foo]. Powtórz dla wszystkich potrzebnych pól. Po zakończeniu usuń złączenie.
Chociaż ta procedura może być nieco uciążliwa, gdy zaangażowanych jest wiele dziedzin, jej zalety obejmują
- Jest prosty i szybki do napisania.
- Skryptowanie pozostawia ślad audytu dokumentujący przetwarzanie danych. Ma to kluczowe znaczenie dla ochrony integralności danych.
- Chroni przed niektórymi rodzajami błędów hurtowych, takimi jak zachowanie niewłaściwego pola po złączeniu (w ten sposób zachowując stare dane zamiast nowych danych dla tego pola) lub usuwając kluczowe pole.
- Wykorzystuje wbudowane zabezpieczenia oferowane przez system zarządzania bazą danych, takie jak wymuszanie typu danych i wymuszanie reguł biznesowych, które działają w celu zapobiegania błędom i ich identyfikowania oraz w celu zachowania spójności między wszystkimi tabelami i warstwami w bazie danych.
Oto niektóre z zasad przewodnich związanych z tą sugestią
- Użyj systemu zarządzania bazą danych do przetwarzania danych zamiast używać oprogramowania, które nie zostało zaprojektowane lub jest nieodpowiednie do tego zadania.
- Unikaj zmieniania struktur bazy danych (takich jak usuwanie lub dodawanie pól), gdy operacje absolutnie tego nie wymagają.
- Wykorzystaj możliwości oprogramowania do automatyzacji, aby uprościć pracę, udokumentować ją i zapewnić powtarzalność operacji.
Można sprzeciwić się, że w wielu przypadkach istnieją szybsze i łatwiejsze sposoby osiągnięcia tego samego rezultatu. Tak, mogą być, i mogą być skuteczne i zwykle działają ostrożnie. Jednak rozwiązania, które ryzykują dane, są trudne do rekomendowania i obrony jako odpowiedzi ogólnego przeznaczenia. Najlepiej je stosować w sytuacjach jednorazowych z małymi zestawami danych, w których uszkodzenie danych powinno szybko stać się oczywiste, a konsekwencje takich błędów są nieistotne.