DE:Mapnik

From OpenStreetMap Wiki
Jump to: navigation, search
Verfügbare Sprachen — Mapnik
· Afrikaans · Alemannisch · aragonés · asturianu · azərbaycanca · Bahasa Indonesia · Bahasa Melayu · Bân-lâm-gú · Basa Jawa · Baso Minangkabau · bosanski · brezhoneg · català · čeština · 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 · português do Brasil · română · shqip · slovenčina · slovenščina · Soomaaliga · suomi · svenska · Tiếng Việt · Türkçe · Vahcuengh · vèneto · Wolof · Yorùbá · Zazaki · српски / srpski · беларуская · български · қазақша · македонски · монгол · русский · тоҷикӣ · українська · Ελληνικά · Հայերեն · ქართული · नेपाली · मराठी · हिन्दी · অসমীয়া · বাংলা · ਪੰਜਾਬੀ · ગુજરાતી · ଓଡ଼ିଆ · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · සිංහල · ไทย · မြန်မာဘာသာ · ລາວ · ភាសាខ្មែរ · ⵜⴰⵎⴰⵣⵉⵖⵜ · አማርኛ · 한국어 · 日本語 · 中文(简体)‎ · 吴语 · 粵語 · 中文(繁體)‎ · ייִדיש · עברית · اردو · العربية · پښتو · سنڌي · فارسی · ދިވެހިބަސް
Mapnik
Screenshot of Mapnik
Website: http://mapnik.org
Version: 3.0.10 (2016-02-29)
Lizenz: LGPL
Plattformen: Windows, macOS, und Linux
Programmiersprachen: C++, und Python

Der Begriff Mapnik wird bei OSM in zwei Zusammenhängen benutzt:

  • Zum einen wird damit eine Software bezeichnet, mit der es möglich ist, aus einer Datenbank eine Karte zu erzeugen. Solch eine Zeichensoftware nennt man auch Renderer.
  • Zum anderen wird damit die Karte auf der Hauptseite von OSM bezeichnet ([1]). Sie ist auch unter dem Namen Slippy Map bekannt.

Dieser Artikel beschäftigt sich mit Ersterem, also mit der Software an sich.

Die offizielle Homepage des Programmes Mapnik ist mapnik.org. Mapnik ist eine freie Werkzeugsammlung zum Rendern von Karten. Sie ist in C++ geschrieben, es gibt aber auch Python-Anbindungen. Sie nutzt die AGG-Bibliothek und bietet kantengeglättetes Rendern mit Genauigkeit im Subpixel-Bereich. Mapnik kann ESRI-Shapes, PostGIS und TIFF-Rastergrafiken lesen. Zurzeit 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 (Siehe auch Slippy map tilenames (en)) für diese Grafik:

42.png

Contents

Geschichte

Mit der Zeit werden bspw. Symbole oder Farben geändert. Besonders aber Ende Oktober 2015 gab es in der Mapnik-Karte weitreichende Änderungen des highway=*-Tags:

Tag vorher nachher
highway=motorway blau eingefärbt magentafarben eingefärbt dünner
highway=trunk grün eingefärbt hellrot eingefärbt dünner
highway=primary rot eingefärbt hellorange eingefärbt (wie secondary zuvor) dünner
highway=secondary hellorange eingefärbt hellgelb eingefärbt (wie tertiary zuvor) dünner
highway=tertiary hellgelb eingefärbt weiß eingefärbt (wie unclassified zuvor) dünner
highway=unclassified weiß eingefärbt dünner
highway=residential weiß eingefärbt dünner

Datenquellen

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

Fehler

Bitte melde alle Bugs, die du findest, über trac unter der "slippy_map"-Komponente und stelle sicher, dass der Fehler in neuerem Code noch nicht behoben 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/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, ob das Rendern funktioniert, bevor man mehrere Stunden darauf verwendet, mehr als 37 GB (Stand: 28.August 2014) 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 (50M)
$ wget http://tile.openstreetmap.org/processed_p.tar.bz2 (390M)
$ wget http://tile.openstreetmap.org/shoreline_300.tar.bz2 (42M)

