RU:Mapnik

From OpenStreetMap Wiki
Jump to: navigation, search
Доступные языки — Mapnik
· Afrikaans · Alemannisch · aragonés · asturianu · azərbaycanca · Bahasa Indonesia · Bahasa Melayu · Bân-lâm-gú · Basa Jawa · Basa Sunda · Baso Minangkabau · bosanski · brezhoneg · català · čeština · corsu · dansk · Deutsch · eesti · English · español · Esperanto · estremeñu · euskara · français · Frysk · Gaeilge · Gàidhlig · galego · Hausa · hrvatski · Igbo · interlingua · Interlingue · isiXhosa · isiZulu · íslenska · italiano · Kiswahili · Kreyòl ayisyen · kréyòl gwadloupéyen · Kurdî · latviešu · Lëtzebuergesch · lietuvių · magyar · Malagasy · Malti · Nederlands · Nedersaksies · norsk bokmål · norsk nynorsk · occitan · Oromoo · oʻzbekcha/ўзбекча · Plattdüütsch · polski · português · română · shqip · slovenčina · slovenščina · Soomaaliga · suomi · svenska · Tagalog · Tiếng Việt · Türkçe · Vahcuengh · vèneto · Wolof · Yorùbá · Zazaki · српски / srpski · беларуская · български · қазақша · македонски · монгол · русский · тоҷикӣ · українська · Ελληνικά · Հայերեն · ქართული · नेपाली · मराठी · हिन्दी · भोजपुरी · অসমীয়া · বাংলা · ਪੰਜਾਬੀ · ગુજરાતી · ଓଡ଼ିଆ · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · සිංහල · བོད་ཡིག · ไทย · မြန်မာဘာသာ · ລາວ · ភាសាខ្មែរ · ⵜⴰⵎⴰⵣⵉⵖⵜ ⵜⴰⵏⴰⵡⴰⵢⵜ‎ · አማርኛ · 한국어 · 日本語 · 中文(简体)‎ · 中文(繁體)‎ · 吴语 · 粵語 · ייִדיש · עברית · اردو · العربية · پښتو · سنڌي · فارسی · ދިވެހިބަސް
Mapnik
Screenshot of Mapnik
Лицензия: GNU Lesser General Public License
Платформ: Windows, macOS, и Linux
Версия: 3.0.9 (2015-11-26)
Язык: английский
Веб-сайт: http://www.mapnik.org
Исходный код: http://svn.mapnik.org
Языки программирования: C++ и Python

Mapnik это программа, которую мы используем для отрисовки основного Slippy Map слоя для OSM, вместе с другими слоями вроде "cycle map" и "noname". Также, это имя, данное основному слою, что вводит некоторых в заблуждение.

Mapnik — свободный инструментарий отрисовки карты. Он написан на C++ и Python. Использует библиотеку AGG и дает возможность сглаживать объекты на карте с большой точностью. Может читать данные в формате компании ESRI, PostGIS, точечные рисунки TIFF, файлы .osm, а также поддерживает любые GDAL или OGR форматы. Пакеты доступны для большинства выпусков Linux, двоичные файлы доступны для Mac OS X и Windows.

Официальный сайт — mapnik.org, а новые пользователи могут получить больше информации об использовании на Mapnik Wiki и присоединиться к irc-каналу.

Ошибки и предложения по отрисовке

Отчёты и ошибки, предложения и запросы по неотображаемым на карте объектам отправляйте в trac с указанием компонента - "Mapnik". Пожалуйста, перед новым запросом проверяйте уже оставленные заявки.

Обзор

OSM использует Mapnik для отрисовки плиток (tile) размером 256 на 256 точек, это происходит на тайл-сервере (tile.openstreetmap.org). Slippy Map подгружает плитки по адресам вида http://tile.openstreetmap.org/7/63/42.png. Получается так:

42.png

См. также: Slippy map tilenames

Источники данных

Mapnik может использовать данные из различных источников: он напрямую работает с даными OSM, базами данных PostGIS, shapefiles и прочим.

.osm XML файл

Этот вариант не нашёл широкого применения и имеет ряд ограничений, но он может быть полезен для проверки установки Mapnik, либо для частного случая отрисовки карты. Смотрите Mapnik: Rendering OSM XML data directly для пошаговой инструкции.

