RU:Mapnik: Rendering OSM XML data directly

From OpenStreetMap Wiki
Jump to: navigation, search
В процессе перевода +/-
Эта страница находится в процессе перевода или помечена для этой цели, поэтому может содержать пропуски, ошибки и непереведённые фрагменты. Исходная статья – Mapnik: Rendering OSM XML data directly.
Если вы знаете английский, то можете помочь нам, переведя часть оригинальной статьи. Общие сведения о переводе статей на русский язык можно найти здесь.

Вы можете закончить перевод

Help
Доступные языки
English Русский
Карта отрендеренная из сырых данных OSM, с использованием файла карты из примера. Часть Милана, Италия

Итак, вам захотелось попробовать создать свою карту с помощью mapnik. Значит, это для вас...
Данный туториал описывает базовые шаги с самого начала. Прежде всего, убедитесь, что у вас этот mapnik установлен. Почитайте Mapnik/Installation, если это не так.

В приведённом примере не используется база данных postgresql. Данные берутся прямо из .osm XML файла, что накладывает кое-какие ограничения, но зато позволяет вам быстрее начать.

Мы будем рендерить карту маленького района южной Баварии, Германия. Всё было протестировано на Arch Linux и Ubuntu, но, в принципе, должно работать на любой операционной системе UNIX, где установлены bash, mapnik и python. С другими операционными системами вам придётся разобраться, что надо изменить.


Contents

Получение данных

Итак, у вас установлен mapnik и запущена установка python. Следующим шагом будет получение данных из OSM. Вы можете воспользоваться API для скачивания данных небольшой области, а в данном примере мы возьмём данные из www.geofabrik.de. Используем файл, содержащий регион Швабия в Баварии, Германия:

# cd workdir
# wget http://download.geofabrik.de/osm/europe/germany/bayern/schwaben.osm.bz2
# bunzip schwaben.osm.bz2

Создание файла стиля

Далее, создадим главный xml файл, соержащий инструкции для mapnik о содержимом карты, и как его рендерить. Создайте файл mapnik_style.xml со следующим содержимым:

<?xml version="1.0" encoding="utf-8"?>
<Map bgcolor="#f2efe9" srs="+proj=latlong +datum=WGS84">
	<FontSet name="book-fonts">
		<Font face_name="DejaVu Sans Book" />
	</FontSet>
	<Style name="highways">
		<Rule>
			<Filter>[highway] &lt;&gt; ''</Filter>
			<LineSymbolizer>
				<CssParameter name="stroke">#808080</CssParameter>
				<CssParameter name="stroke-width">2</CssParameter>
				<CssParameter name="stroke-linejoin">round</CssParameter>
				<CssParameter name="stroke-linecap">round</CssParameter>
			</LineSymbolizer>
		</Rule>
		<Rule>
			<Filter>[highway] &lt;&gt; ''</Filter>
			<TextSymbolizer name="name" fontset_name="book-fonts"
				size="9" fill="#000" halo_radius="1" placement="line" />
		</Rule>
	</Style>
	<Layer name="highways" status="on" srs="+proj=latlong +datum=WGS84">
		<StyleName>highways</StyleName>
		<Datasource>
			<Parameter name="type">osm</Parameter>
			<Parameter name="file">schwaben.osm</Parameter>
		</Datasource>
	</Layer>
</Map>

Давайте немного разберём это:

Вы можете добавить больше правил и фильтров, чтобы определить все элементы карты, какие пожелаете.

Рендеринг карты

Наконец, мы командуем mapnik рендерить карту, используя файл стиля. Чтобы сделать это, мы воспользуемся Python API mapnik. Создайте python скрипт render.py со следующим содержимым и запустите его. В зависимости от операционной системы, может потребоваться сделать скрипт исполняемым.

#!/usr/bin/env python2

from mapnik import *

mapfile = 'mapnik_style.xml'
map_output = 'mymap.png'

m = Map(4*1024,4*1024)
load_map(m, mapfile)
bbox=(Envelope( 10.0,47.5,11.1,48.1 ))

m.zoom_to_box(bbox)
print "Scale = " , m.scale()
render_to_file(m, map_output)

Данный скрипт указыват mapnik рендерить mymap.png размером 4096x4096 пикселей из файла стиля mapnik_style.xml. Карта будет содержать данные области в прямоугольнике (сферическом) от 47.5° N 10.0° E до 48.1° N 11.1° E. Note that the units taken by the Envelope constructor совпадают с теми, что описаны в разделе srs файла mapnik_style.xml, т.е. srs="+proj=longlat" в данном случае. Скрипт также напечатает масштаю карты и создаст png файл с картой.
Если хотите, можете поступить проще, используя Mapnik Viewer: всё, что вам нужно, это файл карты и файл OSM. Запустите viewer и откройте файл карты - он автоматически центрируется и приблизится к области, содержащей данные. Вы можете приближаться и отдаляться, перемещаться, включать и отключать отдельные уровни, либо изменять файл карты и обновлять просмотр.

В Ubuntu, просто установите пакет mapnik-viewer. В других ОС ищите похожий пакет. Если его нет, вы можете найти инструкции по сборке в Mapnik wiki.

Доработка

Теперь попробуем немного изменить карту: перепишите элемент LineSymbolizer следующим образом:

                        <LineSymbolizer>
                                <CssParameter name="stroke">black</CssParameter>
                                <CssParameter name="stroke-width">4</CssParameter>
                                <CssParameter name="stroke-opacity">1.0</CssParameter>
                        </LineSymbolizer>
                        <LineSymbolizer>
                                <CssParameter
                                        name="stroke">red</CssParameter>
                                <CssParameter
                                        name="stroke-width">3.0</CssParameter>
                        </LineSymbolizer>

Будет нарисована черная линия шириной 4, и, поверх нее, красная линия шириной 3. В результате, получим обведенную красную дорогу.

Теперь можете добавить еще элементов на вашу карту, смотрите Mapnik Example для примеров и используйте xml schema reference.

Ограничения

Несмотря на то, что данный способ хорош для быстрого импровизированного рендеринга карты или для проверки новых стилей, он имеет несколько ограничений:

Personal tools
Namespaces
Variants
Actions
site
Toolbox