9. XML-структура библиотеки символов

Все символы добавляются с помощью Подсистемы управления данными каталога через веб-интерфейс в подпапки папки "Библиотеки".

Формат

Для каждого символа необходимо указать Название, Кодовое название и Описание.

Описание представляется в виде:

Версия 1.0

<?xml version="1.0" encoding="utf-8"?>
<styles>
    <style>
        <symbol type="text">
            <type> vector | ellipse </type>
            <filled> 0 | 1 </filled>
            <points> {point} {point} {point} {point} {point} {point} … </points>
            <pattern> {pixel} {pixel} {pixel} {pixel} </pattern>
            <antialias> 0 | 1 </antialias>
            <gap> {pixel} </gap>
        </symbol>
        <size fixed="0">размер символа по умолчанию</size>
        <color fixed="0">цвет заливки по умолчанию</color>
        <outlinecolor fixed="0">цвет контура по умолчанию</outlinecolor>
    </style>
    <style>
        …
    </style>
    …
</styles>

Версия 2.0

<?xml version="1.0" encoding="utf-8"?>
<styles version="2.0">
    <style>
        <symbol type="text">
            <type> vector | ellipse </type>
            <filled> 0 | 1 </filled>
            <points> {point} {point} {point} {point} {point} {point} … </points>
            <antialias> 0 | 1 </antialias>
            <anchorpoint> {point} {point} </anchorpoint>
        </symbol>
        <gap> {pixel} </gap>
        <angle> {angle} </angle>
        <pattern> {pixel} {pixel} {pixel} {pixel} </pattern>
        <size fixed="0">размер символа по умолчанию</size>
        <color fixed="0">цвет заливки по умолчанию</color>
        <outlinecolor fixed="0">цвет контура по умолчанию</outlinecolor>
    </style>
    <style>
        …
    </style>
    …
</styles>


Пояснение

У одного символа может быть один или более "стилей" <style></style>. В каждом "стиле" символа должны быть определены размер, цвет заливки и цвет контура по умолчанию:

size – целое (размер в пикселях от 1 до 50)
color, outlinecolor – строка (например, ‘255 255 255’, ‘0 0 0’, ‘-1 -1 -1’ (прозрачный цвет))
pattern [num on] [num off] [num on] ... - определяет стиль пунктира (для версии 2.0).
angle [int] - угол вращения символа в градусах (с версии 2.0).
gap [int] - расстояние между символами для линейных и полигональных объектов (для версии 2.0).

Для размера, цвета заливки и цвета контура по умолчанию доступны следующие настройки:

fixed="0" – изменяемый размер, т.е. размер "стиля" будет зависеть от настроек размера всего символа.
fixed="1" – не изменяемый размер, т.е. размер "стиля" не будет зависеть от настроек размера всего символа.

Основное описание "стиля" содержится в теге <symbol></symbol>. Доступны два типа символа "стиля":

type="text" – текстовое описание (векторный символ, символ шрифта).
type="image" – имя файла (растровое изображение).
type="line" – штриховка для линейных объектов (описание символа пустое) (с версии 2.0).

Параметры символа "стиля" для типа text:

type [vector|ellipse] - vector простой рисунок, используется для определения формы символа; ellipse: рисунок в виде элипса.
antialias [0|1] - сглаживание символа "стиля".
filled [0|1] - заливка полигонального векторного символа "стиля".
gap [int] - расстояние между символами шрифта для линейных объектов (для версии 1.0).
points [x y] [x y] ... - векторное описание символа "стиля". Пары координат составляют векторный контур символа. Для символов типа ellipse эти координаты определяют радиус и размер эллипса. Координаты задаются в пикселях. Примеры и более подробное описание можно посмотреть по ссылке http://www.mapserver.org/mapfile/symbology/construction.html.
pattern [num on] [num off] [num on] ... - определяет стиль пунктира (для версии 1.0).
anchorpoint [x y] - определяет центр символа (x и y должны принимать значения от 0 до 1, по умолчанию [0.5 0.5]) (с версии 2.0).

Новое в версии 2.0

  1. Параметры pattern и gap переместились из symbol в style.
  2. У символов, используемых для заливки полигонов или линий теперь можно задавать цвет контура символа.
  3. У растровых символов, используемых для заливки полигонов или линий теперь можно задавать размер символа.
  4. Пунктирные линий создаются через тип символа line. Не нужно больше рисовать линии кружками.
  5. Gap теперь можно использовать не только для символов шрифтов, но и для любых других символов.
  6. Для символов можно задавать центр отображения.


Примеры

Двойная жирная линия

<styles>
    <style>
        <symbol type="text">
            <type>vector</type>
            <filled>1</filled>
            <points>
                0 0
                0 0.125
                0.5 0.125
                0.5 0
                0 0
                -99 -99
                0 0.375
                0 0.5
                0.5 0.5
                0.5 0.375
                0 0.375
            </points>
            <antialias>1</antialias>
        </symbol>
        <size fixed="0">5</size>
        <color fixed="0">0 0 0</color>
        <outlinecolor fixed="0">0 0 0</outlinecolor>
    </style>
