De:Mapnik

From OpenStreetMap

Jump to: navigation, search
Other languages: +/-

English  •  Deutsch  •  Français  • 

Mapnik ist ein Open-Source-Renderer für Kartendaten, den wir zum Rendern des primären Layers Slippy Map für OSM einsetzen.

Die offizielle Homepage von Mapnik ist mapnik.org. Mapnik ist eine freie Werkzeugsammlung zum Rendern von Karten. Sie ist in C++ geschrieben, es gibt auch Python-Bindings. Sie nutzt die AGG-Bibliothek und bietet kantengeglättetes Rendern mit Genauigkeit im Subpixel-Bereich. Mapnik kann ESRI-Shapes, PostGIS and TIFF-Rastergrafiken lesen. Zu Zeit ist es am einfachsten, Mapnik unter Debian Linux selbst zu kompilieren, weil alle Abhängigkeiten einfach mittels apt-get aufgelöst werden können. Jedoch gibt es seit Version 0.5 Binaries für Windows, und Mapnik konnte auch erfolgreich unter Mac OS 10.4 und 10.5 kompiliert werden.

OSM nutzt Mapnik, um Kartenkacheln von 256 × 256 px Größe zu rendern, die dann vom Kartenkachel-Server (tile.openstreetmap.org) bereitgehalten werden. Der JavaScript-Code der Slippy Map referenziert URLs wie z.B. http://tile.openstreetmap.org/7/63/42.png für diese Grafik:

42.png

Siehe auch Slippy map tilenames (en.).

Contents

Datenquelle

Mapnik nutzt nicht nur OSM's Daten, um seine Karten zu erstellen. Küstenlinien beispielsweise werden u.a. unter Nutzung von Daten von VMAP0 gerendert. Siehe auch Coastline#Main_Mapnik_Layer (en.).

Bugs

Bitte melde alle Bugs, die Du findest, über trac unter der "slippy_map"-Komponente und stelle sicher, daß der Fehler in neuerem Code noch nicht gefixt ist.

Vorschläge zur grafischen Darstellung / nicht gerenderte Karteneigenschaften

Auch diese sollten über das trac-System (s.o.) gemeldet werden.

Vorbereitung

(noch im Aufbau)

Datensätze

Um Kartenkacheln zu rendern, sind zwei große Datensätze erforderlich. Daher empfiehlt es sich, damit zu beginnen, sich zuerst diese Datensätze herunterzuladen.

Planet.osm

Planet.osm ist ein "Schnappschuss" der OpenStreetMap-Datenbank. Siehe Planet.osm (en.).

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

Achtung: Wenn man nur ein kleines Gebiet für einen kurzen Test rendern möchte, kann man dafür jede .osm-Datei importieren; man muss nicht den kompletten Planeten rendern. Das ist empfehlenswert, wenn man auf die Schnelle prüfen möchte, dass das Rendern funktioniert, bevor man mehrere Stunden darauf verwendet, mehr als 3 GB herunterzuladen und die Daten der ganzen Erde zu importieren. Man erhält passende .osm-Dateien, indem man ein Gebiet in JOSM herunterlädt und abspeichert, oder indem man einen der kleineren Planeten-Ausschnitte nutzt, die unter Planet.osm#Extracts (en.) aufgeführt sind.

Grenzlinien (weltweit)

Mapnik nutzt externe Daten für Küstenlinien in kleinere Zoombereichen. Siehe Coastline#Main_Mapnik_Layer (en.).

$ wget http://tile.openstreetmap.org/world_boundaries-spherical.tgz (51MB)
$ wget http://hypercube.telascience.org/~kleptog/processed_p.zip (~200MB)

PostgreSQL / PostGIS

Im Folgenden wird davon ausgegangen, dass "username" durch den Namen des Benutzers, der Mapnik ausführen wird, ersetzt wird

Installation

Für Debian Sarge (vormalig stable)

Als root, dann den Anweisungen für etch folgen

# echo deb http://www.backports.org sarge-backports main >> /etc/apt/sources.list
# apt-get -t sarge-backports install ...
Für Debian Etch (und höher)

