Mam problem, który wydaje mi się, że nie mogę sobie poradzić. Mam dwie warstwy wielokątów:
- Wielokąt A - jest podzbiorem wielokąta B o tych samych polach i ma identyczne wielokąty jak wielokąt B
- Wielokąt B - ma dane atrybutu, które chcę znaleźć w wielokącie A.
Jak można to zrobić? Wypróbowałem narzędzie QGIS „Połącz atrybuty według lokalizacji”, ale ponieważ niektóre wielokąty znajdują się w innych, zwykle łączy się z pierwszym znalezionym przecięciem (wielokątem zewnętrznym).
qgis
arcgis-desktop
Diego R.
źródło
źródło
Odpowiedzi:
@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ą
Oto niektóre z zasad przewodnich związanych z tą sugestią
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.
źródło
W Arcmap mogłeś przestrzennie dołączyć do Wieloboku B do Wieloboku A; wiązałoby się to z atrybutami. Ponieważ nazwy pól są takie same, utworzy to nową kombinację nazwy.
źródło
Wyeksportuj tabelę Shapefile „B” do Excela i usuń zbędne kolumny oraz wszelkie kolumny zawierające informacje, których nie potrzebujesz. Upewnij się, że zachowujesz kolumnę z udostępnionym identyfikatorem, a następnie zapisz ją w odpowiednim folderze. Wejdź do ArcMap, dodaj tabelę, a następnie Prawy przycisk myszy na Shapefile „A” i wykonaj połączenie tabeli . Link powinien prowadzić do filmu o tym, jak to zrobić.
@ whuber - Całe podejście jest solidne i zapewnia integralność danych. Jedyne, co mogę powiedzieć, aby obalić tę odpowiedź, to to, że pewne sytuacje / projekty nie dają nam czasu ani budżetu, aby być tak metodycznym w naszym podejściu.
Prawdziwy przykład:
Junior Mining Company siedzi na dużej rudzie z setkami milionów dolarów w gotówce, zależnej od ich zdolności do „udowodnienia” zasobów. Przegląd publikacji i map / danych geologicznych prowadzi do bardzo ukierunkowanego i bardzo kosztownego programu ćwiczeń. Gdy testy powracają od pierwszego uruchomienia, wartości te są oznaczane w odpowiednich punktach za pomocą łączenia tabel i wypompowywane z powrotem w formacie Excel, w którym dane są starannie przygotowywane do importu do DataMine (do interpolacji orebody 3D).
Z mojego doświadczenia wynika , że geolodzy projektu wymagali, aby te dane były przygotowane w programie Excel, aby były zgodne z KAŻDĄ regułą / konwencją formatowania litery (bez spacji, bez znaków specjalnych itp.) Oraz aby plik importu DataMine został dostarczony w formacie .csv (w każdym razie wtedy). Doprowadziłoby to do większych inwestycji w ukierunkowane wiercenie i wielokrotnie powtarzalibyśmy ten proces (w niektórych przypadkach). Wszystko to na ogół miało miejsce w wyjątkowo napiętym i krytycznym terminie.
Każdy z nas ma swoją własną historię i własny wachlarz doświadczeń, które wykorzystaliśmy w naszym podejściu do tego, jak to robimy. Powiedziawszy to, z mojego doświadczenia wynika, że Excel jest absolutną koniecznością i niezbędnym narzędziem w moich przepływach pracy; to co wiem. Podczas przygotowywania tych danych podejmowaliśmy wszelkie środki ostrożności w zakresie kontroli jakości / kontroli jakości. Tam, gdzie uciekacie od Excela, nie miałem wyboru, musiałem go użyć.
źródło
Pod koniec lat 90. otrzymaliśmy aktualizację na dużą skalę do wszystkich naszych zbiorników wodnych i cieków wodnych, obejmującą około 55 arkuszy map NTS i niezapomnianą liczbę tysięcy obiektów. Musieliśmy zachować atrybuty wartości dodanej naszej starej hydrologii (nazwy jezior, rzędna powierzchni itp.) I zastąpić geometrię. Geometria starego i nowego była wystarczająco blisko, abyśmy mogli zagwarantować, że centroidy każdego wielokąta będą nadal ograniczone nowymi granicami wielokąta - jest to ważny punkt, bez tej podstawowej pewności, poniższe podejście nie jest dobrym pomysłem.
Rozwiązaniem w tym konkretnym przypadku było zamiast przynieść atrybuty do geometrii, przynieść geometrię do atrybutów. Więc koncepcyjnie:
Zobacz tutaj, aby uzyskać bardziej szczegółowy opis i przepis na arcinfo-workation . Nie jestem pewien, czy w nowoczesnym Arcgis lub Qgis jest nawet możliwe usunięcie geometrii bez jednoczesnego usunięcia jej rekordu atrybutu, ale hej, na wszelki wypadek, oto pomysł.
źródło
Nie jestem pewien, ale być może niektóre DBMS wykonują operacje równości na polach Shape w SQL (?). Wydaje mi się, że jeśli dwie geometrie są identyczne,
=
operator SQL powinien zwrócić true (WHERE A.Shape = B.Shape
).Jeśli jest to prawdą w przypadku używanej bazy danych, powinieneś być w stanie wykonać sprzężenie przestrzenne przy użyciu tej samej składni, co w przypadku łączenia nieprzestrzennego.
Wygląda na to, że można do tego użyć metody ST_Equals (standard OGC).
źródło
Jak zwykle whuber ma rację. Musisz dokładnie przemyśleć swój proces. Zwłaszcza jeśli są to duże zbiory danych, a operacja ta zostanie podjęta wiele razy lub dane będą miały kluczowe znaczenie.
Rozważ swoje dane i obowiązki:
Co ty zrobiłeś?
Co robisz?
Co zamierzasz zrobić?
I zawsze pytaj: dlaczego?
Teraz jedna prosta odpowiedź skierowana bezpośrednio na zadane pytanie. Pamiętając o tym, zawsze jest co najmniej 5 sposobów, ale zazwyczaj tylko jeden najlepszy sposób.
Zakładając, że pełny zestaw ma wszystkie atrybuty, które mają znajdować się w tym podzbiorze, a w tym podzbiorze nie ma niczego, co nie jest jeszcze w pełnym zestawie, oprócz nieaktualnych informacji.
Zgadywanie, czy topologia podzbioru pasuje do pełnego zestawu (w tym Origin / Projekcja i Tolerancja XY).
1) Użyj Feature to Point z zaznaczonym polem wyboru „Inside” i utwórz klasę obiektów point lub plik kształtu z podzestawu.
2) Użyj opcji Wybierz według łączenia przestrzennego, aby znaleźć wszystkie wielokąty w pełnym zestawie, które odpowiadają podzestawowi na podstawie nowo utworzonej klasy elementów Point lub pliku kształtu.
3) Wyeksportuj zaznaczenie z pełnego zestawu, który może być Twoim nowym podzbiorem.
źródło
Z pewnością, jeśli wielokąt A jest podzbiorem wielokąta B, najłatwiejszym sposobem byłoby zapętlenie wielokąta A, użycie identyfikatora, który byłby w wielokącie A (i B, gdyby A był podzbiorem lub B), aby wyszukać dane wiersza w Wielokąt B, a następnie zaktualizuj wiersz w Wielokącie A.
źródło