Рассказывается, как инструмент геообработки ArcGIS Соседние полигоны (Polygon Neighbors) находит соседей и заполняет выходную таблицу.
Подробное описание процесса поиска соседских отношений и расчета статистика.
Соседские отношения можно определить следующим образом:
- Перекрывающиеся соседи — полигоны, у которых все или некоторые части перекрываются
- Соприкасающиеся соседи — полигоны, имеющие общую границу или соприкасающиеся границами
- Соседи по узлу — полигоны, соприкасающиеся в точке (граница касается или пересекается)
Соседние полигоны ищутся по тем же правилам, что используются для полигонов в инструменте Пересечение (Intersect).
Примечание:
Дальнейший рассказ подразумевает использование диалогового окна инструмента. Синтаксис скрипта см. в документации к инструменту Соседние полигоны (Polygon Neighbors).
Инструмент Соседние полигоны (Polygon Neighbors) руководствуется иерархией в ходе определения типа соседа и статистики, записываемой в выходную таблицу. Соседские отношения в иерархическом порядке, сверху вниз, следующие: перекрывающиеся соседи, соприкасающиеся соседи и соседи по узлу. Когда находится сосед, стоящий выше в иерархии, инструмент рассчитывает и сохраняет информацию о нем, а анализ соседских отношений более низкого порядка, не производится. Детально этот процесс выглядит так:
- Выбирается полигон для использования в качестве исходного объекта.
- Производится поиск всех полигонов, которые пересекают исходный полигон (поиск соседей).
- Производится анализ первого найденного соседа исходного полигона:
- Если соседний полигон является перекрывающим соседом, а опция Включить перекрытия областей (Include area overlaps) отмечена флажком
- Поле AREA добавляется в выходную таблицу.
- Вычисляется площадь перекрытия.
- Вычисленная площадь заносится в поле AREA выходной таблицы для последующего использования.
- В поле LENGTH выходной таблицы записывается значение 0.
- В поле NODE_COUNT выходной таблицы записывается значение 0.
- Анализ перекрывающего соседа завершен. Анализируется следующий соседний полигон.
- Если соседний полигон является соприкасающимся
- Вычисляется длина совпадающей границы.
- Вычисленная длина записывается в поле LENGTH.
- В поле NODE_COUNT записывается значение 0.
- Анализ соприкасающегося соседа завершен. Анализируется следующий соседний полигон.
- Если соседний полигон является соседом по узлу
- Производится поиск, сколько раз соседний полигон пересекает или касается исходного полигона в точке.
- Обнаруженное количество заносится в поле NODE_COUNT.
- В поле LENGTH записывается значение 0.
- Анализ соседа по узлу завершен. Анализируется следующий соседний полигон.
- Если соседний полигон является перекрывающим соседом, а опция Включить перекрытия областей (Include area overlaps) отмечена флажком
Примеры описанного выше процесса см. далее.
После того как соседские отношения выявлены, как это было описано выше, инструмент использует Поля для отчета (Report By Field(s)), чтобы определить, как составить отчет о соседских отношениях и отобразить статистику в выходной таблице. Параметр Поля для отчета (Report By Field(s)) используется для идентификации уникальных полигонов или групп полигонов и составлении отчета об их связях с соседними полигонами. Полигоны из одной группы имеют одинаковый набор значений полей.
Поля для отчета (Report By Field(s)): пример 1 — Использование поля с уникальными значениями для каждого отдельного полигона
Когда нужно найти соседей каждого отдельного полигона во входных данных, укажите входное поле, имеющее уникальное значение для каждого полигона. В этом примере входная таблица девяти полигонов имеет поле myCode, содержащее уникальное значение для каждого отдельного полигона.
В таблице ниже показан результат использования поля myCode в качестве значения параметра Поля для отчета (Report By Field(s)). Обратите внимание на приставки в названиях полей источника и соседа: src_myCode и nbr_myCode.
Поля для отчета (Report By Field(s)): пример 2 — Использование поля со значениями, определяющими уникальные группы полигонов
Когда необходимо идентифицировать уникальные группы полигонов и составить отчет о соседских отношениях по группам, можно указать поле, содержащее уникальные значения классификации. Информация о соседях суммируется на основе того, как связаны уникальные группы. В этом примере уникальные группы полигонов идентифицируются с помощью входного поля myClass в качестве значения параметра Поля для отчета (Report By Field(s)).
Ниже приведены результаты использования поля myClass в качестве щначения параметра Поля для отчета (Report By Field(s)):
- Что касается внутренних связей полигонов группы А, общая длина совместных границ составляет 1200 и складывается из шести совместных границ между полигонами в группе А.
Примечание:
Выходная таблица будет содержать только уникальную запись для каждой уникальной комбинации значений полей исходного и соседнего полигонов, указанных в параметре Поля для отчета (Report By Field(s)). Поскольку группа А выступает с одной стороны как источник, а с другой стороны — как сосед, все связи содержатся в одной записи
- Между группой А и группой Б существует только два совпадающих ребра, длина которых имеет значение 200. То же самое можно сказать об отношениях между группой Б и группой А.
- Между группой А и группой С существует только три совпадающих ребра, длина которых имеет значение 300. То же самое можно сказать об отношениях между группой С и группой А.
- Между полигонами внутри группы B, в отличие от группы А, соседских отношений нет, поэтому в выходную таблицу ничего не заносится.
Поля для отчета (Report By Field(s)): пример 3 — Использование нескольких полей с комбинированными значениями, определяющими уникальные группы полигонов
В этом примере значения в поле myZone представляют одну классификацию полигонов, а значения в поле myClass — другую.
При указании двух полей, myZone и myClass в качестве значения параметра Поля для отчета (Report By Field(s)), комбинированные значения двух полей приведут к следующим уникальным группам полигонов:
- Группа Z1-A
- Группа Z1-C
- Группа Z2-A
- Группа Z2-B
- Группа Z2-C
Приведенная ниже выходная таблица показывает информацию о соседских отношениях между вышеперечисленными группами. Первые восемь строк представляют значения уникальных групп Z1, комбинированные со значениями в поле myClass, будучи исходными группами и соседями в Z1 и Z2. В частности:
- Внутри исходной группы Z1-A имеется шесть совместных ребер (как и у группы А в предыдущем примере), общая длина совместных ребер составляет 600.
- Исходная группа Z1-A является соприкасающимся соседом с соседней группой Z1-C, общая длина совместных ребер составляет 200.
- Исходная группа Z1-A является соприкасающимся соседом с соседней группой Z2-A, общая длина совместных ребер составляет 300.
- Исходная группа Z1-A не является соприкасающимся соседом с соседней группой Z1-B, но граница соседней группы Z1-B касается в узле исходную группу Z1-A, поэтому она является соседом по узлу. Поэтому значение для LENGTH равно 0, а для NODE_COUNT — 1.
- Используя те же принципы, можно интерпретировать оставшуюся информацию.
Запуск инструмента Соседние полигоны (PolygonNeighbors) для входных данных, имеющих и не имеющих перекрывающиеся полигоны
Следующие примеры подробно показывают, как происходит анализ соседских отношений в иерархическом порядке, сверху вниз, когда инструмент запускается для входных данных, имеющих и не имеющих перекрывающиеся области. Все приведенные ниже примеры используют единственное поле в качестве значения параметра Поля для отчета (Report By Field(s)), которое содержит уникальные значения для каждого полигона.
Пример 1 — Входные данные, содержащие не перекрывающиеся полигоны
Входные данные, использующиеся в следующих двух случаях, содержат не перекрывающиеся полигоны.
а. Опция Включить перекрытия областей (Include area overlap) не активирована (по умолчанию)
Четыре исходных полигона, показанные ниже, не перекрываются. Когда инструмент запускается с не активированной опцией Включить перекрытия областей (Include area overlap), он будет искать только соприкасающихся соседей и соседей по узлу, именно в таком порядке. Используя для примера полигон 1 в качестве исходного, инструмент находит три соседних полигона и заносит в выходную таблицу следующую информацию:
- Полигон 2 имеет совместное ребро с полигоном 1, следовательно, он является соприкасающимся соседом. Длина совместного ребра (100) заносится в поле LENGTH. Анализ соседей по узлу не производится, и полю NODE_COUNT присваивается значение 0. То же самое делается и для полигона 4.
- Полигон 5 не имеет соприкасающихся ребер с полигоном 1, полю LENGTH присваивается значение 0. Однако полигон 5 касается полигона 1 в одной точке, следовательно он сосед по узлу с полигоном 1, и в поле NODE_COUNT заносится значение 1.
б. Опция Включить перекрытия областей (Include area overlap) активирована
В этом случае выходная таблица будет содержать поле AREA. Все значения поля AREA будут равны 0, поскольку ни один из полигонов не перекрывается. Анализ соприкасающихся соседей и соседей по узлу продолжается. Результаты в полях LENGTH и NODE_COUNT будут те же, что мы получили в примере 1-а выше.
Пример 2 — Входные данные, содержащие перекрывающиеся полигоны
Входные данные, использующиеся в следующих двух случаях, содержат перекрывающиеся полигоны.
а. Опция Включить перекрытия областей (Include area overlap) не активирована (по умолчанию)
Среди следующих четырех полигонов перекрывающиеся соседи, соприкасающиеся соседи или соседи по узлу встречаются всего лишь раз между любыми двумя полигонами. Инструмент ищет только соприкасающихся соседей и соседей по узлу, именно в таком порядке, а выходные данные не содержат поля AREA. Используя для примера полигон 1 в качестве исходного, инструмент находит три соседних полигона и заносит в выходную таблицу следующую информацию:
- Каждый из полигонов 2 и 5 имеет совместное ребро с полигоном 1. Длина совместного ребра (20) заносится в поле LENGTH. Анализ соседей по узлу не производится, хотя полигон 2 пересекает полигон 1 в точке. Полю NODE_COUNT присваивается значение 0.
- Полигон 4 имеет совместное ребро с полигоном 1. Длина совместного ребра (100) заносится в поле LENGTH.
б. Опция Включить перекрытия областей (Include area overlap) активирована
Используя для примера полигон 1 в качестве исходного, инструмент находит три соседних полигона и заносит в выходную таблицу следующую информацию:
- Полигон 2 перекрывает полигон 1. Площадь перекрытия (1600) записывается в поле AREA. Анализ соприкасающихся соседей и соседей по узлу не производится, хотя полигон 2 имеет совместное ребро с полигоном 1 и пересекает его в точке. Поэтому значение для LENGTH и NODE_COUNT равно 0.
- Полигон 4 имеет совместное ребро с полигоном 1. Длина совместного ребра (100) заносится в поле LENGTH.
- Полигон 5 имеет совместное ребро с полигоном 1. Длина совместного ребра (20) заносится в поле LENGTH. Анализ соседей по узлу не производится, хотя он пересекает полигон 1 в точке. Полю NODE_COUNT присваивается значение 0.
Пример 3 — Входные данные, содержащие полигоны, которые пересекают другой полигон более одного раза
Во входных данных, использующихся в следующих примерах, перекрывающиеся соседи, соприкасающиеся соседи или соседи по узлу встречаются между двумя полигонами чаще одного раза. Значения в выходных полях — AREA, LENGTH и NODE_COUNT — являются результатом суммирования всех случаев каждого типа соседских отношений.
а. Опция Включить перекрытия областей (Include area overlap) не активирована (по умолчанию)
Два нижеприведенных полигона перекрываются в двух местах и имеют два совместных ребра. Инструмент не анализирует перекрытие между двумя объектами. Он находит два совместных ребра и записывает их суммарную длину (40) в поле LENGTH. Анализ соседей по узлу не производится, и полю NODE_COUNT присваивается значение 0. Тоже самое делается для полигона 1, выступающего исходным, и полигона 2, выступающего соседним, и наоборот.
б. Опция Включить перекрытия областей (Include area overlap) активирована
Для тех же самых двух полигонов, приведенных ниже, инструмент находит два перекрытия и записывает сумму двух площадей (800) в поле AREA. Анализ соприкасающихся соседей и соседей по узлу не производится. Поэтому значение для LENGTH и NODE_COUNT равно 0. Тоже самое делается для полигона 1, выступающего исходным, и полигона 2, выступающего соседним, и наоборот.
в. Опция Включить перекрытия областей (Include area overlap) не активирована (по умолчанию), а у входных полигонов нет совместных ребер
Инструмент не находит совместных ребер и заносит в поле LENGTH значение 0. Он переходит к анализу соседей по узлу и находит, что границы дважды пересекаются. Поэтому он заносит значение 2 в поле NODE_COUNT. Тоже самое делается для полигона 1, выступающего исходным, и полигона 2, выступающего соседним, и наоборот, как показано в выходной таблице ниже:
Пример 4 — Особые случаи
Входные данные, использующиеся в следующих двух случаях, могут показаться такими же, но они по-другому покрывают область, как будет объяснено ниже.
а. Полигон покрывает пробел другого полигона
В этом случае полигон 2 имеет пробел, покрытый полигоном 1. Обратите внимание, что полигоны не перекрываются, поэтому анализ перекрывающихся соседей не нужен. Когда полигон 1 является исходным полигоном, а полигон 2 имеет с ним совместное ребро длиной 200, это значение будет занесено в поле LENGTH. Поле NODE_COUNT имеет значение 0. Аналогично, когда полигон 2 является исходным полигоном, а полигон 1 имеет с ним совместное ребро длиной 200, те же самые значения будут занесены в поле LENGTH для каждой записи.
б. Полигон полностью перекрывает другой полигон
В этом случае полигоны 1 и 2 перекрывают друг друга. Необходимо активировать опцию Включить перекрытия областей (Include area overlap), чтобы в ходе анализа производился поиск этого типа соседских отношений. Когда полигон 1 выступает исходным, а полигон 2 — соседним, и наоборот, площадь перекрытия составляет 2500, это значение заносится в выходную таблицу, приведенную ниже.