Конвертация Mapnik XML в SLD с использованием mapnik2geotools: различия между версиями
м (→SLD) |
м (→SLD) |
||
(не показано 5 промежуточных версий этого же участника) | |||
Строка 12: | Строка 12: | ||
SLD (Styled Layer Descriptor) - основанный на базе XML стандарт OGC, предназначенный для описания символики пространственных данных. Любой SLD-файл представляет собой документ, имеющий следующую структуру: | SLD (Styled Layer Descriptor) - основанный на базе XML стандарт OGC, предназначенный для описания символики пространственных данных. Любой SLD-файл представляет собой документ, имеющий следующую структуру: | ||
<pre> | |||
•Header | •Header | ||
•FeatureTypeStyle | |||
•Rule | |||
•Symbolizer | |||
</pre> | |||
''Header'' - заголовок, содержащий метаинформацию и пространства имён XML, эта часть в большинстве случаев одинакова для всех SLD-документов. | ''Header'' - заголовок, содержащий метаинформацию и пространства имён XML, эта часть в большинстве случаев одинакова для всех SLD-документов. | ||
Строка 65: | Строка 67: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Применительно к реальным данным это означает, что слой будет вначале отрисован в виде линий цвета ''#dddddd'' и толщиной 4 пиксела, поверх которого будет наложен тот же самый слой без обводки, но с заливкой цвета ''fa5000'': | Применительно к реальным данным это означает, что слой будет вначале отрисован в виде линий цвета ''#dddddd'' и толщиной 4 пиксела, поверх которого будет наложен тот же самый слой без обводки, но с заливкой цвета ''#fa5000'': | ||
[[Файл:Sld.png|720px|thumb|center|<center>Применения SLD-стиля</center>]] | [[Файл:Sld.png|720px|thumb|center|<center>Применения SLD-стиля</center>]] | ||
Строка 71: | Строка 74: | ||
=== Mapnik XML === | === Mapnik XML === | ||
Mapnik XML - это формат более широкого спектра действия нежели SLD, что объясняется его назначением. Mapnik XML - это основной инструмент конфигурирования Mapnik (как map-файл для [http://mapserver.org/ MapServer]). Синтаксис подсистемы описания символики в [https://github.com/mapnik/mapnik/wiki/XMLConfigReference Mapnik XML] несколько похож на SLD, но в то же время имеет и свои отличия. Не вдаваясь в детали устройства Mapnik XML приведём пример того, как он может выглядеть: | Mapnik XML - это формат более широкого спектра действия нежели SLD, что объясняется его назначением. Mapnik XML - это основной инструмент конфигурирования Mapnik (как map-файл для [http://mapserver.org/ MapServer]). Синтаксис подсистемы описания символики в [https://github.com/mapnik/mapnik/wiki/XMLConfigReference Mapnik XML] несколько похож на SLD, но в то же время имеет и свои отличия. Не вдаваясь в детали устройства Mapnik XML, приведём пример того, как он может выглядеть: | ||
<syntaxhighlight lang="xml"> | <syntaxhighlight lang="xml"> | ||
Строка 165: | Строка 168: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == Запуск утилиты с графическим интерфейсом == | ||
mapnik2geotools может быть запущен как в режиме с графическим интерфейсом, так и в режиме командной строки. Для запуска утилиты с графическим интерфейсом вам потребуется наличие [http://ru.wikipedia.org/wiki/X_Window_System X-сервера]. Если на машине "иксы" не установлены, то графический интерфейс можно вывести на другую машину. Автор статьи подключался из Windows к машине с установленным Debian с помощью Putty, используя X-сервер Xming (настройка связки Putty+Xming описана [http://debback.blogspot.com/2008/03/linux-windows-xming-ssh.html здесь]). | |||
из Windows к машине с установленным Debian с помощью Putty | |||
[http://debback.blogspot.com/2008/03/linux-windows-xming-ssh.html здесь]). | |||
Для запуска конвертора переходим в каталог mapnik2geotools и запускаем его: | Для запуска конвертора переходим в каталог mapnik2geotools и запускаем его: | ||
Строка 232: | Строка 227: | ||
</StyledLayerDescriptor> | </StyledLayerDescriptor> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Запуск утилиты без графического интерфейса == | |||
Как уже было сказано выше mapnik2geotools можно запустить и без графического интерфейса, что позволяет использовать его в пакетном режиме. Для этого необходимо следовать инструкциям, представленным на [https://github.com/dwins/mapnik2geotools/wiki/Hacking данной] странице, а именно: | |||
<syntaxhighlight lang="Bash"> | |||
cd ~/mapnik2geotools | |||
sbt "run-main me.winslow.d.mn2gt.Driver /home/rykovd/mapnik/test.xml --output /home/rykovd/mapnik/output/" | |||
</syntaxhighlight> | |||
где <code>/home/rykovd/mapnik/test.xml</code> - путь до файла Mapnik XML, <code>/home/rykovd/mapnik/output/</code> - каталог, в который будет помещён результат конвертирования. |
Текущая версия от 16:01, 2 октября 2012
по адресу http://gis-lab.info/qa/mapnik2geotools.html
Рассмотрен процесс конвертирования файлов описания стилей из формата Mapnik XML в формат SLD, установка инструментов описана для операционной системы Debian.
mapnik2geotools - это небольшой проект, написанный на Scala, для конвертации файлов описания стилей в формате Mapnik XML в формат SLD.
Данный проект распространяется в виде исходных кодов и требует предварительной компиляции. Для этого в системе должен быть установлен инструмент для генерации и сборки Scala проектов SBT.
Краткое введение в SLD и Mapnik XML
SLD
SLD (Styled Layer Descriptor) - основанный на базе XML стандарт OGC, предназначенный для описания символики пространственных данных. Любой SLD-файл представляет собой документ, имеющий следующую структуру:
•Header •FeatureTypeStyle •Rule •Symbolizer
Header - заголовок, содержащий метаинформацию и пространства имён XML, эта часть в большинстве случаев одинакова для всех SLD-документов.
FeatureTypeStyle - секция, содержащая набор правил (Rules). Группировка правил в FeatureTypeStyle выполняется с тем расчётом, что рендеринг данных осуществляется в порядке их следования, проще говоря слой сначала рендерится в соответствии с первым FeatureTypeStyle, затем в соответствии со вторым и так далее. На выходе полученные результаты накладываются друг на друга.
Rule - правило применения стиля. Оно может быть задано как глобально, так и иметь логику некоторого фильтра. Например, используя правила, можно настроить символику в соответствии с атрибутивными полями слоя или текущим масштабным уровнем.
Symbolizer - секция в которой непосредственно задаётся сама символика. Symbolizer может принимать одно из пяти значений, назначение которых можно понять из их названия:
- PointSymbolizer
- LineSymbolizer
- PolygonSymbolizer
- RasterSymbolizer
- TextSymbolizer
В одном документе SLD может быть несколько секций FeatureTypeStyles, несколько секций Rules на каждую секцию FeatureTypeStyles и несколько Symbolizer на каждую секцию Rule.
Пример SLD-документа:
<StyledLayerDescriptor version="1.0.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ogc="http://www.opengis.net/ogc" xmlns="http://www.opengis.net/sld">
<NamedLayer>
<Name>test</Name>
<UserStyle>
<Name>test</Name>
<FeatureTypeStyle>
<Rule>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke-width">4</CssParameter>
<CssParameter name="stroke">#dddddd</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
</FeatureTypeStyle>
<FeatureTypeStyle>
<Rule>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#fa5000</CssParameter>
</Fill>
</PolygonSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
Применительно к реальным данным это означает, что слой будет вначале отрисован в виде линий цвета #dddddd и толщиной 4 пиксела, поверх которого будет наложен тот же самый слой без обводки, но с заливкой цвета #fa5000:
Mapnik XML
Mapnik XML - это формат более широкого спектра действия нежели SLD, что объясняется его назначением. Mapnik XML - это основной инструмент конфигурирования Mapnik (как map-файл для MapServer). Синтаксис подсистемы описания символики в Mapnik XML несколько похож на SLD, но в то же время имеет и свои отличия. Не вдаваясь в детали устройства Mapnik XML, приведём пример того, как он может выглядеть:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Map[]>
<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="#dddddd">
<Parameters>
<Parameter name="bounds">-180,-85.05112877980659,180,85.05112877980659</Parameter>
<Parameter name="center">0,0,2</Parameter>
<Parameter name="format">png</Parameter>
<Parameter name="minzoom">0</Parameter>
<Parameter name="maxzoom">22</Parameter>
<Parameter name="name"><![CDATA[Test]]></Parameter>
<Parameter name="description"><![CDATA[For testing]]></Parameter>
</Parameters>
<Style name="test" filter-mode="first">
<Rule>
<PolygonSymbolizer fill="#aaffaa" />
</Rule>
</Style>
<Style name="test-outline" filter-mode="first">
<Rule>
<LineSymbolizer stroke="#ffffff" stroke-width="4" />
</Rule>
</Style>
<Layer name="test"
srs="+proj=longlat +ellps=WGS84 +no_defs">
<StyleName>test-outline</StyleName>
<StyleName>test</StyleName>
<Datasource>
<Parameter name="file"><![CDATA[C:\Users\rda\Documents\MapBox\project\layers\test\test.shp]]></Parameter>
<Parameter name="type"><![CDATA[shape]]></Parameter>
</Datasource>
</Layer>
</Map>
Секции <Style>, <Rule>, <*Symbolizer> соответствуют по своему назначению секциям <FeatureTypeStyle>, <Rule>, <*Symbolizer> SLD.
Установка SBT
Установка SBT с помощью различных систем управления пакетами описана в документации. Рассмотрим это процесс на примере системы Apt, используемой в Debian:
cd ~
mkdir sbt
cd sbt
wget http://apt.typesafe.com/repo-deb-build-0002.deb
sudo dpkg -i repo-deb-build-0002.deb
sudo apt-get update
sudo apt-get install sbt
rm -r ~/sbt
Установка mapnik2geotools
cd ~
git clone git://github.com/dwins/mapnik2geotools.git
cd ~/mapnik2geotools
sbt update
После запуска последней команды может появиться следующее сообщение, свидетельствующее о том, что не найден launcher версии 0.11.2, поскольку в Debian по умолчанию устанавливается версия 0.11.3:
$ sbt update
Detected sbt version 0.11.2
Cannot find sbt launcher 0.11.2
Please download:
From http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-tools.sbt/sbt-launch/0.11.2/sbt-launch.jar
To /home/rykovd/.sbt/.lib/0.11.2/sbt-launch.jar
Создадим указанный каталог и поместим в него нужный файл:
mkdir -p ~/.sbt/.lib/0.11.2
cd ~/.sbt/.lib/0.11.2
wget http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-tools.sbt/sbt-launch/0.11.2/sbt-launch.jar
Выполняем компиляцию:
cd ~/mapnik2geotools
sbt update
sbt compile
Запуск утилиты с графическим интерфейсом
mapnik2geotools может быть запущен как в режиме с графическим интерфейсом, так и в режиме командной строки. Для запуска утилиты с графическим интерфейсом вам потребуется наличие X-сервера. Если на машине "иксы" не установлены, то графический интерфейс можно вывести на другую машину. Автор статьи подключался из Windows к машине с установленным Debian с помощью Putty, используя X-сервер Xming (настройка связки Putty+Xming описана здесь).
Для запуска конвертора переходим в каталог mapnik2geotools и запускаем его:
cd ~/mapnik2geotools
sbt
run
В разделе Input выбираем Mapnik XML-файл с описанием стиля, в разделе Operation отмечаем Just save SLD files to local disk и, наконец, в разделе Local Output выбираем директорию в которую будет сохранён результат. Попутно для себя замечаем, что mapnik2geotools может автоматически копировать сконвертированные стили на GeoServer. Нажимаем кнопку Convert!
Стоит отметить, что на выходе получаем такое количество SLD-файлов, сколько раз секция <Style> встречается в файле Mapnik XML. Так, например, при попытке конвертирования Mapnik XML файла, приведённого в начале статьи в SLD получилось два *.sld файла:
<StyledLayerDescriptor version="1.0.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ogc="http://www.opengis.net/ogc" xmlns="http://www.opengis.net/sld">
<NamedLayer>
<Name>test</Name>
<UserStyle>
<Name>test</Name>
<FeatureTypeStyle>
<Rule>
<PolygonSymbolizer>
<Fill>
<CssParameter name="fill">#aaffaa</CssParameter>
</Fill>
</PolygonSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
<StyledLayerDescriptor version="1.0.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ogc="http://www.opengis.net/ogc" xmlns="http://www.opengis.net/sld">
<NamedLayer>
<Name>test-outline</Name>
<UserStyle>
<Name>test-outline</Name>
<FeatureTypeStyle>
<Rule>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke-width">4</CssParameter>
<CssParameter name="stroke">#ffffff</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
Запуск утилиты без графического интерфейса
Как уже было сказано выше mapnik2geotools можно запустить и без графического интерфейса, что позволяет использовать его в пакетном режиме. Для этого необходимо следовать инструкциям, представленным на данной странице, а именно:
cd ~/mapnik2geotools
sbt "run-main me.winslow.d.mn2gt.Driver /home/rykovd/mapnik/test.xml --output /home/rykovd/mapnik/output/"
где /home/rykovd/mapnik/test.xml
- путь до файла Mapnik XML, /home/rykovd/mapnik/output/
- каталог, в который будет помещён результат конвертирования.