(Oktober 2009)

Gedrehte Karten

Die folgenden Karten sind Beispiele für Kartenserien entlang einer Radroute (und zufällig auch entlang eines Flussess, der Donau), der EuroVelo6 (EV6) zwischen Linz und Wien. Die Bilder wurden im Maßstab 1:100,000 generiert (bei angenommenen 72dpi Bildschirm-Auflösung), aber als Übersicht verkleinert anhand der Web-Broser-Auflösung (daher der möglicherweise kaum lesbare Text). Durch Anklicken der Bilder können detailliertere und lesbarere Karten mit Maßstab 1:50.000 heruntergeladen werden.


Beispiel einer nicht nach Norden ausgerichteten Karte
Beispiel einer nicht nach Norden ausgerichteten Karte
Beispiel einer nicht nach Norden ausgerichteten Karte
Beispiel einer nicht nach Norden ausgerichteten Karte
Beispiel einer nicht nach Norden ausgerichteten Karte
Beispiel einer nicht nach Norden ausgerichteten Karte
Beispiel einer nicht nach Norden ausgerichteten Karte
Beispiel einer nicht nach Norden ausgerichteten Karte



Ansatz

Es gibt einige Punkte, die bei der Erzeugung von nicht auf Norden ausgerichteten Karten zu beachten sind. Einige davon betreffen konkret den mapnik Rendering Prozess, wärend andere auch alle weiteren Renderer betreffen würden. Zusammengefasst mussten die folgenden Punkte gelöst werden:

  • Erzeugen von rotierten Karten mit dem mapnik Renderer (unter Aufrechterhaltung der normalen Text-Orientierung); zur Zeit scheint es bei mapnik (noch) keine Möglichkeit zu geben, dies direkt zu tun. Auch eine geeignete Projektion, die die Kartenorientierung als Projektionsparameter hätte und somit eine Rotation während des Renderns ermöglicht hätte, scheint es nicht zu geben. Damit scheint die nächst-Beste Lösung zu sein:
  • Rotation von OSM Daten in der Datenbank, unter Berücksichtigung der ursprünglichen Bounding Box (die nach der Rotation nicht länger mit den Richtungen der Koordinaten-System-Achsen übereinstimmt). Der erste Teil ist einfach, unter Nutzung der PostGIS-Funktion ST_Affine, wenn die Berechnung des Rotationswinkels und der zugehörigen affinen Transformation durchgeführt wurden. Die Bounding-Box wird durch Tranformation der Eck-Punkte mittels derselben Transformation angepasst, nur in diesem Fall manuell im Program-Code anstatt in PostGIS). Danach kann das Rendering mit Hilfe von PostGIS diese ausgerichtet am aktuellen Pseudo-Nord anzeigen.
  • Mittels eines die Nord-Richtung anzeigenden Pfeils ist die Orientierung des Betrachters einfacher. Ein solcher wird z.B. gezeichnet durch Einbringen künstlicher Linien in die Datenbank (vor der Rotation der Daten in der Datenbank), deren Rendering den Nord-Pfeil ergibt.
  • Als am problematischsten hat sich die Anpassung der georeferenzierten Raster Bilder (Hintergrund, Shading, ...) herausgestellt. Der einfachste Ansatz wäre vermutich die Manipulation der affinen Transformation, die in GeoTIFFs gespeichert sind, um die Achsen des Bildes passend zu drehen. Unglücklicherweise hat dieser Ansatz mit Mapnik nicht funktioniert (die Bilder erschienen nie in der gerenderten Bounding Box). Mit QGis hat dieser Ansatz wie gedacht funktioniert, wenn auch sehr langsam.
    Die Lösung dieses Problems war schließlich die Nutzung von listgeo zur Extraktion der Georeferenzierungs-Informationen. Danach folgte eine externe Rotation (durch Dritt-Software, z.B. ImageMagick convert), gefolgt von einer Anpassung der Georeferenz-Informationen, um die größere Bounding-Box zu berücksichtigen die durch die Rotation der ursprünglichen Bounding-Box entsteht. Schließlich folgt eine Wiederherstellung der Georeferenz-Informationen in dem rotierten Bild. Erst funktionierte auch dieser Prozess nicht korrekt, aber eine finale Anwendung von gdal_translate, um die Informationen über fehlende Werte und, vermutlich am Wichtigsten, der in der Datei enthaltenen Bänder und deren Interpretation wieder herzustellen, half bei der Lösung.
  • Zuletzt wäre noch ein einfach zu nutzendes Interface nötig. Bisher erfolgt die Konfiguration des Prozesses aus einer manuell erstellten Konfigurationsdatei. Diese enthält im Wesentlichen den Anfangs- und Endpunkt einer Linie, sowie Randinformationen um anzugeben, welcher Kontext um diese Linie herum in der generierten Karte enthalten sein soll. Es gibt eine Webseite CycleRoute, welche das Erzeugen einer Route (mehrere Punkte, durch eine Linie verbunden), und dass Speichern dieser als gpx-Datei erlaubt. Diese Datei wird daraufhin eingelesen, und die Koordinaten können einfach in die für die Konfigurationsdatei notwendige Form konvertiert werden.