[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