De:Mapnik
From OpenStreetMap
| Other languages: | +/- |
|---|---|
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:
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

