[Talk-de] Wie Kartenbereich aus API-Export rendern

Michael von Glasow michael at vonglasow.com
Do Jun 16 18:28:19 UTC 2011


Hallo,

sorry, dass ich mich erst jetzt einklinke. Wie man im Prinzip aus einem 
OSM-File (z.B. einem API-Export) mit Mapnik eine Karte rendert, ist im 
Wiki unter [1] dokumentiert.

Prinzipiell ist es auch möglich, den OSM-Style so umzubiegen, dass 
Mapnik die Karte aus einem OSM-File statt aus PostgreSQL rendert. Das 
ist zwar mit einigen Einschränkungen verbunden, aber das Ergebnis dürfte 
der Karte von der OSM-Homepage recht nahe kommen.

Zuerst wirst Du die ganzen Layers im Style durchgehen müssen:
- Datasource anschauen: welche Tags werden gefiltert?
- Datasource so umbauen, dass die Daten aus dem XML-File geholt werden
- Alle Styles, die von dem jeweiligen Layers referenziert werden, 
anpassen: da die Filterregeln jetzt auf ALLE Objekte angewandt werden, 
müssen ggf. zuvor in der Datasource vorhandene Filterkriterien in die 
Filters der jeweiligen Rules wandern.
- Achtung: falls ein Style von mehr als einem Layer referenziert wird 
(die dann höchstwahrscheinlich unterschiedliche Datasources haben und 
die Daten unterschiedlich filtern), wirst Du Diese Styles wahrscheinlich 
duplizieren müssen, weil Du jetzt für jedes Layer andere Filterregeln 
brauchst.

Einschränkungen:

Einige Features im Default-Style benutzen PostGIS-Funktionen: 
Beispielsweise werden turning_circles mit der Farbe gefüllt, die zur 
nächstliegenden Straße passt. Diese Features hast Du mit einem 
OSM-Datasource nicht zur Verfügung; hier ist Kreativität gefragt. 
(Beispielsweise nur die casings, sprich den grauen Rand, zu rendern und 
die Füllfarbe wegzulassen.) Ebenso wirst Du darauf verzichten müssen, 
Renderingregeln für Polygone erst ab einer bestimmten Fläche greifen zu 
lassen.

Relationen werden von Mapnik überhaupt nicht unterstützt. Informationen, 
die in Relationen enthalten sind, können nicht gerendert werden. 
Speziell fällt mir dazu multipolygon ein – Gebäude mit Innenhöfen, 
Wälder mit Lichtungen usw. können so nicht wie auf der OSM-Homepage 
dargestellt werden.

Es gibt keine Unterscheidung zwischen Nodes und Ways. Areas können 
halbwegs erraten werden, indem nach eindeutigen Tags gefiltert wird 
(area, building, landuse etc.), allerdings werden auf diese Weise auch 
Nodes als Areas behandelt, wenn sie eines dieser Tags besitzen.

Außerdem scheint es noch ein paar Bugs zu geben – ich habe mal kleinere 
Bereiche "ad-hoc" auf diese Art gerendert, und in einzelnen Fällen 
musste ich feststellen, dass die Geometrie von Objekt A und Tags von 
Objekt B durcheinandergewürfelt wurden. Ich erinnere mich an einen Fall, 
in dem die Umrisse eines Gebäudes hartnäckig und reproduzierbar als 
Skipiste gerendert wurden... die Skipiste gab es tatsächlich, nur 
woanders...


Um die Karte als Bitmap zu rendern, gibt es, wie schon vorher 
angesprochen, nik2img.py. Eine Alternative dazu könnte auch der Mapnik 
Viewer sein: den Code gibt es auf der Mapnik-Homepage zum Download; 
Binaries werden vom Projekt nicht angeboten. (Ubuntu bietet allerdings 
ein Package "mapnik-viewer" an.)

Mit dem Viewer kannst Du Dir den gewünschten Kartenausschnitt auf dem 
Bildschirm heranholen und dann über die Export-Funktion in ein Bitmap 
exportieren. Einschränkung: es wird genau das exportiert, was Du auf dem 
Bildschirm siehst – gleicher Ausschnitt, gleicher Zoom. Wenn Du einen 
kleineren Ausschnitt brauchst, entweder Fenster vor dem Export 
verkleinern oder Bitmap hinterher zurechtschneiden. Der maximal 
exportierbare Kartenausschnitt ist etwas kleiner als Deine 
Bildschirmauflösung...

Hope it helps
Michael


[1] 
http://wiki.openstreetmap.org/wiki/Mapnik:_Rendering_OSM_XML_data_directly




Mehr Informationen über die Mailingliste Talk-de