Удалить только дырки от пончиков из полигонов с помощью ArcGIS Desktop?

15

Я использую ArcGIS Desktop 10.0.

У меня есть хитрость для удаления отверстий для пончиков: преобразование многоугольника в линию, а затем создание многоугольника из линий и, в конце концов, объединение их всех. Недостаток этой стратегии заключается в том, что она удаляет другие дыры и пустые области, которые на самом деле пусты и должны оставаться пустыми. Смотрите изображение ниже:

введите описание изображения здесь

Сыпь
источник
3
Я проголосовал за сохранение этого вопроса открытым, потому что я считаю, что ФП пытается удалить некоторые, но не все пончики. Он ищет способ сохранить некоторые из них.
Фезтер
Благодарность! Я добавил изображение, надеюсь, что все прояснит. Я не могу пойти дальше и удалить большие области, прежде чем объединить все вместе, потому что я могу случайно удалить основные полигоны (сам зеленый).
Араш
1
Очень похоже на Как удалить маленькие полигоны «соль и перец» из слоя? , но с использованием процесса QGIS. Возможно, вы могли бы работать с очень похожими процессами в ArcGIS.
RyanKDalton
Только размер порога, выше которого отверстия не должны быть заполнены, предотвращает дублирование заполнения полигонов пончиков с помощью ArcGIS for Desktop?
PolyGeo

Ответы:

23

Я бы попробовал инструмент Union с NO_GAPS:

NO_GAPS - будет создана функция для областей на выходе, которые полностью заключены в многоугольники. Эта функция будет иметь пустые атрибуты.

Затем вы можете выбрать объекты с пустыми атрибутами ниже порогового размера и рассчитать их атрибуты, чтобы они были такими же, как у исходного многоугольника, или скопировать / вставить их в окне атрибутов редактора.

Объекты с пустыми атрибутами выше порогового размера должны быть удалены.

Оттуда инструмент Dissolve должен завершить работу.

PolyGeo
источник
1
Как вы «рассчитываете [новый пончик поли], чтобы быть таким же, как исходный [содержащий] многоугольник»? Они не имеют общих значений атрибутов, поэтому не могут быть объединены. Как Island poly C знает, что он должен получить свои новые значения атрибутов из (содержащие) Lake poly A и игнорировать (где-то еще) Lake poly B?
Matt Wilkie
Я не делал недавний тест, но «новый пончик поли» - это «оригинальный [содержащий] многоугольник». Если имеется несколько таких многоугольников пончиков, которые нужно обработать в большом количестве, тогда необходимо пометить маленькие отверстия кольцом многоугольника, в который они попадают.
PolyGeo
7

Решение PolyGeo - это то, что я использовал сам и работает хорошо (+1). Другая альтернатива - это накапливать полигоны на небольшое количество, а затем снимать с буфера результат на то же количество (скажем, + 1 м, а затем -1 м). Это также хорошо работает, но сопряжено с небольшим риском случайного объединения полигонов, которые соседствуют с тем же количеством, что и ваш буфер. Это также может увеличить количество ваших вершин (что может быть или не быть проблемой).

Вы также можете написать скрипт для надежного решения, перебирая каждый полигон, создавая временные полигоны на основе внутренних колец и проверяя их на предмет их областей. Если они ниже вашего порога, вы удалите это внутреннее кольцо из геометрии и обновите свой ряд. Это решение больше работает, чем решение PolyGeo или мой буферный взлом выше, но, возможно, является «более чистым» подходом.

MappaGnosis
источник
5

В ArcToolbox вы можете использовать инструмент «Удаление части полигона» (Инструменты управления данными -> Обобщение). Вы можете указать минимальную площадь отверстия / процент для удаления.

