Usunąć zduplikowane operacje o tej samej geometrii w ArcMap?


15

Czy można jednoznacznie zidentyfikować każdą geometrię w warstwie obiektów?

Zasadniczo mam warstwę cech wielokąta z wieloma wierszami danych reprezentowanymi przez tę samą geometrię. Chciałbym 1 wiersz dla każdej unikalnej geometrii. Szukam więc gotowej metodologii łączenia atrybutów w oparciu o kształt geometrii.

Pochodzę ze świata Postgres i mogę tam rozwiązać ten problem, ale nie wiem, jak to zrobić (lub jeśli to możliwe), aby zrobić to nieprogramowo za pomocą narzędzi ESRI.


Mówisz więc, że istnieje wiele zapisów o identycznej geometrii i chcesz połączyć te, które są identyczne? Jeśli tak jest ... czy możesz po prostu rozpuścić się w oparciu o obszar lub coś takiego? Może brakuje mi tutaj twojego pytania.
Clickinaway,

Zgadza się, są to identyczne geometrie, w których jedynym wspólnym naturalnym atrybutem jest sama geometria. Obszar może działać, ale nie ma gwarancji, że dwie różne geometrie nie mają tego samego obszaru.
Dylan Hettinger

Zobacz mój post. Możesz uruchomić rozpuścić na wielu polach.
Paul

@Paul .... Widzę, że zredagowałeś swoją odpowiedź, aby odzwierciedlić mój wkład. Mam nadzieję, że to pomogło.
Clickinaway,

Odpowiedzi:


22

Jeśli masz licencję zaawansowaną, możesz użyć funkcji Znajdź identyczną lub Usuń identyczną .

Oba mogą być używane do wyszukiwania / usuwania obiektów, które mają identyczne atrybuty lub, jeśli określono pole Kształt, identyczne geometrie.

Jeśli nie masz zaawansowanej licencji, ten post będzie przydatny.

Krótko mówiąc, dodajesz dwa pola dla X, Y w tabeli atrybutów i uruchamiasz Rozpuszczanie na wspomnianych polach.

Jeśli masz wielokąty, które mają ten sam środek ciężkości, ale nie są geometrycznie identyczne, możesz dodać dwa inne pola (obwód i obszar). To powinno wystarczyć do zidentyfikowania identycznych geometrii dla prawie wszystkich normalnych przypadków. Zobacz komentarze @ whuber poniżej.


Czy przypuszczalne dane punktowe są prawidłowe? Zastanawiałem się, czy najpierw nie zasugerować stworzenia centroidów. Nadal mówi, że jest wiele rzędów o tej samej geometrii ... To prawie brzmi jak klasyfikacja na podstawie klasy / zasięgu areału? Ale mówi też o kształcie geometrii ... dlatego skłaniałem się ku rozpuszczeniu w oparciu o powierzchnię lub obwód (lub kombinację dwóch z nich, aby osiągnąć proporcję).
Clickinaway,

1
W rzeczywistości ten post, który podłączyłem, dotyczył wielokątów. Mógłbyś rozpuścić się na obszarze i centroidie, przy małej szansie, że masz dwa nieidentyczne wielokąty z tym samym centroidem.
Paul

+1 To jest dokładnie właściwa odpowiedź. Zasadniczo środek ciężkości, obwód i obszar mogą nadal nie jednoznacznie identyfikować wielokąta, ale kontrprzykłady są nieco wymyślone. W przypadku mieszania nieregularnych lub naturalnych lub ręcznie zdigitalizowanych obiektów do unikalnych identyfikatorów te cztery wartości powinny być wiarygodne. Jeśli chcesz uzyskać łatwiejsze do uzyskania wartości, użyj współrzędnych obwiedni elementu i liczby jego wierzchołków.
whuber

@whuber Czy porównywanie współrzędnych wszystkich wierzchołków byłoby jedynym pewnym sposobem na określenie identycznej geometrii? Moje tło w geometrii jest dość słabe, więc uważam to za bardzo fascynujące.
Paul

Odpowiedź na twoje pytanie zależy od tego, co rozumiesz przez „identyczny”: na przykład, jeśli wstawisz nowy wierzchołek wzdłuż krawędzi wielokąta, czy jest to „identyczny” wielokąt, czy nie? Prawdopodobnie oznacza to reprezentowanie tej samej cechy na świecie, nawet jeśli wierzchołki się różnią. Z tego punktu widzenia jedynym pewnym pewnym testem jest to, czy (ustalona teoretycznie) różnica dwóch wielokątów jest pusta, czy nie. Ale jeśli przyjrzysz się bardziej rygorystycznemu poglądowi, że tożsamość oznacza dopasowanie wierzchołka do wierzchołka, nadal jest to trudne, ponieważ jeden wielokąt może rozpocząć swoją listę wierzchołków w innym punkcie.
whuber