Um PostGIS (als root) zu installieren:

# aptitude install postgresql-postgis
Für Fedora

Um PostGIS (als root) zu installieren:

# yum install postgis postgresql-server
# service postgresql initdb
# service postgresql start

Datenbank erstellen

Auf den meisten Systemen ist es nötig, daß man als der Super-User der PostgreSQL-Datenbank authentifiziert ist, um viele der folgenden Befehle auszuführen. Häufig kann man sich nicht als dieser Benutzer einloggen, Stattdessen sollte man ein Kommando wie dieses als Benutzer root ausführen:

# su - postgres
$ <commands...>

oder

# sudo -u postgres <command>

oder auf Systemen wie Ubuntu, die eine Ausführung als root nicht zulassen:

user@machine$ sudo -u postgres -i
postgres@machine$ <commands...>

Jetzt kann man als Benutzer postgres folgendes ausführen, um die Datenbank einzurichten:

$ createuser username
$ createdb -E UTF8 -O username gis
$ createlang plpgsql gis

PostGIS

Für Debian Etch (stable)

Als Benutzer postgres oder als PostgreSQL Super-User:

$ psql -d gis -f /usr/share/postgresql-8.1-postgis/lwpostgis.sql
$ echo "ALTER TABLE geometry_columns OWNER TO username; ALTER TABLE spatial_ref_sys OWNER TO username;"  | psql -d gis
Für Debian Lenny oder Sid (testing oder unstable)

Als Benutzer postgres oder als PostgreSQL Super-User:

$ psql -d gis -f /usr/share/postgresql-8.2-postgis/lwpostgis.sql
$ echo "ALTER TABLE geometry_columns OWNER TO username; ALTER TABLE spatial_ref_sys OWNER TO username;"  | psql -d gis
Für Fedora

Als Benutzer postgres oder als PostgreSQL Super-User:

$ psql -d gis -f/usr/share/pgsql/contrib/lwpostgis.sql
$ echo "ALTER TABLE geometry_columns OWNER TO username; ALTER TABLE spatial_ref_sys OWNER TO username;"  | psql -d gis

osm2pgsql

osm2pgsql ist ein Konverter und Import-Werkzeug von Openstreetmap-Daten nach PostgreSQL

Für Debian Etch (stable)

Zuerst muß man die Lenny-Distribution (testing) zur Liste der Paketquellen in /etc/apt/sources.list hinzufügen (als Benutzer root):

# echo deb-src http://ftp.uk.debian.org/debian/ testing main >> /etc/apt/sources.list
# apt-get update

Jetzt kann man das osm2pgsql-Package erstellen und installieren (als Benutzer root):

# apt-get build-dep osm2pgsql
# apt-get -b source osm2pgsql
# dpkg -i osm2pgsql_0.08.20071007-1_i386.deb

Für Debian Lenny oder Sid (testing or unstable)

osm2pgsql ist bereits als Package verfügbar, so daß man es einfach installieren kann!

aptitude install osm2pgsql

Fedora

Löse die Abhängigkeiten auf:

yum install geos-devel proj-devel

Folge den Schritten zur Installation auf Basis des Quellcodes "From source".

Aus dem Quellcode

$ svn co http://svn.openstreetmap.org/applications/utils/export/osm2pgsql/ 
$ cd osm2pgsql
$ make

Mapnik

Für Debian Etch (stable)

Hole das Mapnik-Quellpaket sowie abhängige Pakete mit den folgenden Befehlen:

# aptitude install libboost-thread-dev libboost-filesystem-dev libboost-regex-dev \
libboost-program-options-dev libboost-python-dev libboost-serialization-dev \
libpng12-dev libjpeg62-dev libtiff4-dev zlib1g-dev libfreetype6-dev libpq-dev proj \
libltdl3-dev libfribidi-dev python debhelper python-all-dev python-central
# apt-get source python-mapnik

Wende den folgenden Patch an, so daß Mapnik für Python 2.4 erstellt wird:

