Подсчет и растеризация перекрытий полигонов в ArcGIS Desktop?


17

Как взять векторный слой с перекрывающимися полигонами и превратить его в растр, где каждая ячейка считает количество полигонов, содержащих эту ячейку?

Мы смотрим на полигоны областей горения огня в период с 1976 по 2000 год и хотим узнать, сколько пожаров будет содержаться в каждой растровой ячейке.

Ответы:


22

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

  1. UnionGeoprocessingменю) разбивает многоугольники на их части.

    К сожалению, каждое перекрытие дублируется в выходных данных: у него есть одна идентичная копия для каждого исходного полигона, покрывающего его. Следовательно

  2. Dissolve(снова в Geoprocessingменю) объединит перекрывающиеся части, при условии, что вы сможете найти способ их уникальной идентификации. Прочитайте диалог: ближе к концу у вас будет возможность вычислить «статистику». Выберите любое поле, которое, возможно, идентифицировало исходные полигоны, и запросите счет.

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

    Результирующий слой имеет одну особенность для каждого перекрытия полигонов и какое-то поле «считать», считающее количество перекрытий.

  3. Преобразуйте это в растр, используя поле «count» для атрибутов.


Например, вот некоторые перекрывающиеся полигоны и их идентификаторы с показанной таблицей атрибутов:

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

После второго шага у нас есть одна запись для каждой перекрывающейся области вместе со счетчиком, который уже можно использовать для обозначения величины перекрытия:

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

Остальное просто - и это всего лишь одна операция растеризации.


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

@ccn Если имеется больше полигонов, чем может обработать ArcGIS, разбейте набор данных на части, которые он может обработать. Результатом будет несколько растров - но не тысячи или миллионы из них - которые затем просто суммировать. Другое преимущество использования Unionзаключается в том, что при почти одинаковом рабочем процессе он может разрешить ситуацию, когда полигоны находятся в нескольких наборах данных (что обычно является плохим дизайном базы данных, но, к сожалению, распространенным): просто объединяются все входные наборы данных одновременно.
whuber

@ccn (Продолжение) Суть, которую вы затронули, сводится к следующему: когда лучше растеризовать полигоны и использовать растровые операции для их объединения по сравнению с использованием векторных операций ( union) с последующей растеризацией? Векторные операции прекратятся, когда объекты будут оцифрованы с большим количеством деталей, чем необходимо, наделив их слишком большим количеством вершин. В этих экстремальных условиях растровый подход мог бы быть лучше (хотя первое упрощение многоугольников могло бы быть лучшим вариантом). Однако во всех других ситуациях растеризация каждого многоугольника в отдельности является огромной тратой компьютерного и человеческого времени.
whuber

1
+1 для векторного решения. Чтобы представить вещи в перспективе, данные периметра записи никогда не бывают очень большими. Например, весь набор данных периметра горения MTBS (США, включая Аляску) за 1984 - 2010 гг. Содержит ~ 19000 полигонов. Либо векторный, либо растровый подход будет работать просто отлично.
Аарон

@ Аарон Спасибо за перспективу. Для одновременной работы в США с любым разумным разрешением (например, 100 м) вам понадобится, скажем, растр из 50000 столбцов и 30000 строк, содержащих 1 500 000 000 ячеек. Создание 19 000 таких растров - даже с учетом встроенного сжатия - и последующее выполнение 19 000 * 1500000000 = около 30000 миллиардов сложений - потребует довольно много времени! Если вместо этого каждый полигон использует, скажем, 100 вершин (что очень детально), объединение включает 1 900 000 вершин и является операцией O (n log (n)); в принципе (но не в ArcGIS :-), который занимает менее 1 секунды.
whuber

1

В следующем посте есть несколько похожий вопрос, который вы могли бы найти связанное решение: Создание растровой поверхности перекрытий из шейп-файлов векторного полигона? ,

Для этого быстродействующего и простого в вычислительном отношении растрового подхода вам необходимо (1) разделить перекрывающиеся полигоны на отдельные слои (предположительно по годам для пожарных полигонов), используя Select By Attributes в ModelBuilder с итератором или инструментом сценария, (2) преобразовать каждый Полигон в растр с назначением ячейки MAXIMUM_COMBINED_AREA (обеспечение того же размера ячейки , растров привязки и того, что экстент остается тем же, что и весь набор полигонов) - с использованием постоянного значения поля (например, используйте поле года или строки, которые имеют все 1) для преобразования (снова используйте ModelBuilder с итератором или скриптом Python для автоматизации), а затем (3) примените следующий инструмент Spatial Analyst: Статистика ячеек - используйте статистический тип VARIETY, если каждый растр имеет уникальное значение, такое как год или SUM, если значения всех ячеек растра равны 1 с - обязательно установите флажок, чтобы игнорировать NoData.

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


(Пожалуйста, смотрите мой комментарий к ответу Аарона .)
whuber
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.