PostGIS

Это наиболее используемый подход для отрисовки данных OSM посредством Mapnik. Данные OSM преобразуются в формат доступный Mapnik с помощью osm2pgsql, который загружает полученные данные в базу PostGIS. Встроенные в базу данных функции GIS и языка запросов SQL дают более широкие возможности отрисовки, недоступные для файлов OSM XML.

Shapefiles

Помимо прочего, обычно требуются еще так называемые шейпфайлы (shapefiles) — они нужны для отрисовки некоторых дополнительных слоёв. К примеру, береговая линия отрисовывается с помощью шейпфайлов, которые создают Coastline Error Checker из линий natural=coastline. Смотрите Coastline#Main_Mapnik_Layer

GeoTIFF

Mapnik может отрисовывать точечные изображения GeoTIFF. В основном они использются для карт рельефа. Ограничение Mapnik состоит в том, что он не может изменять проекцию точечных изображений - преобразовывать их в желаемую вами проекцию без загрузки их в Mapnik. Посмотрите Hillshading with Mapnik для получения пошагового объяснения.

Растровые (точечные) изображения

Подобно GeoTIFF, Mapnik также может отрисовывать точечные изображения, которые не содержат геоинформации. Ограничивающее эти картинки окно следует описать отдельными параметрами.

Подготовка

Работа по созданию описания этой части ещё продолжается.

Этот процесс потребует достаточно много дискового пространства если вы планируете загрузить всю планету. Отдельные страны могут быть обработаны на любой обычной машине. Для обработки же целой планеты потребуется следующее дисковое пространство (данные указаны на 4 апреля 2009). Указанные данные не включают индексы:

Date Area imported DB size
inc index & temp
Slim db
2010-04 Europe 90 GB yes
2009-04 Planet 61 GB yes
2008-04 Planet 27 GB yes
2008 April Planet 7 GB yes


Таблица Размер
дороги 700MB
линии 6.25GB
точки 469MB
полигоны 700MB
пути 4.87GB
узлы путей 16GB

Всего около 30 ГБ. Если вы используете режим slim в osm2pgsql вам также потребуется около 20 ГБ для временных таблиц. Пожалуйста обратите внимание что вам вероятно также потребуются индексы, таким образом размер базы данных с индексами приблизится к 61 ГБ!

Если у вас достаточно оперативной памяти (>12 ГБ) то вы можете попытаться запустить работу в нормальном режиме. На подходящей машине процесс должен завершиться через 3-4 часа. Если у вас не достаточно памяти, вам нужно использовать режим slim, который будет работать с любым количеством оперативной памяти. При 3 ГБ оперативной памяти процесс займет около 24 часов, время выполнения сильно зависит от быстродействия вашей дисковой подсистемы.

Note: режим slim необходим, если вы захотите использовать файлы planet diff (например, минутные диффы).

Диаграмма, объясняющая использование памяти при обработке планеты в режиме RAM:

RAM-usage-planet-import.png


Не забывайте что сжатый дамп планеты займет еще 6.1 ГБ!

Наборы данных

Для отрисовки плиток нужны два больших набора данных, так что будет разумно начать скачивать их в первую очередь.

Planet.osm

Planet.osm это снимок базы данных OpenStreetMap. Смотрите Planet.osm

$ wget http://planet.openstreetmap.org/planet-latest.osm.bz2

Note: если вы хотите отрендерить небольшой участок для быстрой проверки, то можете импортировать какой-нибудь файл .osm и вам не потребуется рендерить всю планету. Рекомендуется так поступать, если вы желаете просто проверить, работает ли рендеринг перед загрузкой 13+ GB и импорта всей планеты. Вы можете получить подходящий файл .osm, скачав и сохранив область в JOSM или используя небольшие выгрузки планеты на Planet.osm#Country_and_area_extracts.

Границы мира

Mapnik использует внешние данные shapefile для береговых линий на низких уровнях приближения. Смотрите Coastline#Main_Mapnik_Layer

wget http://tile.openstreetmap.org/world_boundaries-spherical.tgz # (50 MB)
wget http://tile.openstreetmap.org/processed_p.tar.bz2 # (357 MB)
wget http://tile.openstreetmap.org/shoreline_300.tar.bz2 # (46 MB)