--- mapnik-0.4.0/debian/rules   2007-12-19 14:13:11.000000000 +0000
+++ mapnik-0.4.0-etch/debian/rules      2007-12-12 21:47:16.000000000 +0000
@@ -14,7 +14,7 @@
 SOVER=${SONAME}.0.0

 # scons flags
-SCONS_FLAGS=PROJ_INCLUDES=/usr/include PGSQL_INCLUDES=/usr/include/postgresql PROJ_LIBS=/usr/lib DESTDIR=$(CURDIR)/debian/tmp PREFIX=/usr BIDI=yes PYTHON=/usr/bin/python2.5
+SCONS_FLAGS=PROJ_INCLUDES=/usr/include PGSQL_INCLUDES=/usr/include/postgresql PROJ_LIBS=/usr/lib DESTDIR=$(CURDIR)/debian/tmp PREFIX=/usr BIDI=yes PYTHON=/usr/bin/python2.4

 CFLAGS = -Wall -g

Wechsele in das Verzeichnis mapnik-0.4.0 und führe die folgenden Kommandos aus, um das Paket zu kompilieren: (Achtung: Der Parameter -d ist erforderlich, weil die Datei debian/control höhere Versionen für einige Pakete auflistet als diejenigen, die in Etch enthalten sind. Entweder muß also die control-Datei angepasst oder einfach der Parameter -d genutzt werden)

$ cd mapnik-0.4.0
$ fakeroot dpkg-buildpackage -d

Wechsele in das übergeordnete Verzeichnis und installiere die erstellten Pakete als Benutzer root:

$ cd ..
$ su
# dpkg -i python-mapnik_0.4.0-2_i386.deb libmapnik1d_0.4.0-2_i386.deb mapnik-plugins_0.4.0-2_i386.deb mapnik-utils_0.4.0-2_i386.deb

Für Debian Lenny oder Sid (testing or unstable)

Mapnik ist bereits als Package verfügbar, so daß man es einfach installieren kann:

# aptitude install python-mapnik

Kompilieren des neuen Mapnik 0.5 vom Quellcode unter Debian Etch (stable)

Außer den oben für Mapnik 0.4 angegebenen Abhängigkeiten benötigt man iostreams aus der boost-Bibliothek:

# aptitude install libboost-iostreams-dev

Als nächsten Schritt muß man einige symbolische Verknüpfungen erstellen. Der letzte für GDAL ist für OSM nicht notwendig, aber wenn man es auf dem eigenen System installiert hat und es mit Mapnik nutzen möchte, ist auch diese Verknüpfung erforderlich.

# cd /usr/lib
# ln -s libboost_filesystem.so libboost_filesystem-mt.so
# ln -s libboost_regex.so libboost_regex-mt.so
# ln -s libboost_iostreams.so libboost_iostreams-mt.so
# ln -s libboost_program_options.so libboost_program_options-mt.so
# ln -s libboost_thread.so libboost_thread-mt.so
# ln -s libboost_python.so libboost_python-mt.so
# ln -s libgdal1.3.2.so libgdal.so

Als nächstes kann man Mapnik kompilieren und installieren. "XMLPARSER=libxml2" am Ende jeder Zeile ist nur dann erforderlich, wenn man XML-Entities in seinen Stylesheets nutzen möchte.

$ cd /path/where/you/unpacked/the/mapnik/0.5/source/
$ python scons/scons.py PGSQL_INCLUDES=/usr/include/postgresql PROJ_INCLUDES=/usr/include PROJ_LIBS=/usr/lib XMLPARSER=libxml2
# python scons/scons.py install PGSQL_INCLUDES=/usr/include/postgresql PROJ_INCLUDES=/usr/include PROJ_LIBS=/usr/lib XMLPARSER=libxml2

Gemäß den Voreinstellungen wird Mapnik im Verzeichnis /usr/local/lib installiert, so daß man diesen Pfad zur Konfigurationsdatei /etc/ld.so.conf hinzufügen und anschließend 'ldconfig<code>' (als root) ausführen muß.

# cat << "EOF" >> /etc/ld.so.conf
> /usr/local/lib
> EOF
# ldconfig

