Вопрос мы получили по почте на ed@geomedia.com.ua
Добрый день! У меня в работе возникла следующая проблема: Есть 2 класса объектов. Первый класс – объекты, представляющие собой кадастровые кварталы в виде 00:00:00 00 00.Второй класс – объекты, представляющие земельные участки. Имеется аналогичная семантика, в том числе и номер участка, в виде: 0000.Проблема в том, что мне нужно получить на выходе класс объектов, которые бы содержали кадастровые номера вида: 00:00:00 00 00:0000. Я пробовал использовать функцию AGREGATION, но, к сожалению, у меня ни чего не получилось.Может быть вы мне сможете чем то помочь?
Ответ:Смоделируем вашу задачу:
Исходные классы объектов| Parcel (Участки): | ID_P – счетчик (не повторяется)
NumberParcel – номер участка
| | Structure (Кварталы): | ID_S – счетчик (не повторяется)
NumberStruct – номер квартала
|
Общий ход решения: Задача решается с помощью двух шагов: сначала нужно создать динамический класс "Все участки внутри кваратала", затем нужно произвести конкатенацию (склеивание) частей кадастрового номера в этом классе и получить полный кадастровый номер. Мы немного усложнили решение, т.к. полагаться на то, что кадастровые кварталы полностью содержат участки нельзя, и поэтому простраственный запрос Entirely Contained By потерял бы те участки которе случайно (и ничтожно мало) выходят за пределы квартала, и наоборот менее строгий Contains привел бы к тому, что участки соседних кварталов, которые касаются границы или также случайно (и незначительно) пересекают границу квартала, попали бы в результат запроса. Именно поэтому мы вначале создаем динамический класс центроидов участков, который гарантировано расположен внутри квартала.
1. Итак, для получения однозначной ситуации, находим центр участка.
- Analyses → Functional Attributes. На вход подадим площадные участки (Parcel)
 |  | Имя Query – “Parcel Point”
|
2. Для пространственной связи выполним: Analyses → Spatial Intersection, для “Parcel Point” и “Structure”. Данный запрос будет содержать поля участка и квартала
 |  | Имя Query – “Parcel Point and Structure”
| |
3. Получим кадастровые номера участков.
- Analyses → Functional Attributes. Add functional attributes for: - “Parcel Point and Structure”
- В поле Expression: введем “CONCATENATE(':'; Input.NumberStruct;Input.NumberParcel)”
 |  | Имя Query – “Parcel Point COATO”
| |
4. И, наконец, получим площадные участки, которые будут содержать в кадастровый номер. Тут нам пригодятся уникальные идентификаторы, которые, к счастью, не меняются в процессе нашего анализа. С помощью операции Join соединим данные центроидов и исходных участков.
- Analyses → Join
- Left side of join – Parcel
- Right side of join – “Parcel Point COATO”
- Свяжем два объекта по ID_P
Имя Query – “Parcel COATO”
Избавимся от избыточной информации. Нажмите кнопку Attributes… и выберем только необходимые атрибуты
Если вывести подписи, то можно получить такую вот картинку:

|