После скачивания и проверки скриптов Mapnik (смотрите подробности ниже), создайте директорию mapnik/world_boundaries и распакуйте архивы, только переместите файлы из субдерикторий, так как обработка будет производиться в директории world_boundaries.

С июня 2010 дополнительно требуются ещё два файла:

wget http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/10m-populated-places.zip # (1.5 MB)
wget http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/110m-admin-0-boundary-lines.zip # (38 KB)

PostgreSQL / PostGIS

Mapnik может использовать PostgreSQL/PostGIS в качестве базы пространственных данных. Для инструкций по установке и конфигурированию PostgreSQL/PostGIS для использования с Mapnik смотрите Mapnik/PostGIS.

Если вы работаете с osm2pgsql версии старше 0.80 и планируете использовать диффы, то вам нужно активировать модуль intarray contrib. Не активируйте его, если у вас osm2pgsql 0.80 или новее:

psql gis < /usr/share/postgresql/8.3/contrib/_int.sql

osm2pgsql

osm2pgsql это конвертер и загрузчик данных Openstreetmap в PostgreSQL.

Для инструкций по установке смотрите osm2pgsql. До того, как вы начнёте впервые использовать osm2pgsql со сферической проекцией Меркатора (смотрите ниже), вам нужно инициализировать конфигурационные данные для данной проекции. Сделайте это, выполнив .sql идущий с osm2pgsql:

[Синтаксис в Windows]
$ psql -d gis -f c:\osm2pgsql\900913.sql
[Синтаксис в Linux]
$ wget http://trac.openstreetmap.org/browser/applications/utils/export/osm2pgsql/900913.sql?format=raw -O 900913.sql
$ psql -d gis -f ./900913.sql

Note не требуется делать это, если вы используете PostGIS 1.4 или выше, поскольку SRID уже включен в исходную таблицу spatial_ref_sys.

Вам также следует убедиться, что схема базы данных osm2pgsql синхронизирована with the one Mapnik acts on. Если это не так, вы увидите забавные вещи, совсем не те, что ожидали.

Схема описана в файле default.style для osm2pgsql и в osm.xml (resp. osm-template.xml) для Mapnik. Очень вероятно, что default.style в вашем пакете osm2pgsql устарел, если он не собран из svn. Так что, загружая из svn всяке OSM добро для Mapnik (смотрите ниже) вы также должны обновить default.style, например, с repository browser.

Установка Mapnik

Для установки Mapnik следуйте инструкциям, изложенным здесь: Mapnik/Installation.

Загрузка данных

Просто вызовите osm2pgsql (от имени пользователя, который будет запускать mapnik):

$ osm2pgsql -m -d gis planet-latest.osm.bz2

Этот процесс требует значительный объём свободной памяти (приблизительно, не менее 512 MB). Если память переполнится, программа может обрушиться с какими-нибудь непредсказуемыми последствиями (к примеру, сообщения об ошибках запишутся в файл .osm). Убедитесь, что у вас достаточно свободной оперативной памяти и пространства для свопа перед запуском osm2pgsql.

Опция "-m" разрешает использование сферической проекции Меркатора, что рекомендуется. Данный выбор идёт по умолчанию с версии 0.55, SVN r8320. Некоторые более старые инструменты могут до сих пор ожидать данные, импортированные в других проекциях, таких как "latlong" или несферический Меркатор. Опции командной строки позволяют выбрать эту и иные проекции.

Последний код osm2pgsql также поддерживает простое задание границ при импорте, что ускоряет работу, если вы желаете рендерить лишь малую часть планеты. Например, если вы хотите импортировать Лондон из UK выгрузки планеты:-

$ osm2pgsql --bbox -0.5,51.25,0.5,51.75 -m -d gis uk-080213.osm.bz2

Несколько проблем, которые могут возникнуть

Неверная проекция

Если все тайлы вашей карты исчезают в промежутке 10–20 км в направлении Север/Юг, значит вы забыли добавить опцию "-m" при импорте через osm2pgsql. Начиная с osm2pgsql версии 0.55, сферический Меркатор является проекцией по умолчанию.

Cannot open data file

