Все символы добавляются с помощью Подсистемы управления данными каталога через веб-интерфейс в подпапки папки "Библиотеки".
Формат
Для каждого символа необходимо указать Название, Кодовое название и Описание.
Описание представляется в виде:
Версия 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 пустой).