У мене є ідея, що може працювати для вас. Це базуватиметься на деяких припущеннях, але це допоможе звузити список можливих однакових особливостей. Це не був би автоматизованим процесом, але це вимагало б перегляду дублікатів вручну. На підставі коментарів, здається, що автоматизовані інструменти не порівнюють атрибути, тому це допоможе вам не видаляти функції, які невідомо.
Використання ArcMap
(1) Зробіть копію свого формату файлів на випадок, якщо все піде не так.
(2) Додайте стовпчик до свого формату файлів як подвійний.
(3) Обчисліть площу для кожної функції, використовуючи найбільш описовий (найточніший) формат, який ви можете. Щось, де округлення може не бути проблемою.
(4) Запустити підсумок (підсумувати) у цьому стовпчику. Переконайтесь, що ви вибрали унікальний ідентифікатор у підсумку та позначте як перший, так і останній.
(5) У вихідній таблиці шукайте ті записи, де поле рахунку вище 1.
(6a) Перевірте функції вручну та повторіть процес, поки не буде більше дублікатів.
(6b) Ви можете просто створити список цих унікальних ідентифікаторів і видалити функції за допомогою arcpy, але ви маєте шанс, можливо, мати дві унікальні функції з тією ж областю.
Ще одна техніка використання ArcPy
Коли я будував вищезгадану відповідь, я думав про можливість того, що якимось чином кілька авторів цих даних фактично могли використовувати однакові унікальні ідентифікатори для дублюваних функцій. Якщо це так, можливо, вам вдасться знайти дублікати за допомогою циклу в arcpy.
Те, як я б подумав про те, щоб зробити це за допомогою ArcPy, міг би оподатковувати вашу систему і забирати трохи.
(1) Зробіть копію файлу форми (у випадку, якщо це знову)
(2) Додайте новий стовпчик для позначення дублікатів. Щось, що сприймає як 'у' або 'n', або 0 або 1, або що б не працювало.
(3) Створіть список у python для зберігання унікального ідентифікатора.
(4) Запустіть курсор оновлення ( arcpy.UpdateCursor('LAYERNAME')
). Кожен запис перевірте ваш список, щоб побачити, чи він містить цей ідентифікатор, і позначте свій стовпець для дублікатів, якщо він є.
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) Потім ви можете порівнювати або робити все, що завгодно, із зазначеними стовпцями.
Напевно, є кращі способи цих порівнянь, але я вважаю, що це два, які, на мою думку, повинні працювати або принаймні розпочати роботу.
Редагувати
Виходячи з коментаря elrobis , ви можете використовувати мінімальний обмежуючий прямокутник, щоб ще більше зменшити ймовірність видалення неправильних функцій.
Використовуючи ArcMap, ви можете запустити інструмент " Мінімальна обмежуюча геометрія" в управлінні даними. Перевіривши параметри, я думаю, що найкраще використовувати варіант CONVEX_HULL .
Якщо ви порівнюєте поля MBG_APodX / Y1 , MBG_APod_X / Y2 разом з MBG_Orientation для дублікатів, ви повинні мати можливість добре уявити про дублювані функції. Я б запропонував для порівняння описаний вище метод Summarize . Виберіть одну з вершин (координат) з обмежувального прямокутника, щоб знайти дублікати. Ви можете отримати кілька випадкових "матчів", але як тільки ви додасте в інші вершини плюс орієнтацію, було б досить безпечно зробити ставку, що функції результатів є дублікатами.
Хоча я не використовував його і не зовсім впевнений у результатах цього інструменту, вам може бути легше вивчити отриманий файл файлів, якщо ви використали інструмент Зведена статистика в ArcMap. Схоже, ви можете узагальнити декілька стовпців таким чином, замість одного варіанту моєї колонки.
Я не думаю, що не було б абсолютно автоматизованого способу зробити це, не турбуючись про можливість видалення не дублюючої функції. Ці методи повинні допомогти обмежити кількість функцій, які вам потрібно буде переглянути вручну.