В этом разделе описывается, как инструменты Соседи полигона и Соседи полигона (Попарно) находят соседей и заполняют выходную таблицу.
Поиск отношений между соседями и вычисление статистики
Соседние отношения определяются следующим образом:
- Перекрывающиеся соседи — полигоны, все или часть областей которых перекрываются.
- Соседи по ребру — полигоны, которые имеют общие или соприкасающиеся границы.
- Соседи по узлу — полигоны, которые соприкасаются в точке (для инструмента Соседи полигона граница либо соприкасается, либо пересекается; для инструмента Соседи по полигону (Попарно) граница соприкасается).
Для инструмента Соседи полигона соседние полигоны определяются с использованием тех же правил для полигонов, что и для инструмента Пересечение.
Для инструмента Соседи полигона (Попарно) соседние полигоны определяются с использованием тех же правил для полигонов, что и для инструмента Попарное пересечение.
Оба инструмента следуют иерархическому пути для определения типа соседа и статистики для записи в выходную таблицу. Соседними отношениями, расположенными в иерархическом порядке от верхнего к нижнему, являются перекрывающиеся соседи, соседи по ребру и соседи по узлу. Как только сосед более высокого порядка найден, инструмент вычисляет и сохраняет информацию о связи, а анализ связей более низкого порядка пропускается. В инструментах используется следующий рабочий процесс:
- Выберите полигон для использования в качестве исходного объекта.
- Найдите все полигоны, которые пересекают исходный полигон (найдите соседей).
- Для первого найденного соседа проанализируйте следующее для исходного полигона:
- Когда соседний полигон является перекрывающимся и включен параметр Включить перекрывающиеся области, выполняется следующее:
- Добавляется поле AREA в выходную таблицу.
- Вычисляется площадь перекрытия.
- Записывается вычисленная площадь для использования в поле AREA выходной таблицы.
- Записывается 0 для использования в поле LENGTH выходной таблицы.
- Записывается 0 для использования в поле NODE_COUNT выходной таблицы.
Анализ пересекающихся соседей завершен.
- Анализируется следующий соседний полигон.
- Когда соседний полигон является соседним по ребру, выполняются следующие действия:
- Вычисляется длина совпадающей границы.
- Записывается вычисленная длина для использования в поле LENGTH выходной таблицы.
- Записывается 0 для использования в поле NODE_COUNT выходной таблицы.
Анализ соседей по ребру завершен.
- Анализируется следующий соседний полигон.
- Когда соседний полигон является соседним по узлу, выполняются следующие действия:
- Найдите количество раз, когда соседний полигон пересекает и касается (для инструмента Соседи по полигону (Попарно) используются только касания) исходного полигона в точке.
- Это число записывается для использования в поле NODE_COUNT выходной таблицы.
- Записывается 0 для использования в поле LENGTH выходной таблицы.
Анализ соседей по узлу завершен.
- Анализируется следующий соседний полигон.
- Когда соседний полигон является перекрывающимся и включен параметр Включить перекрывающиеся области, выполняется следующее:
Как только отношения соседей найдены, инструмент использует значение параметра Отчет по полям, чтобы определить, как отображать отношения соседей и статистику в выходной таблице. Значение параметра Отчет по полям используется для идентификации уникальных полигонов или групп полигонов и составления отчета об их связях с уникальными соседними полигонами или группами полигонов. Полигоны одной и той же группы имеют одинаковый набор значений полей.
Примеры параметра Отчет по полям
В нижеприведенных подразделах описаны примеры использования параметра Отчет по полям:
Использование поля с уникальными значениями для каждого отдельного полигона
Чтобы найти соседей каждого отдельного полигона во входных данных, укажите входное поле, которое имеет уникальное значение для каждого полигона. В этом примере входная таблица из девяти полигонов содержит поле myCode, которое имеет уникальное значение для каждого полигона.

В таблице ниже показан результат использования поля myCode в качестве значения параметра Отчет по полям. Префиксами в именах поля источника и поля соседа являются src_myCode и nbr_myCode.

Использование поля со значениями, определяющими уникальные группы полигонов
Чтобы определить уникальные группы полигонов и сообщить информацию о соседстве по группам, укажите поле, содержащее уникальные значения классификации. Информация о соседстве суммируется на основе отношений уникальных групп. В этом примере уникальные группы полигонов идентифицируются с помощью поля myClass в качестве значения параметра Отчет по полям.