</styles>

Изображение в качестве символа

<styles>
    <style>
        <symbol type="image">c:/gisportal/mserver/simple/images/closebox.gif</symbol>
        <size fixed="0">1</size>
        <color fixed="0">255 255 0</color>
        <outlinecolor fixed="0">0 0 0</outlinecolor>
    </style>
</styles>

Железная дорога (версия 1.0)

<styles>
    <style>
        <symbol type="text">
            <type>ellipse</type>
            <filled>1</filled>
            <points>1 1</points>
            <antialias>1</antialias>
        </symbol>
        <size fixed="1">4</size>
        <color fixed="0">255 255 0</color>
        <outlinecolor fixed="0">11 22 33</outlinecolor>
    </style>
    <style>
        <symbol type="text">
            <type>ellipse</type>
            <filled>1</filled>
            <points>1 1</points>
            <pattern>10 5 10 5</pattern>
            <antialias>1</antialias>
        </symbol>
        <size fixed="1">2</size>
        <color fixed="1">255 255 255</color>
        <outlinecolor fixed="1">255 255 255</outlinecolor>
    </style>
</styles>

Железная дорога (версия 2.0)

<styles version="2.0">
    <style>
        <symbol type="line"></symbol>
        <size fixed="1">4</size>
        <color fixed="0">255 255 0</color>
        <outlinecolor fixed="0">11 22 33</outlinecolor>
    </style>
    <style>
        <symbol type="line"></symbol>
        <pattern>10 5 10 5</pattern>
        <size fixed="1">2</size>
        <color fixed="1">255 255 255</color>
        <outlinecolor fixed="1">255 255 255</outlinecolor>
    </style>
</styles>


Внтуренний формат стилевого описания ресурсов геопортала.

Для работы картографического ядра используется массив с данными о стилевом оформлении слоя и карты в формате json. Такой подход используется для совместимости с различными форматами стилевых описаний ресурса без изменения ядра самого картографического приложения.


Выходной массив данных для слоя

Для формата ГеоЭкспреса:

layer => array(
    version => const [1]
    labelitem => string (поле атрибутивных данных для подписей объектов слоя)
    minscale => float (минимальный масштаб видимости слоя)
    maxscale => float (максимальный масштаб видимости слоя)
    opacity => integer [0-100] (прозрачность в %)
    application => array(
        media => array(
            project => string (идентификатор проекта)
            keyfield => string (поле для привязки фотографий)
            prefix => string (префикс)
        )
    )
    tile => string (guid тайлового слоя)
    tilefixed => integer [0|1] (флаг выпадающего списка с подложками, 1 - нет списка, 0 - список есть)
    type => string ['thema'|'chart'|'sld'] ('thema' или '') (тип слоя)
    class => array(
      [0] => array(
          condition => string (условие выборки объектов для класса по правилам mapserver, http://www.mapserver.org/mapfile/expressions.html)
          minscale => float (минимальный масштаб видимости класса)
          maxscale => float (максимальный масштаб видимости класса)
          legendlabel => string (подпись класса в легенде)
          label => array(
              size => integer (размер шрифта)
              color => string [r g b] (цвет заливки)*
              outlinecolor => string [r g b] (цвет контура)*
              fontid => string (ид библиотеки со шрифтами)
              fontcode => string (код шрифта из библиотеки)
              position => string ['ul'|'uc'|'ur'|'cl'|'cc'|'cr'|'ll'|'lc'|'lr'|'auto'] (позиция подписи от центра)
              angle => mixed [(double)angle|(string)'auto'|(string)'follow'] (направление подписи)
              force => boolean [true|false] (флаг перекрытия)
              offset => array [x,y] (смещение по x и y)
              border => string [''|'ghosted'|'opaque'] (ghosted - кайма, opaque - рамка)
              repeatdistance => integer (дистанция для повторения подписей в пикселях)
          ) // end label
          style => array(
            [0] => array(
                type => string ['none', 'image', 'font', 'library'] (тип оформления, 'image' - бинарное изображение, 'font' - символ шрифта, 'library' - символ из библиотеки)

                size => integer (размер символа, 1 для изображения = оригинальный размер)
                color => string [r g b] (цвет заливки)*
                outlinecolor => string [r g b] (цвет контура)*
                backgroundcolor => string [r g b] (цвет фона)*

                img => бинарный код gif картинки (только для типа image)

                fontid => string (ид библиотеки со шрифтами) (только для типа font)
                fontcode => string (код шрифта из библиотеки) (только для типа font)
                fontchar => byte (код символа шрифта) (только для типа font)

                libraryid => string (ид библиотеки с символами) (только для типа library)
                librarycode => string (код символа из библиотеки) (только для типа library)
            )
            [1] => array(
                …
            )
            …
          ) // end style
          styleline => array(**
            [0] => array(
                type => string ['none', 'image', 'font', 'library'] (тип оформления, 'image' - бинарное изображение, 'font' - символ шрифта, 'library' - символ из библиотеки)

                size => integer (размер символа, 1 для изображения = оригинальный размер)
                color => string [r g b] (цвет заливки)*
                outlinecolor => string [r g b] (цвет контура)*
                backgroundcolor => string [r g b] (цвет фона)*

                img => бинарный код gif картинки (только для типа image)

                fontid => string (ид библиотеки со шрифтами) (только для типа font)
                fontcode => string (код шрифта из библиотеки) (только для типа font)
                fontchar => byte (код символа шрифта) (только для типа font)

                libraryid => string (ид библиотеки с символами) (только для типа library)
                librarycode => string (код символа из библиотеки) (только для типа library)
            )
            [1] => array(
                …
            )
            …
          ) // end styleline
      )
      [1] => array(
          …
      )
      …
    ) // end class
)

* Значение цвета r, g, b изменяется от 0 до 255, '-1 -1 -1' - прозрачный цвет).
** Массив styleline заполняется только для полигональных слоев. В нем содержится описание стиля границы полигонов.

