Видалення повторюваних функцій з однаковою геометрією в ArcMap?


15

Чи можна однозначно ідентифікувати кожну геометрію в особливому шарі?

По суті, у мене є багатокутний шар функції з безліччю рядків даних, представлених однаковою геометрією. Я хотів би 1 ряд для кожної унікальної геометрії. Тому я шукаю певну методологію, яка поєднується з атрибутами на основі форми геометрії.

Я родом із світу Postgres і можу вирішити цю проблему там, але я не знаю, як це зробити (або якщо це можливо) зробити це непрограмно за допомогою інструментів ESRI.


Отже, ви говорите, що існує кілька записів однакової геометрії, і ви хочете поєднати ті, які однакові? Якщо це так ... ви могли б просто розчинитися на основі площі чи чогось подібного? Можливо, тут я пропускаю ваше запитання.
Clickinaway

Це правильно, це однакові геометрії, де єдиним спільним природним атрибутом є сама геометрія. Площа може працювати, але немає гарантії, що дві різні геометрії не мають однакової площі.
Ділан Хеттінгер

Дивіться мій пост. Ви можете запустити розчинення на декількох полях.
Пол,

@Paul .... Я бачу, ти відредагував свою відповідь, щоб відобразити мій внесок. Я сподіваюся, що це допомогло.
Clickinaway

Відповіді:


22

Якщо у вас є розширена ліцензія, ви можете знайти Find Identical або Delete Identical .

Обидва можна використовувати для пошуку / видалення функцій, що мають однакові атрибути, або, якщо вказано поле Shape, однакових геометрій.

Якщо у вас немає розширеної ліцензії, ця публікація буде корисною.

Коротше кажучи, ви додаєте два поля для X, Y у свою таблицю атрибутів і запускаєте Dissolve на зазначених полях.

Якщо у вас є багатокутники, які мають один і той же центроїд, але не є геометрично однаковими, ви можете додати ще два поля (периметр та площа). Цього має бути достатньо для виявлення однакових геометрій майже для всіх нормальних випадків. Дивіться коментарі @ whuber нижче.


Це припущення, що дані про точки є правильними? Я подумав над тим, щоб запропонувати створити центроїди спочатку. Він все ще говорить, що існує багато рядків однієї геометрії ... Це майже звучить як класифікація на основі класу / діапазону площ? Але це також говорить про форму геометрії ... саме тому я схилявся до розчинення на основі площі чи периметра (або комбінації двох з них, щоб досягти співвідношення).
Clickinaway

1
Власне, ця посада, яку я пов’язував, була для багатокутників. Ви можете розчинитись на площі та центроїді, за винятком випадків, що у вас є два не ідентичні багатокутники з тим же центроїдом.
Пол

+1 Це точно правильна відповідь. В принципі, центроїд, периметр і площа все ще не можуть однозначно ідентифікувати багатокутник, але зустрічні приклади дещо спроможені. Для переміщення нерегулярних чи природних або вручну оцифрованих об'єктів на унікальні ідентифікатори ці чотири значення повинні бути надійними. Якщо ви хочете отримати деякі більш легко отримані значення, використовуйте координати обмежувального поля функції та його вершину.
whuber

@whuber Чи порівняння координат усіх вершин буде єдиним надійним способом визначення однакової геометрії? Моє передумови в геометрії досить слабке, тому я вважаю це все досить захоплюючим.
Пол

Відповідь на ваше запитання залежить від того, що ви маєте на увазі під «ідентичним»: наприклад, якщо ви вставили нову вершину уздовж краю багатокутника, це «ідентичний» багатокутник чи ні? Можливо, це в сенсі представляти одну і ту ж особливість у світі, хоча вершини відрізняються. З цієї точки зору єдиним впевненим тестом є те, чи (задана теоретична) різниця двох многокутників порожня чи ні. Але якщо ви почнете суворішу думку, що тотожність означає відповідність вершини до вершини, це все ще складно, оскільки один багатокутник може почати свій список вершин в іншій точці.
whuber