Ниже показан результат использования поля myClass в качестве значения параметра Отчет по полям:
- Для группы A и других полигонов группы A общая длина совпадающих ребер равна 1200, которая получается из шести совпадающих ребер среди полигонов группы A.
Примечание:
Выходная таблица будет содержать только уникальную запись для каждой уникальной комбинации значений исходного и соседнего полигонов, указанных с помощью параметра Отчет по полям. Поскольку группа A используется в качестве источника, а соседняя - в качестве одной из сторон отношения, а обратное отношение - это также группа A в качестве источника и соседа, сумма обеих сторон отношения соседей содержится в одной записи.
- Между группами A и B есть только два ребра, которые совпадают, с общей длиной 200. Это также происходит между группой В и группой А.
- Между группами A и C есть три совпадающих ребра общей длиной 300. То же самое относится и к группам C и A.
- Для группы B с другими полигонами группы B, в отличие от группы A, не было обнаружено отношений соседства, поэтому в выходных данных ничего не сообщается.

Использование нескольких полей с комбинированными значениями, определяющими уникальные группы полигонов
В этом примере значения в поле myZone представляют одну классификацию полигонов, а значения в поле myClass представляют вторую классификацию.

Если два поля, myZone и myClass, заданы в качестве значения параметра Отчет по полям, объединенные значения этих двух полей приведут к следующим уникальным группам полигонов:
- Группа Z1-A
- Группа Z1-C
- Группа Z2-A
- Группа Z2-B
- Группа Z2-C
В выходной таблице, приведенной ниже, показана информация по соседям для этих групп. Первые восемь строк представляют уникальные группы значений Z1, объединенные со значениями в поле myClass, являющимися исходными группами и их соседними группами в Z1 и Z2.
- Исходная группа Z1-A имеет шесть совпадающих ребер внутри группы (аналогично группе 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.

Входные данные с перекрывающимися полигонами и без них
В приведенных ниже примерах подробно показано, как анализируются соседние отношения в иерархическом порядке от верхнего к нижнему при обработке входных данных с перекрытием областей и без него. В примерах используется одно поле для значения параметра Отчет по полям, содержащее уникальные значения для каждого полигона. В каждом примере отмечаются различия между инструментами Соседи полигона и Соседи полигона (Попарно).
Входные данные, не содержащие перекрывающиеся полигоны
Входные данные, используемые в следующих двух случаях, содержат непересекающиеся полигоны.
Параметр Включить область перекрытия не включен
Четыре входных полигона, показанные ниже, не перекрываются. Когда инструмент запущен с отключенным параметром Включить область перекрытия, инструмент будет проверять только наличие соседей по ребру и узлу, в данном порядке. Используя полигон 1 в качестве исходного полигона в качестве примера, можно найти три соседних полигона, и в таблице результатов, приведенной ниже, представлена следующая информация:
- Полигон 2 имеет совпадающее ребро с полигоном 1, поэтому он является соседом по ребру. В поле LENGTH записывается длина совпадающего ребра, равная 100. Анализ соседей по узлу пропущен, и поле NODE_COUNT имеет значение 0. То же самое относится и к полигону 4.
- Полигон 5 не имеет совпадающего ребра с полигоном 1, и поле LENGTH имеет значение 0. Однако полигон 5 касается полигона 1 в одной точке, поэтому он является соседним по узлу с полигоном 1 и имеет значение 1 для поля NODE_COUNT.

Параметр Включить область перекрытия включен
Когда параметр Включить область перекрытия включен, в выходной таблице будет содержаться поле AREA. Все значения поля AREA будут равны 0, так как ни один из полигонов не перекрывается. Анализ соседей по ребру и узлу продолжается, и значения полей LENGTH и NODE_COUNT такие же, как в примере со сравнимым параметром Отчет по полям.
Входные данные, содержащие перекрывающиеся полигоны
Входные данные, используемые в следующих двух случаях, содержат пересекающиеся полигоны.
Параметр Включить область перекрытия не включен
Среди следующих четырех полигонов перекрывающиеся соседи, соседи по ребру и соседи по узлу встречаются только один раз между любыми двумя полигонами. Когда параметр Включить область перекрытия отключен, инструмент будет проверять только наличие соседей по ребру и узлу (в данном порядке), а в выходных данных не будет поля AREA. Используя полигон 1 в качестве исходного полигона в качестве примера, можно найти три соседних полигона, и в таблице результатов, приведенной ниже, представлена следующая информация:
- Оба полигона 2 и 5 имеют совпадающее ребро с полигоном 1, и в поле LENGTH записана длина ребра, равная 20. Анализ соседних узлов пропускается, даже если полигон 2 пересекает полигон 1 в какой-то точке. Поле NODE_COUNT имеет значение 0.
- Полигон 4 имеет совпадающее ребро с полигоном 1, и в поле LENGTH записана длина ребра, равная 100.

Параметр Включить область перекрытия включен
Используя полигон 1 в качестве исходного полигона в качестве примера, можно найти три соседних полигона, и в таблице результатов, приведенной ниже, представлена следующая информация, если параметр Включить область перекрытия включен:
- Полигон 2 перекрывает полигон 1, и в поле AREA записывается площадь перекрытия, равная 1600. Анализ соседних ребер и узлов пропускается, даже если полигон 2 имеет совпадающее ребро с полигоном 1 и пересекает его в точке. Поля LENGTH и NODE_COUNT имеют значение 0.
- Полигон 4 имеет совпадающее ребро с полигоном 1, и в поле LENGTH записана длина ребра, равная 100.
- Полигон 5 имеет совпадающее ребро с полигоном 1, и в поле LENGTH записана длина ребра, равная 20. Анализ соседних узлов пропускается, даже если они касаются полигона 1 в точке (для инструмента Соседи по полигону (Попарно) используются только касания, поэтому ситуация пересечения не рассматривается). Поле NODE_COUNT имеет значение 0.

Входные данные содержат полигоны, которые пересекают другой полигон более одного раза
Во входных данных, используемых в примерах, описанных ниже, перекрывающиеся соседи, соседи по ребру и соседи по узлу встречаются более одного раза между двумя полигонами. Значения в выходных полях - AREA, LENGTH и NODE_COUNT - представляют собой суммы всех случаев в каждом типе соседства.
Параметр Включить область перекрытия не включен
Два полигона, изображенные ниже, перекрываются в двух местах и имеют два совпадающих ребра. Если параметр Включить область перекрытия не включен, инструмент не анализирует перекрытие между двумя объектами. Он находит два совпадающих ребра и записывает в поле LENGTH сумму двух длин совпадающих ребер, равную 40. Анализ соседей по узлу пропущен, поэтому в поле NODE_COUNT записывается значение 0. Это относится к полигону 1, который является исходным полигоном, а полигон 2 - соседним, и наоборот.
Параметр Включить область перекрытия включен
Для тех же двух полигонов, приведенных ниже, если параметр Включить область перекрытия включен, инструмент находит два перекрытия областей и записывает в поле AREA сумму двух областей, равную 800. Анализ соседей по ребру и узлу пропущен, поэтому в поля LENGTH и NODE_COUNT записывается значение 0. Это относится к полигону 1, который является исходным полигоном, а полигон 2 - соседним, и наоборот.

Параметр Включить область перекрытия не включен, и между входными полигонами не существует совпадающих ребер
Для обоих инструментов в этом сценарии совпадающие ребра не найдены, и в поле LENGTH записывается 0. Инструменты продолжают анализ соседей по узлу, инструмент Соседи полигона обнаруживает, что границы пересекаются дважды, в то время как инструмент Соседи полигона (Попарно) не учитывает перекрестные отношения и возвращает пустой результат. Поскольку инструмент Соседи полигона учитывает перекрестные отношения, он записывает в поле NODE_COUNT значение 2. Это относится к полигону 1, который является исходным полигоном, а полигон 2 - соседним, и наоборот, как показано в выходной таблице ниже:

Особые случаи
Входные данные, используемые в следующих двух особых случаях, могут показаться одинаковыми, но они охватывают область по-разному, как описано ниже.
Полигон, закрывающий отверстие другого полигона
В этом случае в полигоне 2 есть отверстие, которое закрывается полигоном 1. Эти два полигона не перекрываются, поэтому анализ на наличие перекрывающихся соседей не требуется. Если полигон 1 является исходным полигоном, а полигон 2 имеет ребро, равное 200, совпадающее с ребром полигона 1, это значение записывается в поле LENGTH. Значение поля NODE_COUNT равно 0. Аналогично, если исходным полигоном является полигон 2, то ребро полигона 1 совпадает с ребром полигона 2 на 200, что приводит к одинаковым значениям в поле LENGTH для каждой записи.

Полигон, полностью перекрывающий другой полигон
В этом случае полигоны 1 и 2 перекрывают друг друга. Вам необходимо включить параметр Включить область перекрытия, чтобы это отношение соседства было обнаружено в анализе. Как для полигона 1, являющегося источником, так и для полигона 2, являющегося соседним, и наоборот, площадь перекрытия, равная 2500, указана в таблице результатов ниже.
