Удалить дубликаты объектов с одинаковой геометрией в ArcMap?

15

Можно ли однозначно идентифицировать каждую геометрию в слое объектов?

По сути, у меня есть полигональный векторный слой со множеством строк данных, представленных одной и той же геометрией. Я хотел бы 1 ряд для каждой уникальной геометрии. Поэтому я ищу какую-то готовую методологию для объединения атрибутов на основе формы геометрии.

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

Дилан Хеттингер
источник
Итак, вы говорите, что существует несколько записей одинаковой геометрии, и вы хотите объединить те, которые идентичны? Если это так ... вы могли бы просто распустить на основе площади или что-то в этом роде? Может быть, я скучаю по твоему вопросу здесь.
Clickinaway
Это верно, это идентичные геометрии, где единственный общий естественный атрибут - это сама геометрия. Площадь может работать, но нет гарантии, что две разные геометрии не имеют одинаковую площадь.
Дилан Хеттингер
Смотрите мой пост. Вы можете запустить растворение на нескольких полях.
Пол
@ Пол .... Я вижу, вы отредактировали свой ответ, чтобы отразить мой вклад. Я надеюсь, что это помогло.
Clickinaway

Ответы:

22

Если у вас есть расширенная лицензия, вы можете использовать Найти идентичный или Удалить идентичный .

Оба могут быть использованы для поиска / удаления объектов, имеющих одинаковые атрибуты, или, если указано поле «Форма», идентичных геометрий.

Если у вас нет расширенной лицензии, этот пост будет полезен.

Короче говоря, вы добавляете два поля для X, Y в свою таблицу атрибутов и запускаете Dissolve для указанных полей.

Если у вас есть многоугольники, которые имеют один и тот же центроид, но не являются геометрически идентичными, вы можете добавить два других поля (Периметр и Площадь). Этого должно быть достаточно для идентификации идентичных геометрий почти во всех обычных случаях. Смотрите комментарии @ whuber ниже.

Павел
источник
Это предполагает точные данные точки? Я думал о предложении сначала создать центроиды. Он все еще говорит, что есть много рядов с одной и той же геометрией ... Это похоже на классификацию, основанную на классе / диапазоне площадей? Но это также говорит о форме геометрии ... вот почему я склонялся к растворению в зависимости от площади или периметра (или комбинации двух из них для достижения соотношения).
Clickinaway
1
На самом деле, этот пост, на который я ссылался, был для полигонов. Вы можете раствориться в области и центроиде, если у вас есть два неидентичных полигона с одним и тем же центроидом.
Пол
+1 Это точно правильный ответ. В принципе, центроид, периметр и область могут все еще не однозначно идентифицировать многоугольник, но контрпримеры немного надуманы. Для хеширования нерегулярных или натуральных или вручную оцифрованных объектов с уникальными идентификаторами эти четыре значения должны быть надежными. Если вы хотите получить более легко получаемые значения, используйте координаты ограничительной рамки объекта и количество его вершин.
whuber
@whuber Будет ли сравнение координат всех вершин единственным надежным способом определения идентичной геометрии? Мои знания в области геометрии довольно слабые, поэтому я нахожу все это довольно увлекательным.
Пол
Ответ на ваш вопрос зависит от того, что вы подразумеваете под «идентичным»: например, если вы должны были вставить новую вершину вдоль края многоугольника, это «идентичный» многоугольник или нет? Возможно, это в том смысле, что представляет одну и ту же особенность в мире, хотя вершины различаются. С этой точки зрения, единственный надежный критерий состоит в том, является ли различие (теоретическая) двух полигонов пустым или нет. Но если вы придерживаетесь более строгого представления, что идентичность означает совпадение вершин с вершинами, это все равно сложно, поскольку один многоугольник может начать свой список вершин в другой точке.
whuber
1

У меня есть набор данных на основе данных опроса. Моя проблема в том, что старые функции не всегда удаляются до импорта новых снимков. Поэтому у нас есть «дубликаты» с разной геометрией: т.е. снимки съемки могут быть на расстоянии 1/4 фута друг от друга. В наборе классов объектов 12000 сложно найти каждый из них и идентифицировать их. Использование ArcMap Basic 10.2: вот хакерская модель, которую я придумал.

  1. Буфер (с входным радиусом) каждого объекта в исходном слое (выбранный или нет)
  2. Итерировать по каждому объекту в буферном слое
  3. Выберите из исходного слоя на основе отношений (Centroid с функцией)
  4. «Количество строк» ​​выбранных функций
  5. Поле Рассчитать значение количества строк в буферном слое = Сколько объектов находится в радиусе от исходных объектов

Я заново изобрел колесо. Кроме того, я расстроился из-за Моделестроителя и, в общем-то, разбросал все это. Должно быть более элегантное решение. Я с удовольствием приму критику и предложения.

Кроме того, кажется, что это работает правильно только из Model Builder, я запускаю из панели инструментов, и это не сохраняет буферный слой.

Найти дубликаты

Баррет
источник
1

В течение некоторого времени я искал ответ на тот же вопрос, чтобы преодолеть уплощение проблемы перекрывающихся буферных полигонов, и думаю, что нашел надежное решение для этого. На самом деле @ комментарий Уубер,

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

Ответ @ Paul был для меня главным стимулом продолжать попытки. Он использует оператор ARE_IDENTICAL_TO инструмента Spatial Join, поскольку он является наиболее эффективным среди других идентичных детекторов. Вот шаги:

  • Self Объедините ваш вклад, чтобы все формы отличались друг от друга;
  • Создайте фиктивное поле для хранения / копирования оригинальных OBJECTID (т. Е. Типа поля OID) строк, скажем, EX_OID ;
    • Запустите Spatial Join для класса объектов, который требуется обработать как параметры объекта назначения и объекта соединения. Убедитесь, что сопоставления полей фиктивных полей (полей) (появляются дважды), ранее созданных, имеют правило слияния 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>). В результате вы увидите унифицированные возможности перекрывающихся частей. Здесь есть ограничение по размеру, 30000 символов. Чтобы преодолеть эту проблему, вам нужно выполнить шаги «без питона».

БЕЗ ПИТОНА

  • Используйте инструмент «Частота» для отображения уникальных значений во второй копии фиктивного поля OID, в моем случае это EX_OID_1;

  • Наконец, объедините поле OBJECTID исходного класса пространственных объектов с выводом EX_OID_1 инструмента Частота , выбрав параметры «Сохранить только совпадающие записи».

fatih_dur
источник