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

Для работы картографического ядра используется массив с данными о стилевом оформлении слоя и карты в формате 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