Laden von Daten

Führe einfach osm2pgsql aus (als derjeniger Nutzer, der Mapnik ausführen wird):

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

Dieser Vorgang erfordert eine beträchtliche Menge an verfügbarem Arbeitsspeicher (nach einer groben Schätzung mindestens 512 MB). Falls ihm der Speicher ausgeht, kann er auf verschiedene, unvorhersehbare Weise abbrechen (zB mit einer Nachricht, derzufolge die .osm-Datei fehlerhaft sei). Man sollte sicherstellen, daß freier Arbeitsspeicher und Swap-Space in ausreichendem Maß verfügbar ist, bevor osm2pgsql ausgeführt wird.

Die Option "-m" aktiviert die Nutzung der sphärischen Mercator-Projektion, die nunmehr empfohlen wird. Einige Werkzeuge nutzen noch immer eine leicht inkorrekte Projektion, die einige Fehler verursachen kann.

Der neueste osm2pgsql-Code unterstützt zudem einen einfachen Bounding-Box-Filter während des Imports, der den Ablauf deutlich beschleunigen kann, wenn man nur einen kleinen Teil der Weltkugel rendern möchte. Wenn man beispielsweise nur London aus dem UK-Planet-Ausschnitt importieren möchte:-

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

Entpacke die neuen Küstenlinien-Daten

$ unzip processed_p.zip

Lade diese Daten in die Postgres-DB und richte die Zugriffsreche ein:

$ shp2pgsql -s 900913 -I -g way processed_p shoreline_a | psql -q gis
$ psql gis
gis=> alter table shoreline_a alter column way set not null;
ALTER TABLE
gis=> CLUSTER shoreline_a_way_gist on shoreline_a;
CLUSTER
gis=> grant select on shoreline_a to public;
GRANT
gis=> \q
$

Einige möglicherweis auftretende Probleme

Wenn man versucht, eine mit gzip komprimierte planet-Datei zu laden, die größer als 2 GB ist, kann eine Fehlermeldung erscheinen, derzufolge die Datei nicht geöffnet werden kann. Dies wird durch einen Fehler in einigen Versionen der zlib-Bibliothek verursacht, die das O_LARGEFILE-Flag nicht an open() weitergeben können. Das Problem kann man umgehen, indem man einen externen gzip-Prozess nutzt, der nicht von diesem Fehler betroffen ist. Die Angabe des Dateinamens "-" veranlaßt osm2pgsql, die Datne von der Standard-Eingabe (STDIN) zu lesen.

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

Nach einigen Stunden kann der Import mit einer Fehlermeldung wie dieser abbrechen:

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

Dies scheint ein Fehler von PostgreSQL zu sein und tritt dann auf, wenn das System versucht, ein auto-vacuum während der ANALYZE auszuführen. Die Lösung besteht darin, alle auto-vacuums in der Datenbank zu deaktivieren. Die Daten werden nach dem Import nicht aktualisiert, so daß der Vakuum-Vorgang nichts sinnvolles ausführt. Dazu setzt man in der Datei postgresql.conf die folgende Option:

autovacuum = off

Anschließend muß der Datenbank-Server neu gestartet werden:

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

Achtung: Unter Debian/Ubuntu muss auch /etc/cron.d/postgresql-common aktualisert werden, indem die beiden pg_maintenance-Tasks auskommentiert werden, die anderenfalls Vakuum-Läufe in regemäßigen Abständen anstoßen würden:-

# 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

Rendern mit Mapnik

Entpacke die Daten für Lowzoom und die Küstenlinien irgendwo:

$ tar xzf world_boundaries-spherical.tgz

Rufe Mapnik aus dem OSM-Subversion-Repository ab (SVN Checkout):

$ svn checkout http://svn.openstreetmap.org/applications/rendering/mapnik
$ cd mapnik

Erstelle eine lokale Kopie des "set-mapnik-env"-Skrips und passe es an die lokalen Dateinamen etc. an. Alle Einstellungen sind im Skript dokumentiert

