Конвертация Mapnik XML в SLD с использованием mapnik2geotools: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
 
(не показано 5 промежуточных версий этого же участника)
Строка 12: Строка 12:
SLD (Styled Layer Descriptor) - основанный на базе XML стандарт OGC, предназначенный для описания символики пространственных данных. Любой SLD-файл представляет собой документ, имеющий следующую структуру:
SLD (Styled Layer Descriptor) - основанный на базе XML стандарт OGC, предназначенный для описания символики пространственных данных. Любой SLD-файл представляет собой документ, имеющий следующую структуру:


<pre>
•Header
•Header
:•FeatureTypeStyle
  •FeatureTypeStyle
::•Rule
    •Rule
:::•Symbolizer
      •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>


== Конвертирование ==
== Запуск утилиты с графическим интерфейсом ==
 
Хотя в документации написано, что конвертор можно запустить так:
 
<syntaxhighlight lang="Bash">
sbt "run my_mapnik_file.xml"
</syntaxhighlight>


но при таком способе у автора статьи он постоянно вываливался с ошибкой, оповещающей о том, что не найден X-сервер. Небольшое уточнение: подключение производилось
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. Проблему удалось обойти путём установки X-сервера Xming (настройка связки Putty+Xming описана
[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:


Применения SLD-стиля

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!

Окно настроек mapnik2geotools

Стоит отметить, что на выходе получаем такое количество 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/ - каталог, в который будет помещён результат конвертирования.