Все символы добавляются с помощью Подсистемы управления данными каталога через веб-интерфейс в подпапки папки "Библиотеки".
Формат
Для каждого символа необходимо указать Название, Кодовое название и Описание.
Описание представляется в виде:
Версия 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
- Параметры pattern и gap переместились из symbol в style.
- У символов, используемых для заливки полигонов или линий теперь можно задавать цвет контура символа.
- У растровых символов, используемых для заливки полигонов или линий теперь можно задавать размер символа.
- Пунктирные линий создаются через тип символа line. Не нужно больше рисовать линии кружками.
- Gap теперь можно использовать не только для символов шрифтов, но и для любых других символов.
- Для символов можно задавать центр отображения.
Примеры
Двойная жирная линия
<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(
          …
      )
      …
    )
)
Замечание:
- Проекция и экстенты карты хранятся у ресурса.
- Порядок слоев сверху-вниз. Первый слой массива layers самый нижний в карте.
- Порядок отображения слоев задается порядком слоев/групп в массиве layers.
- При создании карты группы игнорируются и могут находится в любом месте и порядке в массиве layers.
- В layers 2 сущности: слой (guid не пустой), группа (guid пустой).