DE:Ajoessen/Mapnik
Installation von Python
Herunterladen von:
http://python.org/download/releases/2.7.2/
=> python-2.7.2.msi
Mapnik läuft (noch) nicht mit Python 3.0 ff, und 64-bit unter Windows wird auch noch nicht von Mapnik unterstützt
Installationsverzeichnis: C:\Python27
Installation von Mapnik
Herunterladen von:
http://mapnik.org/news/2011/11/29/windows-binaries-progress/
=> win32 binaries
mapnik-2.0.1rc0.zip
entpacken und nach C:\mapnik-2.0.1rc0 verschieben
Anpassung der Systemvariablen
Windows XP:
Rechtsklick auf Arbeitsplatz->Eigenschaften
Erweitert->Umgebungsvariablen
Windows 7:
Start/Rechtsklick auf Computer->Eigenschaften
Erweiterte Systemeinstellungen->Umgebungsvariablen
Benutzervariablen
PATH bearbeiten, falls vorhanden; sonst: Neu
Wert der Variablen: C:\mapnik-2.0.1rc0\lib;C:\Python27; vorne anfügen
falls neu: %PATH% dahinter setzen
ok
PYTHONPATH bearbeiten, falls vorhanden
sonst: Neu
Name der Variablen: PYTHONPATH
Wert der Variablen: C:\mapnik-2.0.1rc0\python\2.7\site-packages; vorne anfügen
ok
ok
ok
Computer/C:/Python27
python.exe starten
>>>from mapnik import *
>>>Strg+Z
Wenn eine Fehlermeldung kommt, war der Verzeichniseintrag bei PYTHONPATH falsch
Verzeichnis wechseln zu:
C:\mapnik-2.0.1rc0\demo\python
rundemo.py starten
--->demo.png und andere Bilder werden erzeugt
(Pycairo ist nicht verfügbar, wird aber auch nicht benötigt)
Hilfsprogramme herunterladen
Notepad++ herunterladen von
http://notepad-plus-plus.org/download
tortoise svn herunterladen von
http://tortoisesvn.net/downloads
Nach Installation Neustart notwendig
Downloadordner anlegen, z.B. D:\Download
Datei/SVN checkout
OpenCommandWindowHere (nur für Windows XP) von
http://windows.microsoft.com/en-US/windows/downloads/windows-xp?T1=PT
(bei Windows 7 gibt es dafür "Eingabeaufforderung hier öffnen" im Kontextmenü, eventuell mit shift-Rechtsklick)
OSM-Mapnik-Komponenten herunterladen
Im Downloadordner:
Datei/SVN Checkout
URL: http://svn.openstreetmap.org/applications/rendering/mapnik
Checkout directory: D:\Download\mapnik
Anschließend den gesamten Ordner nach D:\osm\mapnik kopieren,
damit beim nächsten Update die eigenen Änderungen nicht überschrieben werden.
Ordner world_boundaries anlegen
wget http://tile.openstreetmap.org/processed_p.tar.bz2 wget http://tile.openstreetmap.org/shoreline_300.tar.bz2 wget http://tile.openstreetmap.org/world_boundaries-spherical.tgz
http://www.naturalearthdata.com/downloads/10m-cultural-vectors/
Download populated places http://www.naturalearthdata.com/downloads/110m-cultural-vectors/
http://www.naturalearthdata.com/downloads/110m-cultural-vectors/110m-admin-0-countries/
herunterladen und jeweils zweimal entpacken
Anpassen der osm-mapnik-Komponenten
generate_xml.bat
generate_xml.py --dbname osmdb --host 'localhost' --user osmuser --port 5432 --password '' --prefix planet --inc inc pause
Diese Datei per Doppelklick ausführen. Damit werden die Vorlagen für datasource etc zu "richtigen" inc-Dateien.
Verzeichnis D:\osm\mapnik\inc
Datei entities.xml.inc
<!ENTITY srs4326 "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0">
Verzeichnis D:\osm\mapnik
osm.xml anpassen:
(nur wenn man auf Küstenlinien verzichten will)
Map bgcolor="#b5d0d0" --> Map bgcolor="#ffffff" &layer-shapefiles; --> <!--&layer-shapefiles; -->
generate_image.py anpassen mit notepad++:
try: import mapnik except: import mapnik ... mapfile = "osm.xml"
Koordinaten für Renderbereich auswählen
z.B.
ll = (6.72, 51.3, 6.74, 51.305) z = 4
Doppelklick auf generate_image.py erzeugt image.png
wenn nicht:
Rechtsklick ->Eingabeaufforderung hier öffnen bzw Open Comand Window Here, um Fehlermeldungen lesen zu können
generate_tiles.py anpassen:
try: import mapnik except: import mapnik ... NUM_THREADS = 1
ggf anpassen: Wenn man mehrere Prozessoren hat, höher setzen
exists = "exists" --> self.render_tile(tile_uri, x, y, z)
(damit auf jeden Fall immer gerendet wird)
home = 'D:/' mapfile = 'osm.xml' tile_dir = 'D:/Tiles/myMapnik/' minZoom = 4 maxZoom = 15 bbox = (6.0, 50.0,9.5,52.5) render_tiles(bbox, mapfile, tile_dir, minZoom, maxZoom,"NRW")
Den Rest weglöschen
All-in-one
Natürlich lässt sich der ganze Prozess auch in einer einzigen batch-Datei abarbeiten. Dies ist sinnvoll, wenn man nur einen kleinen Bereich benötigt. Hierzu wird eine neue Datenbank bboxdb angelegt:
bboxdbneu.bat für Windows XP:
%ProgramFiles%\PostgreSQL\9.0\bin\createdb -U postgres -E UTF8 -O osmuser bboxdb %ProgramFiles%\PostgreSQL\9.0\bin\createlang -U postgres plpgsql bboxdb %ProgramFiles%\PostgreSQL\9.0\bin\psql -U postgres -d bboxdb -f "%ProgramFiles%\PostgreSQL\9.0\share\contrib\postgis-1.5\postgis.sql" %ProgramFiles%\PostgreSQL\9.0\bin\psql -U postgres -d bboxdb -f "%ProgramFiles%\PostgreSQL\9.0\share\contrib\postgis-1.5\spatial_ref_sys.sql" %ProgramFiles%\PostgreSQL\9.0\bin\psql -U postgres -d bboxdb -f "%ProgramFiles%\PostgreSQL\9.0\share\contrib\_int.sql" %ProgramFiles%\PostgreSQL\9.0\bin\psql -U postgres -d bboxdb -f "%ProgramFiles%\PostgreSQL\9.0\share\contrib\hstore.sql"
bboxdbneu.bat für Windows 7:
"%ProgramFiles(x86)%\PostgreSQL\9.0\bin\createdb" -U postgres -E UTF8 -O osmuser bboxdb "%ProgramFiles(x86)%\PostgreSQL\9.0\bin\createlang" -U postgres plpgsql bboxdb "%ProgramFiles(x86)%\PostgreSQL\9.0\bin\psql" -U postgres -d bboxdb -f "%ProgramFiles(x86)%\PostgreSQL\9.0\share\contrib\postgis-1.5\postgis.sql" "%ProgramFiles(x86)%\PostgreSQL\9.0\bin\psql" -U postgres -d bboxdb -f "%ProgramFiles(x86)%\PostgreSQL\9.0\share\contrib\postgis-1.5\spatial_ref_sys.sql" "%ProgramFiles(x86)%\PostgreSQL\9.0\bin\psql" -U postgres -d bboxdb -f "%ProgramFiles(x86)%%\PostgreSQL\9.0\share\contrib\_int.sql" "%ProgramFiles(x86)%\PostgreSQL\9.0\bin\psql" -U postgres -d bboxdb -f "%ProgramFiles(x86)%\PostgreSQL\9.0\share\contrib\hstore.sql" pause
Um die neue Datenbank in Mapnik ansprechen zu können, muss datasource-settings-xml.inc angepasst werden:
<!-- Settings for your postgres setup. Note: feel free to leave password, host, port, or use blank --> <Parameter name="type">postgis</Parameter> <Parameter name="password">%(password)s</Parameter> <Parameter name="host">localhost</Parameter> <Parameter name="port">5432</Parameter> <Parameter name="user">osmuser</Parameter> <Parameter name="dbname">bboxdb</Parameter> <!-- this should be 'false' if you are manually providing the 'extent' --> <Parameter name="estimate_extent">true</Parameter> <!-- manually provided extent in epsg 900913 for whole globe --> <!-- providing this speeds up Mapnik database queries --> <Parameter name="extent">-20037508,-20037508,20037508,20037508</Parameter>
bbox.bat
call D:\Karten\OpenStreetMap\osmosis\bin\osmosis.bat --read-pbf D:\Karten\osm\Geofabrik\nordrhein-westfalen.osm.pbf --bb left=7.0 right=7.5 bottom=51.0 top=51.5 --write-xml bbox.osm D:\Karten\OpenStreetMap\osm2pgsql\osm2pgsql --create --database bboxdb --username osmuser --prefix planet --slim --cache 1024 -S D:\Karten\OpenStreetMap\osm2pgsql\default.style --hstore bbox.osm cd D:\osm\mapnik generate_tiles.py
Die Grenzen in generate_tiles.py sollten etwas kleiner gesetzt werden als beim Zuschnitt, um Artefakte an den Rändern zu vermeiden. Alternativ kann man auch generate_image.py verwenden, wenn man statt tiles eine einzelne Datei haben möchte.
georeferenzierte Karten mit Nik2img erstellen
Download-ordner
Datei/SVN Checkout
URL: http://mapnik-utils.googlecode.com/svn/trunk/nik2img/
Rechtsklick auf Ordner nik2img -> Open Command Window Here
setup.py install
exit
bbox2img.bat
C:\Python26\scripts\nik2img.py D:\osm\mapnik-de\osm-de.xml E.png --srs 900913 --bbox 7.0 51.45 7.1 51.5 --world-file wld --dimensions 1280 780
Die Datei E.png kann in Quantum GIS als Hintergrundbild eingesetzt weren, wenn als Projektbezugssystem 900913 verwednet wird.
Einbinden in openlayers
in osmviewer.htm einfügen:
var newMapnikLayer = new OpenLayers.Layer.OSM("eigenes Mapnik", "file:///D:/Tiles/myMapnik/${z}/${x}/${y}.png", {numZoomLevels: 16, alpha: true, isBaseLayer: true, visibility: false}); map.addLayer(newMapnikLayer);