DE:Mapnik
Mapnik | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Lizenz: | GNU LGPL | |||||||||||||||||||
Plattformen: | Windows, macOS und Linux | |||||||||||||||||||
Version: | 3.0.19 (2016-03-06) | |||||||||||||||||||
Sprache: | Englisch | |||||||||||||||||||
Webseite: | http://mapnik.org | |||||||||||||||||||
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. https://tile.openstreetmap.org/7/63/42.png (Siehe auch Slippy map tilenames (en)) für diese Grafik:
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 https://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 57 GB (Stand: Mai 2017) 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)
- Download von Python 2.7: http://www.python.org/download/releases/2.7.2/
(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