Для SLD:

layer => array(
    version => const [1]
    type => string ['thema'|'chart'|'sld'] ('sld') (тип слоя)
    sld => string [xml] (для type = sld не пустое, для остальных типов пустая строка)
)

Для формата диаграмм:

layer => array(
    version => const [1]
    minscale => float (минимальный масштаб видимости слоя)
    maxscale => float (максимальный масштаб видимости слоя)
    opacity => integer [0-100] (прозрачность в %)
    tile => string (guid тайлового слоя)
    tilefixed => integer [0|1] (флаг выпадающего списка с подложками, 1 - нет списка, 0 - список есть)
    type => string ['thema'|'chart'|'sld'] ('chart') (тип слоя)
    chart => string ['pie'|'bar'|'vbar'] (тип картограмм: 'pie' - круговая, 'bar' - столбчатая, 'vbar' - столбчатая с накоплением (bar составленый в один столбик))

    width => integer (размер картограммы)
    height => integer (высота картограммы, необязательный параметр и только для гистограмм)

    range => string [attribute] (диаметр круговой диаграммы, атрибутивное поле)
    minsize => integer (минимальный размер диаметра круговой диаграммы)
    maxsize => integer (максимальный размер диаметра круговой диаграммы)
    minval => float (значение атрибутивного поля для минимального размера диаметра круговой диаграммы)
    maxval => float (значение атрибутивного поля для максимального размера диаметра круговой диаграммы)
    exponent => float (экспоненциальный фактор для размера диаметра круговой диаграммы)

    class => array(
      [0] => array(
          condition => string [attribute] (название атрибутивного поля объекта для блока картограммы)
          legendlabel => string (подпись класса в легенде)
          style => array (
            [0] => array(
                size => integer (размер контура)
                color => string [r g b] (цвет заливки)*
                outlinecolor => string [r g b] (цвет контура)*
            )
            [1] => array(
                …
            )
            …
          ) // end style
      )
      [1] => array(
          …
      )
      …
    ) // end class
)

* Значение цвета r, g, b изменяется от 0 до 255, '-1 -1 -1' - прозрачный цвет).


Выходной массив данных для карты

map = array(
    version => const [1]
    extent => array [minx, miny, maxx, maxy] (границы начального вида карты)
    fullextent => array [minx, miny, maxx, maxy] (границы полного вида карты)
    imagecolor => string [r g b] (цвет фона)
    minscale => float (минимальный масштаб карты)
    maxscale => float (максимальный масштаб карты)
    tile => string (guid тайлового слоя)
    tilefixed => integer [0|1] (флаг выпадающего списка с подложками, 1 - нет списка, 0 - список есть)
    checkbox => boolean [true|false] (показывать переключатели в легенде или нет)
    layers => array(
      [0] => array(
          groupname => string (имя группы) (если слой без группы, значение должно быть пустым)
          legendlabel => string (имя слоя/группы в легенде) (перекрывает аналогичный параметр в стандартном описании слоя) (пробел вместо имени в легенде заменяется стилевым оформлением)
          legendindex => integer (порядок слоя/группы в легенде с 0)
          queryable => boolean [true|false] (показывать или нет ответ запроса по клику мыши для слоя)
          visible => boolean [true|false] (показывать или нет в слой легенде)
          expanded => boolean [true|false] (раскрывать или нет изначально слой в легенде)
          display => boolean [true|false] (показывать или нет слой в карте по умолчанию) (работает, когда checkbox = true)
          guid => string (guid слоя) (если группа, то параметр должен быть пустым)
          layer => mixed [''|array] (либо пустая строка - используем настройки самого слоя, либо выходной массив данных для слоя в формате описанном выше)
          opacity => integer [0-100] (непрозрачность слоя в карте в %)
      )
      [1] => array(
          …
      )
      …
    )
)

Замечание:

  1. Проекция и экстенты карты хранятся у ресурса.
  2. Порядок слоев сверху-вниз. Первый слой массива layers самый нижний в карте.
  3. Порядок отображения слоев задается порядком слоев/групп в массиве layers.
  4. При создании карты группы игнорируются и могут находится в любом месте и порядке в массиве layers.
  5. В layers 2 сущности: слой (guid не пустой), группа (guid пустой).

 

Версия от 05.03.2018