Erstelle die Datei osm.xml auf Basis von osm-template.xml mittels folgender Befehle:

$ source ./set-mapnik-env
$ ./customize-mapnik-map >$MAPNIK_MAP_FILE

Man kann entscheiden, welche Gebiete gerendert werden sollen, indem man Bounding-Boxen und Zoomlevel in generate_(tiles|image).py angibt.

Jetzt kann man das Skript ...

$ ./generate_tiles.py

... oder ...

$ ./generate_image.py

ausführen, um Karten zu erstellen.

Die Version der beiden letztgenannten Skripte, die derzeit im SVN verfügbar sind, sind zur Nutzung mit Mapnik 0.4 vorgesehen. Das wird wahrscheinlich die zur Zeit meistgenutzte Version sein. Zur Nutzung mit Mapnik 0.5 muss man die Skripte anpassen. Zeile 96 von generate_tiles.py muss wie folgt geändert werden: von

	save_to_file(tile_uri,'png',view)

zu

	view.save(tile_uri,'png')

In Zeile 46 von generate_image.py muss

	save_to_file(map_uri,'png',view)

zu

	view.save(map_uri, 'png')

geändert werden.

Alte Inhalte (noch nicht komplett übersetzt)

Im Folgenden finden sich verschiedene, nicht mehr aktuell Informationen sowie Hinweise, die schlicht noch nicht in die Erläuterungen weiter oben eingefügt wurden,

Herunterladen

Es ist wahrscheinlich das beste, als erstes den OSM SVN-Verzeichnisbaum herunterzuladen (SVN Checkout): siehe Getting The Source (en.). Die Mapnik-Quelltexte werden automatisch mit diesem Verzeichnisbaum verknüpft und erscheint unter svn.openstreetmap.org/applications/rendering/mapnik/mapnik.org/ (Das scheint nicht mehr aktuell zu sein -- Florianschmitt 20:04, 1 March 2008 (UTC))

Stattdessen kann der Mapnik-Quelltext auch für sich allein von mapnik.org heruntergeladen werden.

svn co svn://svn.mapnik.org/trunk mapnik

Dann kann man in das Verzeichnis mapnik wechseln und die Software wie unten dargestellt kompilieren.

Benötigte Bibliotheken

  • gcc/g++ compiler
  • boost
  • libpng
  • libtiff
  • libjpeg
  • libltdl
  • freetype2
  • libpq
  • foro
  • postgresql access
  • python-devel

Für Fedora

kann unvollständig sein

yum install libpng-devel libtiff-devel libjpeg-devel \
libtool-ltdl-devel proj-devel boost-devel freetype-devel \
libpqxx-devel postgis geos-devel python-devel libxml2-devel 

Achtung: Wenn man Mapnik kompiliert, muß man berücksichtigen, daß Mapnik nach den multithreaded Versionen der boost-Bibliotheken sucht. die vor FC8 nicht verfügbar waren. Wenn man also unter einer älteren Version arbeitet, muß man ggf. die Option THREADING=single nutzen.

Es ist auch ein RPM von Mapnik zum Download verfügbar. Das Mapnik-RPM wurde zur Übernahme in Fedore vorgeschlagen. Mit den folgenden Befehlen installiert man das aktuelle RPM:

rpm -ivh http://www.passback.org.uk/packages/fedora/7/i386/passback-release-7-1.fc7.noarch.rpm
yum install mapnik

Diese Befehle sollten nun Mapnik installieren und die nötigen Abhängigkeiten berücksichtigen.

Für Gentoo

Um die nötigen Software-Pakete zu installieren, kann man folgendes versuchen:

emerge --ask --noreplace dev-libs/boost media-libs/libpng \
media-libs/tiff media-libs/jpeg media-libs/freetype \
sci-libs/proj dev-db/postgis sci-libs/gdal

Vorsicht: dev-libs/boost müssen mit dem "threads" USE Flag kompiliert werden -- wird es nicht gesetzt, wird man eine boost_thread-mt Fehlermeldung erhalten..

Nach der Kompilierung kann man PstgreSQL mit dem Kommando

