Opentopomap selbst rendern

Hallo zusammen,

die Karte von opentopomap.org gefällt mir sehr gut und ich möchte einen hochaufgelösten Kartenausschnitt ausdrucken. Die online angebotene Auflösung reicht mir dafür nicht aus, ich müsste die Tiles also selbst rendern (lassen). Soetwas habe ich noch nie gemacht, habe aber die Hoffnung, dass das mit vertretbarem Aufwand zu machen ist.

Die Anleitung auf der Opentopomap-Github-Seite sieht recht kompliziert aus (https://github.com/der-stefan/OpenTopoMap/blob/master/mapnik/HOWTO_Ubuntu_16.04). Aber ich würde es versuchen, wenn mein Ziel damit zu erreichen wäre:

  • Selbst einstellbare Auflösung für die jeweilige Zoomstufe (unterschiedliche Zoomstufen haben eine unterschiedliche Darstellung).
  • Leichte Anpassung einiger Grundfarben, z.B. Wald, Gewässer.

Funktioniert das ohne einschlägiges Vorwissen? Wo wäre die Auflösung einzustellen?

Wenn ich es richtig verstehe, kann ich dann vom Tile-Server die von mir gewünschten Kacheln rendern lassen?

Danke schonmal!

Viele Grüße

Auf meiner MapOSMatic Instanz auf https://print.get-map.org/ kannst Du unter anderem die OpenTopoMap als Stil auswählen (abzüglich der Höhen-Schummerung).

Zoom-Kontrolle hast Du allerdings nur indirekt über die Auswahl der Papiergröße.

Wenn das im Prinzip Deine Anforderungen erfüllt kann ich Dir auch zeigen wie Du eine eigene Instanz als VM aufsetzen, und dort den Stil nach eigenen Wünschen anpassen kannst.

Hallo Hartmut,

danke für die schnelle Antwort! Hab das gerade mal auf deiner verlinkten Seite probiert mit größtem Papierformat (doppelt A0).
Der Effekt ist anders, als ich gehofft hatte. Die Strukturen werden mit der Auflösung verkleinert, insbesondere Straßen und Bahnlinien. Auch ergibt sich die Schraffur der Gebäude, wie es bei Opentopomap in der höchsten Zoomstufe ist, statt schwarz durchgefärbte Grundrisse wie eine Zoomstufe darunter.

Die Frage ist jetzt also, ob die Darstellung prinzipiell anhand der Auflösung bestimmt wird, oder ob beim Rendern der Maßstab herangezogen wird. Wenn zweiteres der Fall ist, könnte ein eigener Server ja funktionieren.

PS: Tolle Webseite!

Falls du nicht auf den OTM-Stil festgelegt bist, gibt es noch Alternativen. Vielleicht beschreibst du deinen Anwendungsfall zunächst etwas näher.

Das wirst du immer haben, wenn du fertige Kartenkacheln verwendest. In diesem Fall hat man eine feste Kopplung von Auflösung und Zoomstufe. Man kann natürlich auch die Kacheln der Zoomstufe mit dem passenden Detaillierungsgrad nehmen und diese auf die Druckauflösung hoch- oder runterskalieren. Dann ist das Ergebnis aber unscharf.

Das kann man nur vermeiden, indem man die Karte selber rendert.

Die Einstellungen, was in einer Zoomstufe dargestellt wird, ist an so ziemlich jeder Ecke des Stils versteckt. “&maxscale_zoom…” und “&minscale_zoom…” steht ungefähr 5x in jeder Datei. Einzelne Dinge wie “ich will Häuser in Zoomlevel 15 gestrichelt sehen statt schwarz” kriegt man schon hin (Einfach die Zoomstufen in Zeile 21 auf 15 setzen und den Block drüber mit Zoom 15 bis 16 rauswerfen).

Für den Wald müsstest dir die Bildchen ummalen. Da wird keine Farbei vorgegeben, sondern ein png über die Fläche gelegt (Nadelwald z.B.). Wasser wiederum hat die Farbe vorgegeben (hier die ganzen a3dde8), allerdings sind die schraffierten Seen dann doch wieder Bildchen…

Falls du nicht bescheiden bist und damit ziemlich untertreibst… isses schwierig. Sowas wie “Häuser sind mir zu schwarz” oder “nur die Autobahnen hätte ich in dieser einen Zoomstufe gern doppelt so breit” würde gehen, aber den Stil an mehreren Stellen umschreiben und ein konsistentes Ergebnis rausbekommen, würde ohne Vorwissen zumindest viel Einarbeitung erfordern.

Grüße
Max

Danke für die Antworten!

Zum Anwendungsfall: Es soll eine Wandinstallation werden, etwa 2 Meter breit. Einfach ein Kartenausschnitt auf Papier gedruckt. Der Ausschnitt soll relativ klein sein, d.h. hohe Zoomstufe. Auf Grund der Größe benötige ich deshalb eine große Auflösung, die die fertigen Kacheln nicht bieten. Das heißt, von einiger Entfernung sollen die Gebäude, Straßen etc. gut sichtbar sein, die Strukturen sind also relativ groß. Von der Nähe muss es aber auch noch gut aussehen, einfach Skalieren geht also nicht.

Auf OpenTopoMap bin ich nicht festgelegt, sie gefällt mir einfach gut, vielleicht gibt es aber auch was Verglichbares.

Siehe oben, das reicht mir nicht, bzw. es kommt halt gerade auf das Aussehen an.

Da ich nur einen Kartenausschnitt benötige, kann ich auch per Bildbearbeitung nacharbeiten, beispielsweise verschiedene Zoomstufen zusammenstricken. Voraussetzung ist aber, dass die Zoomstufen in ausreichender Auflösung vorhanden sind. Die Frage ist also, sind die Zoomstufe und die Auflösung beim Rendern zwei getrennt einstellbare Werte, oder ergibt sich die Auflösung zwangsläufig aus der Zoomstufe? Wenn das miteinander verquickt ist, sehe ich auch keine Chance. Wenn ich aber verschiedene Zoomstufen in der gleichen Auflösung rendern kann, dann ist der Rest mit Bildbearbeitung kein Problem mehr.

OK, die Farben sind auch erstmal nicht ganz so wichtig.

Nein, das ist tatsächlich Neuland für mich. Aber zumindest bin ich (Hobby-) Programmierer, den Server einzurichten könnte zumindest klappen.

Ich würde mir bei diesen Anforderungen mal Maperitive anschauen. Das hat den Vorteil, dass du keine Datenbank brauchst.

Rein technisch sollte sich dein Vorhaben mit http://printmaps-osm.de:8080 umsetzen lassen. Der OTM-Kartenstil steht dort aber nicht zur Verfügung.

Maperative schau ich mir mal an.

http://printmaps-osm.de hab ich gerade mit dem Komandozeilentool probiert. Das Kommando “printmap.exe create” wirft aber schon eine Fehlermeldung “Der Zugriff auf einen Socket war aufgrund der Zugriffsrechte des Sockets unzulässig.”
Auf jeden Fall kann man dort die Abmaße und den Maßstab getrennt einstellen. Ich nehm an, das ist jeweils die Auflösung bzw. Zoomstufe.

Edit: Doch nicht, die 300dpi sind festgelegt, bei größeren Abmaßen wird auch der Ausschnitt größer.

Meine Frage bleibt also: Kann man, wenn man sich den Server zusammen bastelt, für eine gegebene Zoomstufe eine beliebige Auflösung einstellen?

Nein. Ich hab einen Nachbau und ich kriegs nicht hin, ausser durch Änderung im Stil. Vielleicht wenn man sich noch zusätzliche Dinge installiert und zum laufen bringt (nik4 solls können, sagt man).

Da springt aber schon das nächste Problem um die Ecke: viele Icons sind Grafiken, viele davon winzig klein. Wenn man die skaliert wirds hässlich pixelig. Hartmut Holzgraefe hat die als Vektor nachgezeichnet, darum kann er seine OTM skalieren.

Ist also echt Bastelarbeit, aber das soll jetzt nicht abschreckend klingen. Vielleicht hast Spass an basteln, vielleicht magst es im Erfolgsfall dokumentieren.

Grüße
Max

Was du möchtest, wenn ich es richtig verstanden habe, ist eine Karte gegebenen Inhaltes verlustfrei zu vergrößern. Das geht nur mit Karten die ausschließlich SVG-Daten beinhalten. Bei pixelorientierten Formaten (PNG) geht das auch, nur leidet die Qualität (Kartengröße verdoppeln = 300ppi → 150ppi).

Ums mal zu veranschaulichen, was beim Skalieren passiert, hier ein Bild, erzeugt mit

nik4.py -c 11.349232 47.621511 --size-px 800 600 -z 17 opentopomap.xml ~/kesselberg.png

und

nik4.py -c 11.349232 47.621511 --size-px 800 600 --factor 3 -z 17 opentopomap.xml ~/kesselberg.png

(diese Gegend)

Skaliert wird die Schrift, alle Linienbreiten und das Symbol für den Pass (das ist ein SVG)
Nicht skaliert wird die Dichte der Schraffur für das Haus und die Symbole für den Wald (das sind PNGs als Flächenfüller).
Skaliert aber eben hässlich wird das Symbol für das Denkmal (ein “punktförmiges” Symbol als PNG).

Grüße
Max

Edit: Nochmal unterschieden zwischen “hässlich skaliert” und “nicht skaliert”.

@tox-rox: Genau da läuft es drauf raus. Das mit den (Raster-) Symbolen war mir so nicht bewusst. Die Verkehrswege/Landschaft ist ja sowieso vektoriell, daher hab ich daran nicht gedacht.

@maxbe: Das sieht schon sehr gut aus. Also schau ich mir nic4 mal genauer an. Meld mich dann wieder, wahrscheinlich brauch ich auch an einigen Ecken Hilfe~

Danke euch!

Weil SVG erwähnt worden ist. Es gibt die Möglichkeit Bilder (Pixel) zu vektorisieren (SVG). Je nach Vorlage und Umwandlungssoftware könnte das zu einem befriedigenden Ergebnis führen. Also die Idee lautet, die Tiles zu vektorisieren.