1

У мене є набір даних на основі даних опитування. Моя проблема полягає в тому, що старі функції не завжди видаляються перед імпортом нових знімків опитування. Тому у нас є "дублікати" з різною геометрією: IE опитувальні знімки можуть бути на відстані 1/4 футів окремо один від одного. У наборі даних 12000 функцій це важко збільшити масштаб кожного та визначити їх. Використання ArcMap Basic 10.2: ось придумана нами гакітна модель.

  1. Буфер (w / радіус введення) кожної функції в оригінальному шарі (вибрано чи ні)
  2. Ітерація над кожною функцією в буферному шарі
  3. Вибір вихідного шару на основі взаємозв'язку (функція Centroid w / in)
  4. Вибрані функції "кількість рядків"
  5. Поле Обчислити значення числа рядків у буферному шарі = Скільки функцій знаходиться в радіусі оригінальних функцій

Я знову винайшов колесо. Крім того, я розчарувався в конструкторі моделей і, в основному, бульдог все це. Має бути більш елегантне рішення. Я з радістю прийму критику та пропозиції.

Крім того, це здається, що він працює належним чином лише в Model Builder, я запускаю з панелі інструментів, і він не зберігає буферний шар.

Знайдіть дублюючі виконавці


1

Я вже деякий час шукаю відповіді на те саме питання, щоб подолати вирівнювання перекриття полігонів, що перекриваються, і думаю, що знайшов надійне рішення для цього. Насправді @ коментар Whuber,

В принципі, центроїд, периметр і площа все ще не можуть однозначно ідентифікувати багатокутник, але зустрічні приклади дещо спроможені.

відповідь @ Павла була головним рушієм для мене, щоб продовжувати намагатися. Він використовує оператор ARE_IDENTICAL_TO інструменту просторового з'єднання, оскільки це найбільш ефективний серед інших однакових детекторів. Ось такі кроки:

  • Самостійно з'єднайте свої дані, щоб усі форми відрізнялися один від одного;
  • Створіть фіктивне поле, щоб зберегти / скопіювати оригінальні OBJECTID (тобто тип поля OID) рядків, скажімо EX_OID ;
    • Запустіть просторове приєднання на класах функцій, який потрібно обробити як цільовими, так і об'єднаними параметрами функції. Переконайтесь, що попередньо створені попередньо створені відображення полів (-ів) фіктивних полів (полів) мають правило злиття FIRST (що є типовим або виберіть LAST; інші можуть не дати бажаного результату, оскільки вони використовують підсумок перекриттів). На цьому кроці вибирається ОБ'ЄКТИД загальної форми, що сидить поверх усіх перекриттів (тобто ПЕРШИЙ);

Наступні кроки можна виконати двома способами, з Python або БЕЗ:

З ПІТОНУ

  • Використовуйте код нижче, щоб дістати унікальні ідентифікатори, які ми хочемо знайти:

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

Майте на увазі, що я використовую другу копію фіктивного поля OID, яке в моєму випадку є EX_OID_1;

  • Скопіюйте висновок цього коду і вставте його в Ухвалі запит вихідного класу об'єктів переробленого , як OBJECTID IN (<PASTE_COPIED_VALUES_HERE>). Результатом буде показ уніфікованих особливостей деталей, що перекриваються. Тут є обмеження розміру, хоча 30 000 символів. Щоб подолати це питання, потрібно дотримуватися кроків "без пітона".

БЕЗ ПІТОНА

  • Використовуйте інструмент "Частота" для перерахування унікальних значень у другій копії фіктивного поля OID, яке в моєму випадку є EX_OID_1;

  • Нарешті, приєднайтесь до поля OBJECTID початкового класу функцій із виведенням EX_OID_1 інструмента частоти , вибравши параметри "Зберігати лише відповідні записи".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.