emerge --config =postgresql-8.0.13

einrichten und der Server mit

/etc/init.d/postgresql start

starten.

Falls der Server sich weigert, zu starten, weil keine Konfigurationsdatei vorhanden ist, kann man folgendes (als root) versuchen:

su -s /bin/bash -c "initdb -D /var/lib/postgresql/data" postgres

Jetzt sollte es möglich sein, den PostgreSQL-Server zu starten.

Den Quelltext übersetzen (kompilieren) und installieren

Ggf. Verlinken der Boost-Bibliotheken

Debian: Verlinken der Boost-Bibliotheken

ln -s /usr/lib/libboost_python.so /usr/lib/libboost_python-gcc-mt.so

(Dies ist notwendig, weil der Linker die letztere Bibliothek erwartet, das Debian-Softwarepaket aber die erstere bereitstellt.)

Unter Debian Etch wird man auch die folgenden, für Ubuntu angegebenen Kommandos ausführen müssen, i had to issue the following commands described for Ubuntu - Florianschmitt 20:55, 17 November 2007 (UTC)

Debian: Verlinken der Boost-Bibliotheken Unter Ubuntu muß man möglicherweise die folgenden Befehle im Verzeichnis <code>/usr/lib ausführen:

 ln -s libboost_python.so libboost_python-mt.so
 ln -s libboost_thread.so libboost_thread-mt.so
 ln -s libboost_filesystem.so libboost_filesystem-mt.so
 ln -s libboost_regex.so libboost_regex-mt.so
 ln -s libboost_program_options.so libboost_program_options-mt.so

Kompilieren / installieren

Unter allen Betriebssystemen: zum Installieren

python scons/scons install

ausführen, oder ohne Bindings:

python scons/scons install BINDINGS=none

Unter Debian muß man ggf.

python scons/scons install THREADING=single

nutzen, um scons dazu zu bringen, die boost-Bibliotheken zu finden.


Unter Gentoo muß man eventuell folgendes ausführen:

python scons/scons GDAL_INCLUDES=/usr/include/ install

Demo-Grafik rendern

Ist die Installation abgeschlossen, kann man versuchen, das Demo im Verzeichnis mapnik/demo/c++ auszuführen:

g++ -O3 -I/usr/local/include -I/usr/include/boost -I/usr/include/freetype2  -L/usr/local/lib -lmapnik rundemo.cpp -o rundemo

und dann

./rundemo /usr/local/lib/mapnik/input

eingeben. Diese Befehle sollten eine JPEG- und eine PNG-Grafik einer Karte generieren.

Falls man eine Fehlermeldung wie folgende erhält:

./rundemo: error while loading shared libraries: libmapnik.so: cannot open shared object file: No such file or directory

muß man wahrscheinlich sicherstellen, dass das Verzeichnis /usr/local/lib in /etc/ld.so.conf aufgelistet ist, und ldconfig als root ausführen.

PostgreSQL

Note: On most PostgreSQL installs, you'll need to be root to be able to connect to the database as the postgres user (-Upostgres). Alternatively you may execute "su postgres" as root to take on the privileges of the postgres administrator. If you have problems connecting as postgres, or wish to change who can connect as postgres, you'll need to edit your pg_hba.conf, and possibly also pg_ident.conf.

If your user account hasn't been setup for postgres, run

createuser -Upostgres

and follow the prompts.

If you don't already have a database set up, you'll need to create one. If your user has "create database" privileges, just do:

createdb -EUNICODE <DBNAME>

Otherwise, you'll need to create the database as the postgres user, and then grant rights to yourself:

createdb -Upostgres -EUNICODE <DBNAME>
psql -Upostgres <DBNAME>
GRANT ALL ON SCHEMA PUBLIC TO <USERNAME>;
\q

Note: the osm2pgsql program assumes the database name is gis, so you will need to use that unless you want to change the osm2pgsql code.

You are now ready to setup the PostGIS extensions.

PostGIS

You will need to set up various functions, tables etc as the database superuser (postgres). Once they are setup, you can grant permissions on them to the user you'll normally user.