1

Mam zestaw danych oparty na danych ankietowych. Mój problem polega na tym, że stare funkcje nie zawsze są usuwane przed zaimportowaniem nowych zdjęć ankiet. Dlatego mamy „duplikaty” o innej geometrii: IE strzały pomiarowe mogą być od siebie oddalone o 1/4 stopy. W zestawie danych funkcji 12000 trudno jest powiększyć każdy z nich i zidentyfikować je. Korzystanie z ArcMap Basic 10.2: oto hacky model, który wymyśliłem.

  1. Bufor (w / promień wejściowy) każda funkcja w oryginalnej warstwie (wybrana lub nie)
  2. Iteruj po każdej funkcji w warstwie buforowej
  3. Wybierz z oryginalnej warstwy na podstawie relacji (Centroid z funkcją)
  4. Wybrane funkcje „Liczba wierszy”
  5. Pole Oblicz wartość liczby wierszy w warstwie buforowej = Ile obiektów znajduje się w promieniu elementów oryginalnych

Wynalazłem koło na nowo. Sfrustrowałem się też konstruktorem modeli i po prostu zepsułem całą sprawę. Musi być bardziej eleganckie rozwiązanie. Chętnie przyjmę krytykę i sugestie.

Ponadto wydaje się, że działa to poprawnie tylko z poziomu Konstruktora modeli, uruchamiam z przybornika i nie zapisuje warstwy buforowej.

Znajdź duplikaty Featuers


1

Od jakiegoś czasu szukałem odpowiedzi na to samo pytanie, aby przezwyciężyć spłaszczanie problemu nakładających się wielokątów buforowych i pomyślałem, że znalazłem solidne rozwiązanie tego problemu. W rzeczywistości komentarz Whubera,

Zasadniczo środek ciężkości, obwód i obszar mogą nadal nie jednoznacznie identyfikować wielokąta, ale kontrprzykłady są nieco wymyślone.

Odpowiedź @ Paul była dla mnie głównym motorem do dalszych prób. Używa operatora ARE_IDENTICAL_TO narzędzia Spatial , ponieważ jest to najbardziej wydajny spośród innych identycznych detektorów. Oto kroki:

  • Włóż swój wkład, aby wszystkie kształty były różne od siebie;
  • Utwórz fikcyjne pole, aby zachować / skopiować oryginalne OBJECTID (tj. Typ pola OID) wierszy, powiedz EX_OID ;
    • Uruchom łączenie przestrzenne na klasie elementów, która ma być przetwarzana jako parametry elementu docelowego i łączenia. Upewnij się, że uprzednio utworzone odwzorowania pól zastępczych (pojawiających się dwukrotnie) mają regułę scalania PIERWSZY (która jest domyślna lub wybierz OSTATNIE, inne mogą nie dać pożądanego wyniku, ponieważ używają podsumowania nakładania się). W tym kroku wybiera się wspólny kształt OBJECTID siedzący na wierzchu wszystkich nakładających się (tj. PIERWSZY);

Poniższe kroki można wykonać na dwa sposoby, Z Pythonem lub BEZ:

Z PYTHONEM

  • Użyj poniższego kodu, aby wyodrębnić unikalne identyfikatory, które chcemy znaleźć:

print tuple(set([row.getValue("EX_OID_1") for row in arcpy.SearchCursor("Output_of_the_Spatial_Join_Operation")])).

Pamiętaj, że korzystam z drugiej kopii fikcyjnego pola OID, którym w moim przypadku jest EX_OID_1;

  • Skopiuj dane wyjściowe tego kodu i wklej go do zapytania definicji oryginalnej klasy obiektów przetworzonej jako OBJECTID IN (<PASTE_COPIED_VALUES_HERE>). Rezultat pokaże ci ujednolicone cechy nakładających się części. Jest tu jednak ograniczenie wielkości, 30 000 znaków. Aby rozwiązać ten problem, musisz wykonać kroki „bez Pythona”.

BEZ PYTHONU

  • Użyj narzędzia Częstotliwość, aby wyświetlić unikalne wartości w drugiej kopii fikcyjnego pola OID, które w moim przypadku to EX_OID_1;

  • Na koniec dołącz pole OBJECTID oryginalnej klasy obiektów z danymi wyjściowymi narzędzia EX_OID_1 narzędzia Częstotliwość, wybierając opcję „Zachowaj tylko pasujące rekordy”.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.