Кадир Шахбаз
источник
1
Для этой функции требуется уровень лицензии Advanced / ArcInfo.
Мартин,
Я попробовал инструмент «Устранить полигон» в ArcGIS Pro 2.0. Но это никак не повлияло на функцию полигона, которую я тестировал. У этой функции было несколько внутренних колец, и я хочу, чтобы они исчезли. Этот инструмент работает, только если элемент состоит из многочастной геометрии?
Майк Финч
Не только". Он работает с одиночными полигонами с отверстиями.
Кадир Шахбаз
4

Вот еще один способ удалить озера из полигонов (например, слой карты с почтовым индексом из Navteq). Это также полезно для очистки слоев карты территории, созданных путем растворения слоя карты почтового индекса кодом территории.

  1. Используйте геообработку «Объединение» на слое карты многоугольника и снимите флажок «Разрывы разрешены» (который установлен по умолчанию). Это создает многоугольники для всех «кольцевых» отверстий в многоугольниках.
  2. В полученном слое карты объединения добавьте поля для идентификаторов, X и Y. Идентификатор должен быть отделен от имени / идентификатора полигонов, имеющих отверстия для пончиков, которые вы хотите удалить.
  3. В таблице атрибутов используйте Калькулятор поля для вычисления идентификатора из поля ObjectID и используйте «Вычислить геометрию», чтобы заполнить значения X и Y.
  4. Отделите кольцевые многоугольники от других многоугольников, выбрав (Выбрать по атрибутам) те, у которых поле имени равно нулю.
  5. Экспорт выбранных записей в новую таблицу. (раскрывающийся список параметров таблицы -> Экспорт ...)
  6. Используйте опцию «Добавить XY», чтобы создать слой событий. (щелкните правой кнопкой мыши слой -> Показать данные XY ....
  7. Экспортируйте слой событий в новый класс пространственных объектов. (щелкните правой кнопкой мыши слой -> Данные -> Экспорт данных)
  8. Создайте пространственное соединение между новым точечным слоем и слоем ОРИГИНАЛЬНОЙ карты многоугольников, который не имеет кольцевых многоугольников. Используйте параметр «ближайший», чтобы имя окружающего многоугольника добавлялось в таблицу атрибутов кольцевых многоугольников.
  9. Используйте стандартное соединение таблиц между объединенным точечным слоем и получающимся слоем карты из объединения (на основе поля идентификатора). (щелкните правой кнопкой мыши слой -> Соединения и взаимосвязи -> Объединить -> Объединить данные из другого слоя на основе пространственного расположения)
  10. Используйте Калькулятор поля в таблице атрибутов, чтобы вычислить имена пустых многоугольников из слоя соединенных точек.
  11. Запустите геообработку «Растворение» на основе имени многоугольника, чтобы объединить многоугольники пончика с более крупным именованным многоугольником.

Обратите внимание, что это не решит проблему рек, врезанных в контур многоугольника, но улучшит исходный слой карты, удалив внутренние отверстия для пончиков.

Сьюзен
источник
3

Если многоугольники в классе пространственных объектов содержат другие многоугольники в том же классе пространственных объектов (например, Лесото внутри Южной Африки) и если вам необходимо исключить ручное редактирование в пользу ModelBuilder и т. Д., То использование «Устранить часть многоугольника» является самым быстрым решением. Настройки инструмента:

- «Условие (необязательно)» = ОБЛАСТЬ - «Площадь (необязательно)» = очень большое число (скажем, 1e + 100) - «Удалить только содержащиеся части (необязательно)» = [проверено]

Это даст Южную Африку с заполненной областью Лесото, что необходимо для рабочих процессов, таких как вывод вершин для использования в визуалах Polygon в Таблице.

цыпленок
источник
0

Так как он не был упомянут до сих пор и, кажется, является правильным инструментом для именно того, чего вы пытаетесь достичь: Aggregate Polygons

Установите минимальный размер_узла равным минимальному размеру многоугольного отверстия, которое вы хотите сохранить. Меньшие из них будут устранены.

Необязательное значение Minimum_area в том же инструменте делает то же самое для частей многоугольника, которые не являются отверстиями.

ZZZ
источник