12 | Документация

Подтипы

Подтипы ( Subtypes ) - это метод классификации данных, в котором используются подгруппы объектов класса с одинаковыми атрибутами.
Подтипы позволяют:
  • Установить значения по умолчанию для выбранного атрибута, которое будет автоматически присваиваться новому объекту в зависимости от подтипа, к которому он относится;
  • Сгруппировать объекты одного типа по любому признаку без создания отдельных классов объектов, что повышает производительность базы данных;
  • Применить к объектам справочники (домены) кодированных значений для каждого подтипа;
  • Создать правила, регулирующие взаимоотношения между классами объектов на уровне подтипов.
CoGIS Server и CoGIS Portal поддерживают подтипы, заданные на уровне картографического проекта в QGIS.
Настройка подтипов производится путем фильтрации заданных доменов для дочернего поля относительно значения родительского поля.
Дочерних полей может быть несколько. Родительское поле для одного слоя может быть только одно.
Родительское поле должно иметь целочисленный тип: smallint, integer, bigint.
Дочерние поля могут быть целочисленными ( smallint, integer, bigint ), строковыми ( text , char, varchar ) и типа GUID ( uuid ).
Каждому дочернему полю необходимо задать домен со всеми возможными значениями, подходящими для всех подтипов через карту значений (InPlace-домен) или через связанное значение из другого слоя (TableBased-домен).
Пример настройки доменов для дочернего поля приведен на рисунке, см. Рисунок 133 .
Рисунок 133 - Пример настройки доменов для дочернего поля (слева - через карту значений, справа - через связанное значение)
Настройки подтипов задаются через специальные переменные для слоя, см. Таблица 4 .
Таблица 4 - Переменные для настройки подтипов в слое
Переменная
Пример значения
одного/несколько полей
elitegis_subtypes_main_field
Имя родительского поля.
Например,
parent_field
elitegis_subtypes_dependant_fields
Имя/имена дочерних полей.
Несколько полей записываются через точку с запятой.
Например,
child_field
или
child_field1; child_field2
elitegis_subtypes_dependant_fields_default_values
Значения по умолчанию для дочернего поля/полей.
Значения записываются по формуле:
<field_name>:<subtype_codeN>=<childN_domain_code>
Значения разделяются запятыми, записи для нескольких полей разделяются точкой с запятой.
Для одного дочернего поля имя поля не указывается.
Например,
1=101,2=201,3=301
или
child_field1:1=101,2=201,3=301;child_field2:1=st11,2=st21,3=st31;
elitegis_subtypes_dependant_domain_filter
Фильтр значений по умолчанию.
Значения доменов дочерних полей фильтруются в зависимости от выбранного значения родительского поля.
Пример для числового дочернего InPlace-домена:
{code}>({subtype}*100) AND {code}<(({subtype}+1)*100)
Пример для строкового дочернего InPlace-домена:
{code} like concat( 'st',{subtype},'%')
Для TableBased-домена, если таблица домена дочернего поля содержит поле кодов подтипов, указывается имя такого поля.
Например,
parent_field
Для TableBased-домена можно указать фильтр явно.
Например,
parent_field = {subtype}
Фильтры для нескольких дочерних полей записываются с указанием имени поля и разделяются точкой с запятой.
Например,
child_field1:{code}>({subtype}*100) AND {code}<(({subtype}+1)*100); child_field2:{code} like concat( 'st',{subtype},'%')
Значения по умолчанию для текстового поля указываются без кавычек,
пример: 1=st11.
Значения по умолчанию для поля типа GUID указываются в фигурных скобках,
пример: 1={0a2f168e-8b9e-49ed-9a7a-edf8d79b5ee9}.
Для фильтрации дочернего домена можно использовать макросы:
  • {subtype} - значение родительского поля;
  • {code} - значение дочернего поля.
Пример заполнения переменных приведен на рисунке ниже, см. Рисунок 134 .
Рисунок 134 - Пример заполнения переменных для настройки подтипов
Пример готовой карты с объектами, для одного из атрибутов которых заданы подтипы, приведен на рисунке ниже, см. Рисунок 135 . На рисунке показано окно создания нового объекта, в котором автоматически подставляются возможные значения для атрибута SybType исходя из выбранного типа ( Type ) объекта.
Рисунок 135 - Создание нового объекта с учетом группировки объектов по подтипам