Если вы пытаетесь загрузить сжатый gzip файл планеты размером более 2GB, вы можете увидеть ошибку открытия файла. Это происходит из-за ошибки некоторых версий zlib, которым не удаётся обработать флаг O_LARGEFILE в open(). Костылём является использование внешнего процесса gzip, который не выдаёт такую ошибку. Указание имени файла "-" заставит osm2pgsql читать данные из STDIN.

gzip -dc planet-080213.osm.gz | osm2pgsql -m -

Переполнение памяти

Если ваша загрузка падает с ошибкой, похожей на

Using projection SRS 900913 (Spherical Mercator)
Setting up table: planet_osm_point
Setting up table: planet_osm_line
Setting up table: planet_osm_polygon
Setting up table: planet_osm_roads
Mid: Ram, scale=100

Reading in file: -
Entity: line 1: parser error : Extra content at the end of the document

^
- : failed to parse
Error occurred, cleaning up

вам вероятно нужно запускать osmpg2sql в режиме slim, который записывает промежуточные объекты на диск, вместо того, чтобы хранить их в RAM. Чтобы сделать это, запустите osm2pgsql с опцией s:

osm2pgsql -m -s -d gis planet-080213.osm.gz

Неверная проекция в pgSQL

Вы можете получить вот такую ошибку сразу после запуска:

Using projection SRS 900913 (Spherical Mercator)
Setting up table: planet_osm_point
SELECT AddGeometryColumn('planet_osm_point', 'way', 900913, 'POINT', 2 );
  failed: ERROR:  AddGeometryColumns() - invalid SRID
CONTEXT:  SQL statement "SELECT AddGeometryColumn('','', $1 , $2 , $3 , 
$4 , $5
)"
PL/pgSQL function "addgeometrycolumn" line 4 at SQL statement

Это означает, что проекция не была инициализирована и вам нужно выполнить 900913.sql в папке osm2pgsql. Чтобы сделать это:

wget http://svn.openstreetmap.org/applications/utils/export/osm2pgsql/900913.sql && psql -f 900913.sql gis

Чтобы всё заработало после этого, перезапустим демон базы данных:

sudo /etc/init.d/postgresql restart

Locked out

После нескольких часов, импорт может выйти с ошибкой вроде:-

ANALYZE planet_osm_line;
 failed: ERROR:  deadlock detected
DETAIL:  Process 28511 waits for AccessExclusiveLock on relation 1064115 of database 18309; blocked by process 12776.
Process 12776 waits for ShareLock on transaction 572766655; blocked by process 28511.

Error occurred, cleaning up

Такое бывает в некоторых версиях PostgreSQL, и происходит, когда идёт попытка выполнить auto-vacuum во время ANALYZE. Решением является запрет auto-vacuum в базе данных. Поскольку данные не обновляются после импорта, от процесса vacuum никакого толку. Установите в файле postgresql.conf опцию:

autovacuum = off

Затем перезапустите сервер базы данных

sudo /etc/init.d/postgresql-8.1 restart

Note: В Debian/Ubuntu вам также надо поправить /etc/cron.d/postgresql-common закомментировав две задачи pg_maintenance (добавьте '#' перед ними), которые всё равно будут вызывать vacuum в регулярном порядке:-

# Run VACUUM ANALYSE on all databases every 5 hours if pg_autovacuum is not
# running
# 2 0,5,10,15,20 * * 1-6 root if [ -x /usr/sbin/pg_maintenance ]; then /usr/sbin/pg_maintenance --analyze >/dev/null; fi

# On Sunday you may wish to run a VACUUM FULL ANALYSE as well
# If you do not run a 24/7 site, you may want to uncomment the next line 
# so as to do a regular VACUUM FULL.  If you need 24/7 connectivity, save
# VACUUM FULL for when you think you really need it.
# 10 3 * * Sun root if [ -x /usr/sbin/pg_maintenance ]; then /usr/sbin/pg_maintenance --full --analyze >/dev/null; fi

Не забывайте возвращать их, если вы делаете что-то ещё в postgres, или производительность медленно падает.

Доступ запрещён

Using projection SRS 900913 (Spherical Mercator)
Setting up table: planet_osm_point
SELECT AddGeometryColumn('planet_osm_point', 'way', 900913, 'POINT', 2 );
 failed: ERREUR:  droit refusé pour la relation geometry_columns