Seit Juni 2010 benötigt osm-mapnik noch zwei zusätzliche Datenquellen:

$ wget http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_admin_0_countries.zip # (5.1 MB)
$ wget http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_boundary_lines_land.zip # (44 KB)

Alle Daten sollten so entpackt werden, dass die Einzeldateien unter mapnik/world_boundaries liegen, also insbesondere ohne weitere Unterverzeichnisse.

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 Ubuntu
#  sudo apt-get install postgresql-8.3 postgis postgresql-8.3-postgis
Für Ubuntu (10.10)
# sudo apt-get install postgresql-8.4 postgresql-8.4-postgis postgresql-contrib-8.4
Für Fedora

Um PostGIS (als root) zu installieren:

# yum install postgis postgresql-server
# service postgresql initdb
# service postgresql start
Für Gentoo

Um PostGIS (als root) zu installieren:

# emerge =postgresql-server-9.2.7  # PostgreSQL installieren, genaue Version angeben da postgis nur mit der 9.2.x Version funktioniert
# emerge --config =dev-db/postgresql-server-9.2.7  # Datenbank initialisieren
# /etc/init.d/postgresql-9.2 start # Datenbankserver starten
# rc-update add postgresql-9.2 default # Postgres zum Standard-Runlevel hinzufügen
# emerge postgis # postgis-Erweiterung installieren

(Je nach eingestellter USE-Variable, muss diese evtl angepasst werden. Hier war es notwendig minizip der USE-Variable hinzuzufügen. Bei einem auftretenden Fehler beim Erstellen aufgrund eines nicht gefunden /opt/sun-jre-bin-1.6.0.xx/include Verzeichnisses, nicht das SUN (bzw Oracle) JRE sondern das IcedTea JDK verwenden. Installierte Version anzeigen lassen mit java-config --list-available-vms und setzen mit java-config --set-system-vm n wobei n die in der Liste angezeigte Nummer ist.)

/etc/postgis_dbs editieren:

pguser="postgres"
databases=( "gis" )
from_template="template1"
configured="true"

Da die Datenbank "gis" noch nicht existiert, muss diese erst angelegt werden. Entweder über eine graphisches Administrationstool oder an der Konsole. Hierfür (als root) zum User "postgres" werden und dann die Datenbank anlegen:

# su postgres
$ psql
postgres=# create database gis;
\q

Danach die Postgis-Erweiterung konfigurieren mit:

# emerge --config =dev-db/postgis-2.0.3
Für Windows / Win32
  • Herunterladen von http://www.postgresql.org/download/windows
  • Version 9. läuft, Version 9.1 ohne Gewähr
  • Postgis unterstützt noch keine 64-bit, für Windows 7 muß also auch die 32-bit-Version installiert werden.
  • Nach der Installation den User Administrator anlegen, mit allen Zugriffsrechten.
  • Die Passwortabfrage in der Datei /PostgreSQL/8.x/data/pg_hba.conf deaktivieren, indem man das Wort md5 gegen trust ersetzt.

Wichtig: Die Datenbank postgis wird von der Installation des postgresql Servers automatisch angelegt. osm2pgsql muss daher mit der Option -d postgis und nicht -d gis aufgerufen werden. Man kann aber auch jeden beliebigen anderen Datenbanknamen benutzen.

Wget Binary (Unix Befehle) für Windows

Download: http://users.ugent.be/~bpuype/cgi-bin/fetch.pl?dl=wget/wget.exe oder alle Unix Befehle http://downloads.sourceforge.net/unxutils/UnxUtils.zip?modtime=1172730504&big_mirror=0

Es gibt auch eine Wget Version mit eine grafischen Oberfläche, benötigt aber DotNet. Download VisualWget: http://khomsan.ph.googlepages.com/vwget-2.0.15-bin.zip für DotNet siehe http://khomsan.ph.googlepages.com/netfx2

Datenbank erstellen

Auf den meisten Systemen ist es nötig, dass 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