You might need to copy usr/lib/postgresql/8.1/lib/liblwgeom.so.1.1 to /opt/postgresql/lib, creating the directory if needed. Then, add /opt/postgresql/lib to a new file /etc/ld.so.conf.d/postgis.conf, and run ldconfig.

Set up the Mapnik PostGIS plugin

python scons/scons.py PGSQL_INCLUDES=/usr/include/postgresql PGSQL_LIBS=/usr/lib/postgresql/8.1/lib install

Create the plpgsql language in the DB

For PostgreSQL earlier than v8.0, use psql -Upostgres <DBNAME>, and execute:

create language plpgsql;

For PostgreSQL 8.0 and later, run:

createlang -Upostgres plpgsql <DBNAME>

Load the postgis extensions

psql <DBNAME> <  lwpostgis.sql
  • Note 1: If you get permissions errors, add -Upostgres before <DBNAME>
  • Note 2: If you don't know where lwpostgis.sql is, check /usr/share/postgresql/contrib/ (or /usr/share/postgresql-<version>-postgis/lwpostgis.sql).

To give your normal user permissions on the new PostGIS stuff, run psql -Upostgres <DBNAME>, and execute:

GRANT ALL on geometry_columns TO <DBUSER>;
GRANT ALL on spatial_ref_sys TO <DBUSER>;

Getting planet.osm in to the db

Prerequisites

Geos

Get geos:

  • On Debian, install 'libgeos-dev'
  • On Gentoo, emerge sci-libs/geos

Otherwise:

cd /opt
svn co http://svn.refractions.net/geos/trunk geos
cd geos
./autogen.sh
./configure
make
UTF8sanitize

Compile UTF8sanitize:

cd svn.openstreetmap.org/applications/utils/planet.osm/C
make
7z

If you want to download the smaller 7z-compressed planets, get 7z

  • On Gentoo: emerge app-arch/p7zip
osm2pgsql
cd svn.openstreetmap.org/applications/utils/export/osm2pgsql
make

Importing planet.osm

Download planet.osm. Then, change to the osm2pgsql directory (cd svn.openstreetmap.org/applications/utils/export/osm2pgsql), and run the importer as follows:

If you have the 7-zip archive of planet.osm, use:

7z x -so /path/to/planet.osm.7z | ./osm2pgsql -

If you have the bzip2 version:

./osm2pgsql /path/to/planet.osm.bz2

or

bzcat planet.osm.bz2 | ./osm2pgsql -

If you already have planet.osm uncompressed, then you can simply do:

./osm2pgsql planet.osm

This process requires significant amounts of free memory (by rough estimate, at least 512 MB). If it runs out of memory, it can fail in somewhat unpredictable ways (e.g. messages suggesting that errors exist in the .osm file). Make sure that you have sufficient free RAM and swap space available before running osm2pgsql.

You can also enable a pgsql intermediate storage by calling osm2pgsql with the -s (or --slim) option. osm2pgsql will then store the intermediate data in the database, thereby using less RAM, but it will be much slower.

Note that that will connect to database 'gis' by default. If you want to use another database name, you'll need to pass it at run time (e.g. osm2pgsql -d foo )

Setting up mapnik

Mapnik uses external data for lower zoom levels, so you'll have to get that first (about 600M tarball, 1.2G unpacked):

wget http://artem.dev.openstreetmap.org/files/world_boundaries.tar.bz2
tar xjf world_boundaries.tar.bz2

Checkout the Mapnik stuff from the OSM subversion repository at svn.openstreetmap.org/applications/rendering/mapnik .

Create a local copy of the "set-mapnik-env" script and edit it to fit your local file names etc. All the settings are documented inside this script.

Create the osm.xml file from osm-template.xml by calling:

source ./set-mapnik-env
./customize-mapnik-map >$MAPNIK_MAP_FILE

You can now call

./generate_tiles.py

or

./generate_image.py

to generate maps.

More stuff

See in Trac: http://trac.openstreetmap.org/browser/applications/rendering/mapnik

Personal tools
recent changes