CONTEXT:  instruction SQL « DELETE FROM geometry_columns WHERE
		f_table_catalog = '' AND f_table_schema = 'public' AND f_table_name = 'planet_osm_point' AND f_geometry_column = 'way' »
PL/pgSQL function "addgeometrycolumn" line 94 at EXECUTE statement
instruction SQL « SELECT AddGeometryColumn('','', $1 , $2 , $3 , $4 , $5 ) »
PL/pgSQL function "addgeometrycolumn" line 4 at SQL statement

Error occurred, cleaning up

Пользователь не имеет прав для модификации базы данных gis. Запускайте osm2pgsql от пользователя, которого вы создали для установки postgresql.

Authentication failed

Если вы не можете подключиться к postgres командой psql (такое случается, к примеру, с Ubuntu 9.10 и postgres 8.3):

 $ psql -W gis username
 psql: FATAL:  Ident authentication failed for user "username"

Даже если вы установили пароль для этого пользователя:

 $ sudo -u postgres -s -H
 postgres@aoeu$ psql 
 Welcome to psql 8.3.5, the PostgreSQL interactive terminal.
 ALTER ROLE username PASSWORD 'mypassword';

Вы можете дописать следующие строки в ваш pg_hba.conf (лежит, например, в /etc/postgresql/8.3/main):

 local   all         all                               trust   
 host    all         all         127.0.0.1/32          trust
 host    all         all         ::1/128               trust

Так вы сможете использовать аутентификацию из localhost.

Note that you may have to comment out any existing lines beginning with local all or host all. I had to comment out the following section on Ubuntu 8.10:

# "local" is for Unix domain socket connections only 
#local   all         all                               ident sameuser
# IPv4 local connections:
#host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
#host    all         all         ::1/128               md5

Unknown element

Если вы получили ошибку

Unknown Element name : changeset

значит вам нужно обновить ваш osm2pgsql до последней версии.

Отображение карты с помощью Mapnik

Распакуйте данные lowzoom и береговой линии, которые вы скачали ранее, последние два zip файла требуются с июня 2010:

cd ~/mapnik
tar xzf world_boundaries-spherical.tgz
tar xjf processed_p.tar.bz2 -C world_boundaries
tar xjf shoreline_300.tar.bz2 -C world_boundaries
unzip 10m-populated-places.zip -d world_boundaries
unzip 110m-admin-0-boundary-lines.zip -d world_boundaries

Команды выше должны переместить все шейпфайлы в директорию world_boundaries.

Если вы не сделали это раньше, экспортируйте материалы для Mapnik из репозитория OSM subversion:

svn export http://svn.openstreetmap.org/applications/rendering/mapnik
cd mapnik

Файл osm.xml будет собран из основного osm.xml и файлов XML include из директории inc/. Директория inc/ содержит 3 файла .template, которые передаются скрипту generate_xml.py:

./generate_xml.py -h

Проверьте, устраивают ли вас значения по умолчанию. Вы можете указать значения, отличные от умолчаний. В качестве образца:

./generate_xml.py --host localhost --user `whoami` --dbname gis --symbols ./symbols/ --world_boundaries ./world_boundaries/ --port 5432 --password 'something'

Данная команда берёт файлы .template из inc/ и создаёт non-template версии этих файлов, с вашими настройками. Если вы не можете или не желаете запускать скрипт, вы можете сделать это вручную. Обновление таблицы стилей теперь выполняется просто запуском 'svn update'. SVN не будет трогать сгенерированные файлы настроек. Если в файлы .template добавится новая опция, вам потребуется лишь запустить скрипт generate_xml.py ещё раз.

После того, как вы создали таблицу стилей, вы можете указать mapnik на файл osm.xml. The osm.xml file draws in the files in the inc/ directory, through the use of XML entities. Вам не нужно создавать отдельную копию таблицы стилей.

Вы можете указать, какая область должна быть отрисована, установив границы и уровень зума в generate_(tiles|image).py

Дополнительно: Поддержка запасного шрифта CJK