Rechte für den Datenbank Zugriff auf den aktuellen Benutzer anpassen

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.3-postgis/lwpostgis.sql
$ echo "ALTER TABLE geometry_columns OWNER TO username; ALTER TABLE spatial_ref_sys OWNER TO username;"  | psql -d gis
Für Ubuntu

Als Benutzer postgres oder als PostgreSQL Super-User:

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

Achtung: aufpassen mit den Versionsnummern

Achtung: neuer Pfad/Dateiname bei PostgreSQL 8.4.x:

psql -d gis -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql
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
Für Gentoo

Als Benutzer postgres:

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

Installation von Postgis

Postgis herunterladen von: http://postgis.refractions.net/download/windows/#windbinaries

Die zum installierten PostgreSQL passende Version herunterladen:

postgis-pg84-setup-1.5.2-1.exe

User Name: postgres

Password: osm

Port: 5432

Database Name: postgis

neuen User anlegen:

%ProgramFiles%\PostgreSQL\8.4\bin\createuser -U postgres osmuser

Zwischenfrage superuser mit j beantworten

Neue Datenbank für osm2pgsql anlegen:

(vorzugsweise in batch-Datei osmdbneu.bat kopieren)

%ProgramFiles%\PostgreSQL\8.4\bin\createdb -U postgres -E UTF8 -O osmuser osmdb
%ProgramFiles%\PostgreSQL\8.4\bin\createlang -U postgres plpgsql osmdb
%ProgramFiles%\PostgreSQL\8.4\bin\psql -U postgres -d osmdb -f "%ProgramFiles%\PostgreSQL\8.4\share\contrib\postgis-1.5\postgis.sql"
%ProgramFiles%\PostgreSQL\8.4\bin\psql -U postgres -d osmdb -f "%ProgramFiles%\PostgreSQL\8.4\share\contrib\postgis-1.5\spatial_ref_sys.sql"
%ProgramFiles%\PostgreSQL\8.4\bin\psql -U postgres -d osmdb -f "%ProgramFiles%\PostgreSQL\8.4\share\contrib\hstore.sql"

Bei Windows 7 muß statt %ProgramFiles%\PostgreSQL\8.4\bin\psql hier "%ProgramFiles(x86)%\PostgreSQL\9.0\bin\psql" verwendet werden (Anführungszeichen wegen Leerzeichen im Verzeichnisnamen).

Wenn es Fehlermeldungen hagelt, probeweise nur die ersten beiden Zeilen in die batch-Datei schreiben.

osm2pgsql

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

Für Debian Etch (stable)

Zuerst muss 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

Die Versionsnummer im Dateinamen ist inzwischen natürlich eine andere.

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

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

aptitude install osm2pgsql

Für Ubuntu

osm2pgsql ist bereits als Package verfügbar, so dass man es einfach installieren kann:

sudo apt-get install osm2pgsql

Für Gentoo

osm2pgsql ist im Portage verfügbar und kann einfach per emerge installiert werden (als root):

# emerge osm2pgsql

