Mam pomysł, co może Ci pomóc. Będzie opierać się na niektórych założeniach, ale pomogłoby zawęzić listę możliwych identycznych funkcji. Nie byłby to zautomatyzowany proces, ale wymagałby ręcznego przeglądania duplikatów. Na podstawie komentarzy wydaje się, że zautomatyzowane narzędzia nie porównują atrybutów, więc pomogłoby to przypadkowo usunąć funkcje.
Korzystanie z ArcMap
(1) Zrób kopię pliku shapefile na wypadek, gdyby coś poszło nie tak.
(2) Dodaj kolumnę do swojego pliku kształtu jako podwójny.
(3) Oblicz obszar dla każdej funkcji, używając najbardziej opisowego (najbardziej precyzyjnego) formatu, jaki możesz. Coś, w czym zaokrąglanie może nie stanowić problemu.
(4) Uruchom podsumowanie (podsumowanie) w tej kolumnie. Upewnij się, że wybrałeś unikalny identyfikator w podsumowaniu i zaznaczyłeś zarówno pierwszy, jak i ostatni.
(5) W tabeli wyników wyszukaj te rekordy, w których pole liczby jest większe niż 1.
(6a) Ręcznie sprawdź funkcje i powtarzaj proces, aż nie będzie już duplikatów.
(6b) Możesz po prostu utworzyć listę tych unikalnych identyfikatorów i usunąć funkcje za pomocą arcpy, ale masz szansę na posiadanie dwóch niezidentyfikowanych cech o tym samym obszarze.
Kolejna technika wykorzystująca ArcPy
Konstruując powyższą odpowiedź, pomyślałem o możliwości, że wielu autorów tych danych mogło faktycznie użyć tych samych unikalnych identyfikatorów dla powielonych funkcji. W takim przypadku możesz znaleźć duplikaty poprzez zapętlenie w arcpy.
Sposób, w jaki pomyślałbym o zrobieniu tego za pomocą ArcPy, może obciążać twój system i zająć trochę czasu.
(1) Zrób kopię pliku shapefile (na wszelki wypadek)
(2) Dodaj nową kolumnę, aby oznaczyć duplikaty. Coś, co wymaga „y”, „n” lub 0 lub 1 lub cokolwiek by działało.
(3) Utwórz listę w Pythonie, aby przechowywać unikalny identyfikator.
(4) Uruchom kursor aktualizacji ( arcpy.UpdateCursor('LAYERNAME')
). Dla każdego rekordu sprawdź listę, aby zobaczyć, czy zawiera on ten identyfikator, i zaznacz kolumnę dla duplikatów, jeśli istnieje.
myList = []
rows = arcpy.UpdateCursor("layername")
for row in rows:
if str(row.UniqueIdentifier) in myList:
#value duplicated
row.DuplicateColumnName = "y"
else:
#not there, add it
myList.append(row.UniqueIdentifier)
rows.updateRow(row)
(5) Następnie możesz porównać lub zrobić, co chcesz, z zaznaczonymi kolumnami.
Prawdopodobnie istnieją lepsze sposoby wykonania tych porównań, ale uważam, że są to dwa, które moim zdaniem powinny zadziałać lub przynajmniej zacząć.
Edytować
W oparciu o komentarz elrobis , możesz użyć minimalnego prostokąta ograniczającego, aby dodatkowo zmniejszyć ryzyko usunięcia nieprawidłowych funkcji.
Korzystając z ArcMap, możesz uruchomić narzędzie Minimalna geometria ograniczająca w Zarządzaniu danymi. Po sprawdzeniu opcji, myślę, że najlepiej byłoby użyć opcji CONVEX_HULL .
Jeśli porównasz pola MBG_APodX / Y1 , MBG_APod_X / Y2 wraz z MBG_Orientation dla duplikatów, powinieneś być w stanie dobrze zrozumieć powielone funkcje. Sugerowałbym użycie metody podsumowania opisanej powyżej w celu porównania. Wybierz jeden z wierzchołków (współrzędnych) z prostokąta ograniczającego, aby znaleźć duplikaty. Możesz dostać kilka przypadkowych „dopasowań”, ale kiedy dodasz pozostałe wierzchołki plus orientację, byłoby całkiem bezpieczne, że funkcje wyników są duplikatami.
Chociaż go nie użyłem i nie jestem całkiem pewien wyników tego narzędzia, możesz łatwiej sprawdzić wynikowy plik kształtu, jeśli użyjesz narzędzia Statystyki podsumowujące w ArcMap. Wygląda na to, że możesz podsumować wiele kolumn w ten sposób zamiast mojej opcji pojedynczej kolumny.
Nie sądzę, aby byłby to całkowicie zautomatyzowany sposób, bez obawy o możliwość usunięcia niepowielonej funkcji. Te metody powinny jednak pomóc w ograniczeniu liczby funkcji, które należy ręcznie sprawdzić.