Обсудить в форуме Комментариев 5Редактировать в вики
Рассмотрен процесс конвертирования файлов описания стилей из формата Mapnik XML в формат SLD, установка инструментов описана для операционной системы Debian.
mapnik2geotools - это небольшой проект, написанный на Scala, для конвертации файлов описания стилей в формате Mapnik XML в формат SLD.
Данный проект распространяется в виде исходных кодов и требует предварительной компиляции. Для этого в системе должен быть установлен инструмент для генерации и сборки Scala проектов SBT.
Содержание |
SLD (Styled Layer Descriptor) - основанный на базе XML стандарт OGC, предназначенный для описания символики пространственных данных. Любой SLD-файл представляет собой документ, имеющий следующую структуру:
•Header •FeatureTypeStyle •Rule •Symbolizer
Header - заголовок, содержащий метаинформацию и пространства имён XML, эта часть в большинстве случаев одинакова для всех SLD-документов.
FeatureTypeStyle - секция, содержащая набор правил (Rules). Группировка правил в FeatureTypeStyle выполняется с тем расчётом, что рендеринг данных осуществляется в порядке их следования, проще говоря слой сначала рендерится в соответствии с первым FeatureTypeStyle, затем в соответствии со вторым и так далее. На выходе полученные результаты накладываются друг на друга.
Rule - правило применения стиля. Оно может быть задано как глобально, так и иметь логику некоторого фильтра. Например, используя правила, можно настроить символику в соответствии с атрибутивными полями слоя или текущим масштабным уровнем.
Symbolizer - секция в которой непосредственно задаётся сама символика. Symbolizer может принимать одно из пяти значений, назначение которых можно понять из их названия:
В одном документе 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 - это формат более широкого спектра действия нежели 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 с помощью различных систем управления пакетами описана в документации. Рассмотрим это процесс на примере системы 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
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/
- каталог, в который будет помещён результат конвертирования.
Обсудить в форуме Комментариев 5Редактировать в вики
Последнее обновление: 2014-05-14 23:45
Дата создания: 24.09.2012
Автор(ы): Денис Рыков
© GIS-Lab и авторы, 2002-2021. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов. (подробнее).