(Bei mir gab es einen Fehler bei dieser Installationsmethode, den ich bis jetzt noch nicht lösen konnte. Deshalb habe ich, wie weiter unten beschrieben, das Programm aus den Quellen installiert (geos muss installiert sein: emerge geos)

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

$ git clone git://github.com/openstreetmap/osm2pgsql.git 
$ cd osm2pgsql
$ ./autogen.sh
$ ./configure
$ make
$ make install 

Windows / Win32 Binary

Download-Quelle der osm2pgsql Win32 Binary Version:

Herunterladen und in das Verzeichnis des Planet-File kopieren/entpacken.

Wichtig: Diese Version funktioniert (lt. Test) nicht mit allen Planet-Files. Es erscheint nach ca. 240000k Nodes die Fehlermeldung: Error allocating nodes, insofern schein es da eine Begrenzung bzw. einen Fehler in der Version zu geben.

Danach unter (Windows) Start->Ausführen->cmd (und Enter) und in das Planet-File Verzeichnis wechseln. Beispiel (Wäre das Verzeichnis des Planet-File f:\osmdata):

f:
cd osmdata
osm2pgsql -d osmdb -S Pfad zum default.style/default.style planet-latest.osm.bz2

Sehr wichtig: Ich habe hier osmdb als Datenbankname angegeben, wie weiter oben angelegt. Man kann auch die von postgis installierte Datenbank gis oder postgis nehmen. Bei Windows ist die Angabe eines default.style sehr wichtig, da der defaultwert hier einen Unixpfad enthält der ein Ausführen verhindert. Die default.style solltet ihr in eurem osm2pgsql Verzeichnis finden. Zudem muss man nach der Installation den User mit dem Windowsanmeldenamen anlegen. angelegt haben, mit allen Zugriffsrechten und die Passwortabfrage in der Datei /PostgreSQL/8.x/data/pg_hba.conf deaktivieren, indem man das Wort md5 gegen trust ersetzt. Das lässt sich unter Windows auch mit dem pgAdmin III erledigen. Alternativ kann man auch die Parameter -U für User und ein Passwort mit angeben. Die genaue Syntax erhält man bei Aufruf von osm2pgsql --help

Erst danach funktioniert der Befehl (ohne die üblichen Fehlermeldung ... fe_sendauth: no password supplied oder function addgeometrycolum ... not found).

Performance: Der Speicherverbrauch geht über die 1GB-Grenze hinaus. Daher ist es wichtig, den virtuellen Speicher aktiviert zu haben und auf eine eigene Partition zu legen. Die Verarbeitungsgeschwindigkeit liegt bei ca. 30.000 Knoten/Sekunde (Getestest mit einer 3.2GHz CPU und 1GB RAM).

Virtueller Speicher trotz 4095 zu klein: Sollte der virtuelle Speicher nicht ausreichen, so kann man (unter WindowsXP/2000) ihn auf einzelne Ordner der gleichen Partition verteilen, um die 4095-Grenze zu umgehen. Siehe: http://support.microsoft.com/kb/237740

Wer weniger Speicher zur Verfügung hat, kann osm2pgsql auch im slim mode betreiben. Dazu einfach --slim als Parameter übergeben und bei bedarf auch die Speichergröße mit --cache xxxxMB begrenzen. Hier aber nicht den gesamten Arbeitsspeicher eintragen; das Betriebssystem möchte auch noch ein paar MB für sich beanspruchen dürfen ;-)

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 muss 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 dass man es einfach installieren kann:

# aptitude install python-mapnik

Für Ubuntu

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

#  sudo apt-get install python-mapnik

Für Gentoo

Mapnik ist ebenfalls im Portage und kann als root einfach mit emerge installiert werden:

# emerge mapnik

Die Datei 900913.sql muss noch in die Datenbank geladen werden (als User postgres). Diese sollte nach der Installation von osm2pgsql im Verzeichnis /usr/local/share/osm2pgsql/ zu finden sein (oder in den Quellen von osm2pgsql):

$ psql -d gis -f 900913.sql 

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 muss 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 dass man diesen Pfad zur Konfigurationsdatei /etc/ld.so.conf hinzufügen und anschließend 'ldconfig' (als root) ausführen muss.

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

Für Microsoft Windows (Windows 2000 und höher)

(neuere Versionen von Python werden noch nicht mit Mapnik unterstützt)

    • Installation nach C:\Python27\
  • Download von Mapnik: http://mapnik.org/download/
    • (Wichtig!) Entpacken in C:\mapnik-2.0.1rc0\ (sonst muss man in der Installation noch Pfade umändern)

Systemvariablen ändern

Öffne dazu Systemsteuerung -> System dann den Reiter Erweitert und dort die Umgebungsvariablen. Erstelle eine neue Umgebungsvariable mit folgenden Werten. Achtung! Nur neu anlegen, wenn PATH noch nicht vorhanden ist. Ansonsten muss der Wert vor das vorhandene gesetzt werden.

Name: PATH
Wert: C:\mapnik-2.0.1rc0\lib;C:\Python27;...

Eine weitere für Python