В данный момент включает в себя шрифт с поддержкой символов CJK (Chinese, Japanese, Korean, (Китайский, Японский, Корейский) et. al. or more generally East Asia). Чтобы добавить поддержку, вам надо открыть файл inc/fontset-settings.xml.inc и раскомментировать строки, содержащие "unifont Medium".

Older mapnik versions did not have unifont included. There you need to: Более старые версии mapnik не включают в себя unifont. В этом случае:

  1. Скачайте GNU Unifont Glyphs
  2. Распакуйте и положите файл ttf в директорию /usr/local/lib/mapnik/fonts (или эквивалентный путь) с остальными шрифтами Mapnik.

Отображение тайлов

Теперь можете вызвать

MAPNIK_MAP_FILE="osm.xml" MAPNIK_TILE_DIR="tiles/" ./generate_tiles.py

generate_tiles.py генерирует тайлы, которые могут раздаваться подходящим сервером.
Загляните внутрь файла, и вы увидите, какая часть планеты и на каком зуме будет рендериться по умолчанию. Ищите bbox и min,max zoom. Если вы хотите выбрать другую область, сходите на openstreetmap.org и щёлкните вкладку "Экспорт"; затем "Выделить другую область". Обведите желаемую область, и четыре текстовых поля покажут, какие значения вам надо указать в порядке [left,bottom,right,top].
Если у вас многоядерная машина, для ускорения генерации тайлов вы можете разделить область, например, на четыре части и запустить несколько процессов одновременно.
Дополнительно можно ускорить процесс, уменьшив влияние узких мест ввода/вывода дисковой подсистемы (iowait time). Узкие места можно найти с помощью iofile.d; в Mac OS X в этом поможет Spotlight, and Postgress statistics collector as parallel disk i/o consumers.

или

./generate_image.py

generate_image.py генерирует цельное изображение для указанных границ. По сути, он берёт тайлы и соединяет их в одну большую картинку. Это пригодится людям, которые хотят просто отрисовать ограниченную область, и избежать возни с тайлами.

Устранение ошибок тайлов

Во время или после рендеринга тайлов могут возникнуть проблемы:

  1. Если на сгенерированных тайлах видно береговую линию, но не хватает улиц, названий улиц, городов и прочих сущностей, пожалуйста проверьте, может ли пользователь базы данных выполнить вход. Скрипты и Mapnik могут тихо смириться с проблемой и рисовать одни берега, без остальных данных. Другая причина может быть в том, что Mapnik собран без поддержки PostGIS.
  2. Версии двух последних скриптов в svn предназначены для работы с Mapnik 0.5, и вы можете получить ошибки, если попытаетесь использовать их с более старой версией. Эти скрипты могут вызывать программу 'convert'. You may need to install ImageMagick or choose not to use 'convert'.
  3. Если вместо азиатских надписей квадратики, значит вы не разрешили шрифт unifont в таблице стилей. Отредактируйте inc/fontset-settings.xml.inc и раскомментируйте строки, содержащие unifont. Шрифт unifont идёт вместе с mapnik, начиная с версии 0.7.0.
    Чтобы убедиться, что unifont корректно установлен в правильные папки, вы можете выполнить в командной строке: ls `python -c "import mapnik;print mapnik.fontscollectionpath"`. Также можно затем проверить доступные font face names: > python -c "from mapnik import FontEngine as e;print '\n'.join(e.instance().face_names())"
  4. Если вы используете файловую систему ext4 (предлагается по умолчанию в таких дистрибутивах, как openSUSE 11.2 и Ubuntu 9.10) и генерируете много тайлов, может так случиться, что скрипт упадёт, потому что не сможет больше создавать новые файлы тайлов. Это проблема файловой системы. Удалите столько файлов, сколько сможете, выполните принудительную проверку файловой системы и/или перейдите на более стабильную файловую систему.
  5. Эта ошибка может быть на некоторых unix дистрибутивах:
 untimeError: PSQL error:
 FATAL:  Ident authentication failed for user "username" (encountered during parsing of layer 'leisure')

На большинстве инсталляций Unix postgres ставится в дефолтной конфигурации для работы с использованием аутентификации 'ident same user'. Для её использования, уберите следующие параметры из конфига: user, port, host, password. Удалите все параметры из команд, например:

 ./generate_xml.py --accept-none --dbname gis --symbols ./symbols/ --world_boundaries ./world_boundaries/

