ПРИМЕР ИСПОЛЬЗОВАНИЯ ДИНАМИЧЕСКИХ СПОСОБНОСТЕЙ ГИС GEOMEDIAПодписи дорог Многие организации, которые работают с ГИС, сталкиваются с проблемой местоположения некоторых объектов, например, подписей улиц, дорог, населенных пунктов и т.д. Решение этой проблемы отнюдь не простое. Этой же проблемой занимались и мы, используя продукт GeoMedia. Хочется отметить, что данная задача затронула один из интересных и мощных механизмов GeoMedia – Функциональные Атрибуты. Функциональные Атрибуты - это атрибуты (колонки) динамически вычисляемые и добавляемые на лету к исходной табличной структуре объекта географической базы данных. Эта методика также использует фундаментальные свойства GeoMedia-архитектуры – динамику и механизмы пайпов (Pipes). Практически, это означает возможность построения динамических запросов (а точнее – процессных блоков), которые связаны между собой и результат выполнения какого-либо процессного блока, передается в следующий, далее в следующий и так по цепочке... Это позволяет создать динамические цепочки обработки геоданных, которые, будучи созданными, работают самостоятельно. Это очень интересный подход, коренным образом отличающийся от более-менее традиционного мышления ГИС-специалистов.
Да, в программном продукте GeoMedia есть возможность вывода подписей автоматически, но в таком случае GeoMedia подпишет все указанные объекты по одному правилу. Не совсем удобно, что GeoMedia ориентируется относительно центра объекта или оси линии. Чтобы избежать этого, можно создать отдельный объект подписи (текстовый объект типа Label) и передвинуть в нужное местоположение, но тогда данная подпись теряет связь с подписываемым объектом и не будет обновляться автоматически, например, при переименовании названия улицы, т.е. не будет динамики. Это типичный подход людей работающих в принципах издательских систем. Данный вариант возможен, но неудобен для длительной эксплуатации, так как постоянно необходимо следить за достоверностью не только данных, но и их отображения.
По этой причине, в данной статье мы опишем динамический способ работы в GeoMedia на примере построения подписей дорог. Конечно же, данный метод применим не только для подписей.
Построение подписей дорог, это отнюдь не тривиальная задача, которую можно решить, создав один запрос. В нашей базе данных, номера дорог хранятся в одну строку, разделенные запятой (E-85,Р-04,M-19).

Кроме того мы хотели бы достичь отображения номера дороги приблизительно как на приведенном ниже рисунке.
Задача: вывести условный знак подписи дороги, аналогичные традиционному отображению, в месте, указанном пользователем. |  |
Для фиксации местоположения подписи мы создали точечный класс объектов L17T, который содержит флаг уровня отображения подписи в специальном атрибуте, т.е. если необходимо вывести условный знак с подписью «E-...», то L17T должен содержать флаг равный «1»; с подписью «Р-...» – флаг «2» ; с подписью «M-...» – флаг «3». Поставив данный объект (точку) с флагом на сегмент, который имеет информацию о номере дороги, GeoMedia динамически, за долю секунды, построит условный знак подписи дороги. Этот условный знак будет и нужного цвета и с соответствующим содержимым и , естественно, будет автоматически ориентирован.
Итак, рассмотрим пример того, как выполнить поставленную задачу:
Построим цепочку запросов (Pipes) для этой задачи.
1. Относительно объекта L17T нужно построить буфер (окружность) в 1 метр (Query name: qL17T_Bufer1m).

2. Построить пространственное пересечение буфера qL17T_Bufer1m с объектом L17L (сегментами дороги, в которых хранится информация о ее номере) c функцией touch (Query name: qL17T_Bufer1m _Intersection_ L17L).

3. Подготовить сегменты для вывода подписей дорог. На данном этапе выполняется проверка флага объекта L17T, вырезание номера дороги из строки столбца NumberOfRoad согласно флагу и занесения значения в отдельный столбец Text.
3.1. Запустить Analysis → Functional Attributes.
3.2. На вход подать qL17T_Bufer1m _Intersection_ L17L.

3.3. Нажать New…
3.4. Ввести запрос в окно Expression:, Задать имя столбца в поле Functional attribute name: – Text и нажать Add
текст выражения можно скопировать здесь
3.5. Введите имя запроса Query name: qL17T_IntersForLabels

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

4. Следующим шагом будет создание подписи из поля Text вдоль сегмента qL17T_IntersForLabels (Параметры: Center сenter; orient to geometry. Шрифт «Tahoma»; высота - 7). Query name: qL17T_Labels
5. Построить прямоугольники вокруг подписей:
· Запустить Analysis → Functional Attributes.
· На вход подать qL17T_Labels.
· Нажать New…
Где, значение 200000 – это масштаб, при котором будет выводиться подпись. 'Tahoma' – шрифт текста, 7 – размер текста.
· Нажать Add
· Query name: qL17T_Box
6. Покрасим прямоугольники и текст согласно условному знаку. Для отбора необходимых объектов будем использовать фразу запроса, типа Text like ‘Е%’; в Attribyte Query.
Полученные запросы накладываются на цифровую карту и в результате получаем условный знак дороги. 
Примечание: меняя параметры текста, прямоугольника и номинальный масштаб, можно оперировать величиной условного знака подписи дороги для создания карт различных масштабов. |