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

_______________________________________________
Talk-de mailing list
[email protected]
http://lists.openstreetmap.org/listinfo/talk-de

Antwort per Email an