DE:Ajoessen/Mapnik

From OpenStreetMap Wiki
Jump to navigation Jump to search

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);