Name: PYTHONPATH
Wert: C:\mapnik-2.0.1rc0\python\2.7\site-packages
  • Diese Systemvariablen testen

In die Kommandozeile wechseln (Start - Ausführen - CMD)

folgendenden Befehl eingeben: PATH Jetzt sollte PATH=C:\mapnik-2.0.1rc0\lib erscheinen


  • Python testen

Öffne Python auf der Kommandozeile C:\Python27\python.exe In der nun geöffneten Python Konsole folgenden Befehl eingeben: "from mapnik import *" (ohne ")

Sollte hier kein Fehler erscheinen dann ist alles richtig. Die Python Konsole wird mit "Ctrl + Z" bzw. "Strg + Z" beendet.


  • Demo ausprobieren


Unter C:\mapnik-2.0.1rc0\demo\python befindet sich die rundemo.py Diese Datei kann man per Doppelklick direkt im Explorer aufrufen.

Oder man nutzt die Kommandozeile

cd c:\mapnik-2.0.1rc0\demo\python\
C:\Python27\python.exe rundemo.py

Wenn alles funktioniert, sind die Dateien demo.png, demo256.png, demo_high.jpg und demo_low.jpg im selben Verzeichnis zu finden.

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, dass 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öglicherweise 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 "-" veranlasst osm2pgsql, die Daten 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 dass der Vakuum-Vorgang nichts sinnvolles ausführt. Dazu setzt man in der Datei postgresql.conf die folgende Option:

autovacuum = off

Anschließend muss 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

Zu wenig Arbeitsspeicher

Beim Import der Daten in die Datenbank, kann mit der Option -s (für slim) angegeben werden dass temporäre Daten in der Datenbank gespeichert werden sollen und nicht im Arbeitsspeicher. Dies führt zwar zu einer Verlangsamung des Prozesses, aber öfters ist das der einzig funktionierende Weg.

Rendern mit Mapnik

Allgemein

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

The osm.xml file is built up out of the core osm.xml file and XML include files in the inc/ directory. The inc/ directory holds 3 .template files, which are used as inputs for the generate_xml.py script:

./generate_xml.py -h

Check to see if the defaults that the script provides are ok for you. You'll have to provide the values where there are no defaults. For instance:

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

This command takes the .template files from inc/ and creates non-template versions of those files, with your settings. If you can not or do not want to run the script, you can do this by hand as well. Updating the stylesheet from SVN is now as easy as running an 'svn update'. SVN will never touch the generated settings files. If there is ever a new option added to the .template files, only then do you need to run the generate_xml.py script again.

After you have set up the stylesheet this way, you can point mapnik to the osm.xml file. The osm.xml file draws in the files in the inc/ directory, through the use of XML entities. You do not need to create another copy of the stylesheet.

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.


Umwandeln von Stylesheets für Versionen > 2.0.0

Es wurden einige Veränderungen an den Spezifikationen der Stylesheets während des Upgrades auf Version 2.0.0 gemacht. Sämtliche Veränderungen werden hier beschrieben.
Dementsprechen müssen 'alte' Stylesheets auf die neuen Anforderungen angepasst werden.

Das SVN enthält mittlerweile die neuen Stylesheets, die aber nicht mehr mit Version 0.7.1 laufen.

Praktischerweise wird von den Entwicklern direkt ein einsprechendes Skript ('upgrade_map_xml.py') geliefert, welches die Konvertierung übernimmt.

Es befindet sich in dem Ordner:

  ../$mapnik_home_directory/utils/upgrade_map_xml/

Einfach das eingeben:

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

Oder so, um das Original direkt zu überschreiben:

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

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, muss man berücksichtigen, dass Mapnik nach den multithreaded Versionen der boost-Bibliotheken sucht. die vor FC8 nicht verfügbar waren. Wenn man also unter einer älteren Version arbeitet, muss 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 Fedora 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 muss man möglicherweise die folgenden Befehle im Verzeichnis /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 muss man ggf.

python scons/scons install THREADING=single

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


Unter Gentoo muss 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

oder:

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

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

muss 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