Тогда mapnik подключится описанным способом, как если бы вы запустили "psql gis" в командной строке (без указания host, username или password).

Сокращение дискового пространства

Если вы рендерите всю планету (то есть, bbox = (-180.0, -90.0, 180.0, 90.0)), есть пара вещей, которые могут существенно сократить занимаемое дисковое пространство.

  1. Убедитесь, что бы имеете ровно столько тайлов, соколько вам нужно.
    1. К примеру, максимальное значение x и y для 10 зума равно 1023. Значит, последним тайлом должен быть TILEDIR/10/1023/1023.png.
    2. However, you may have tiles rendered with x and y values beyond that. (I had y values up around 1300)
    3. Delete those first for each zoom level.
  2. На более высоких уровнях зума (8 и далее), многие тайлы дублируются (например пустые океаны и озёра, пространства суши без объектов).
    1. В операционных системах, которые это поддерживают, вы можете создать символические ссылки на наборы тайлов чистой воды и чистой суши.
    2. Но, если Ваша ОС поддерживает, лучше использовать жесткие ссылки - это даст значительно большую экономию места на современных HDD, где размер сектора составляет 4КБ, при размере тайла заливки в 103Б.

Примеры результатов (мои (athlon02)):

  1. На 9 зуме, было занято 3.8 GB (if memory serves). Сейчас 1.4 GB.
  2. На 10 зуме, было занято 12-13 GB на начало. Сейчас 4.58 GB.
  3. Ваши значения могут отличаться.

Конвертация стилей для версий > 2.0.0

При апгрейде до версии 2.0.0 меняются некоторые спецификации таблицы стилей. Все изменения можно увидеть здесь.
Стало быть, 'старые' стили тоже надо обновлять.

С mapnik2 уже идет скрипт (называется 'upgrade_map_xml.py'), который выполняет конвертацию.

Лежит в этой директории:

  ../$mapnik_home_directory/utils/upgrade_map_xml/

Просто наберите:

 ./upgrade_map_xml.py ../$mapnik_scripts/old_style.xml ../$mapnik_scripts/new_style.xml

Или замените старый файл на месте:

 ./upgrade_map_xml.py ../$mapnik_scripts/old_style.xml --in-place

Настройка рендеринга

У вас есть работающая стандартная таблица стилей, и вы можете начать настраивать свою карту.

Контуры

Есть возможность добавить контуры на вашу карту, как это сделано в cyclemap. Контуры основаны на общедоступных данных SRTM (Shuttle Radar Topograhy Mission) NASA. Также можно добавить отображение рельефа и раскраску высот, если такие данные есть в карте.

Стили

Таблица стилей это XML документ, контролирующий большинство аспектов рендеринга объектов, такие как цвет и ширина линий, изображающих различные типы дорог. формат не отличается компактностью и простотой восприятия, но зато он мощный и гибкий. В подвижной карте мы используем версию osm.xml, похожую на файл из SVN:applications/rendering/mapnik/osm.xml. Смотрите Mapnik Example для примера более простой таблицы стилей.

Синтаксис таблицы стилей описан здесь: XMLConfigReference. MinScaleDenominator и MaxScaleDenominator указывают минимальный и максимальный масштабы, на которых должны рендериться определённые символы/объекты.

Вы можете поиграть с со стилями mapnik онлайн здесь: http://dev.openstreetmap.nl/~panman/styledit/ Ссылка не работает...

Посмотрите Cascadenik и Spreadnik, если вы планируете разрабатывать комплексные таблицы стилей.
Для WYSIWYG разработки стилей вы можете использовать QGIS с аддоном mapnik style.

Региональное отображением имен

Для рендеринга имён name:* вместо стандартных тегов name там, где они присутствуют, you can either preprocess the data or modify the postgis database afterwards.

Настройка default.style

Если вы правите default.style, например, чтобы добавить велосипедные дорожки or network data to the database, имейте в виду, что osm2pgsql не использует default.style в рабочей директории, вместо этого он ищет /usr/share/osm2pgsql/default.style.

Можете использовать параметр --style для указания вашего собственного файла default.style. Выполните osm2pgsql -h для дополнительной информации.

Смотрите также