User:Baiuvarius/Topo 50
Dies sind Maperitive-Regeln und -Skripte zur Erstellung von topographischen Karten. Die Gestaltung orientiert sich an den amtlichen topographischen Karten der deutschen Länder vor der Einführung der DTK.
User:Baiuvarius/Topo 50/Topo 50.mrules
Besonderheiten
- Hoher Kontrast für Ausdrucke
- Typische Symbole topographischer Karten
- Höhenlinien und Schummerung
- Unterscheidung von Gemeinden und Gemeindeteilen
- Schriftgrößen abhängig von Flächeninhalten
- Darstellung von Flügelstrichen an Brücken und von Symbolen für Tunnelportale
- Bahnhofsymbole werden in Gleisrichtung gedreht
- "Selektives Freistellen": Schrift wird von schwarzen Linien, aber nicht von Flächensignaturen freigestellt
Legende
Höhenlinien und Schummerung
Die Höhenlinien und die Schummerung werden aus SRTM-Höhendaten erzeugt.
Höhenlinien
generate-contours interval=5
Schummerung
Die Schummerung besteht aus einer grauen Schattierung mit Beleuchtung aus NW und einer gelben Schattierung mit Beleuchtung aus SE.
generate-relief-igor generate-relief-igor color=yellow sun-azimuth=135
Unterscheidung von Gemeinden und Gemeindeteilen
Namen von Orten, die selbstständige Städte und Gemeinden sind, werden in aufrechter Schrift dargestellt, andere kursiv. Ein Ort wird als selbstständige Gemeinde aufgefasst, wenn es eine gleichnamige Grenzrelation auf Gemeindeebene gibt. Um auch die Orte von Gemeinden darzustellen, die keinen gleichnamigen Place-Knoten (im Kartenausschnitt) haben, werden die entsprechenden Grenzrelationen in Multipolygone umgewandelt. Die so manipulierten Daten werden natürlich nicht zu OSM hochgeladen!
from maperipy import *
from maperipy.osm import *
osm = None
osm_layer= None
layer_index=0
for layer in Map.layers:
layer_index += 1
if layer.layer_type == "OsmLayer":
osm = layer.osm
break
if osm == None:
raise AssertionError("There are no OSM map souces.")
for relation in osm.find_relations(lambda x: x.has_tag("boundary","administrative") and ((x.has_tag("admin_level","6") and x.has_tag("de:place","city")) or x.has_tag("admin_level","8"))):
for node in osm.find_nodes(lambda x : x.has_tag("place","city") or x.has_tag("place","town") or x.has_tag("place","village") or x.has_tag("place","municipality")):
if node.has_tag("name") and relation.has_tag("name"):
if node.get_tag("name")==relation.get_tag("name"):
node.set_tag("gemeinde","yes")
break
else:
if node.has_tag("official_name"):
if node.get_tag("official_name")==relation.get_tag("name"):
node.set_tag("gemeinde","yes")
break
else:
relation.set_tag("type","multipolygon")
relation.set_tag("gemeinde","yes")
Flächeninhaltsabhängige Schriftgrößen
Die Schriftgrößen der Beschriftung von flächenartigen Objekten richtet sich nach dem Flächeninhalt der jeweiligen Objekte. Details: Flächenberechnung
Drehung von Punktsymbolen
Einige Punktsymbole werden in die Richtung der Wege gedreht, auf oder an denen sie liegen. Das betrifft z. B. Bahnhöfe, Brücken, Tunnel, Wasserfälle und Wehre. Details: Drehung von Punktsymbolen
Selektives Freistellen
Das besondere Merkmal dieser Karte! Die Beschriftungen und Symbole werden zur besseren Lesbarbeit von den schwarzen Flächen (Gebäude) und Linien (Straßenkonturen, Bahnlinien) freigestellt. Dazu erhalten sie einen weißen "Rand" ("Halo"). Auf relativ hellen Flächensignaturen wie Wasser- und Waldflächen und auf den gelben und orangen Straßendeckern sieht das aber nicht schön aus, und es geht unnötig viel Information verloren. Daher wird die Karte mehrfach in Bitmaps exportiert, die dann noch bearbeitet und wie Folien übereinandergelegt werden.
Die Beschriftungen und Symbole erhalten einen Rand in der Farbe #fefefe (254,254,254). Dieser überdeckt die schwarzen Linien und Flächen in derselben Folie und wird im zweiten Schritt (s. u.) transparent gemacht, sodass die darunterliegenden Flächen durchscheinen.
Das folgende Python-Skript lässt Maperitive die einzelnen Ebenen exportieren. Der Hintergrund wird mit 100 dpi und im Maßstab 1:10.000, die übrigen Ebenen werden mit 200 dpi und in 1:20.000 generiert. Das ergibt bei einer Druckauflösung von 500 dpi eine Karte im Maßstab 1:50.000. Am Bildschirm ist die 2,5-fache Größe, also 1:20.000 sinnvoll, um alle Feinheiten zu erkennen. Die Bitmaps für Flächenfüllungen haben in Maperitive immer 100 dpi, das lässt sich auch nicht ändern. Für eine höhere Auflösung im Druck wird der Hintergrund daher in 1:10.000 generiert und dann verkleinert.
from maperipy import Map
from maperipy.commands import ExportBitmapCommand
for layer in Map.layers:
if layer.layer_type=="WebMapLayer":
layer.visible=False
with Map.init_workflow() as workflow:
workflow.cycles_to_output(100,501).cycles_to_output(521)
cmd = ExportBitmapCommand()
cmd.bitmap_file = "output/bitmap/hintergrund.png"
cmd.dpi=100
cmd.map_scale=10000
cmd.execute()
with Map.init_workflow() as workflow:
workflow.cycles_to_output(510,531).cycles_to_output(700,791)
cmd.bitmap_file = "output/bitmap/wasser.png"
cmd.dpi=200
cmd.map_scale=20000
cmd.execute()
with Map.init_workflow() as workflow:
workflow.cycles_to_output(531,671).cycles_to_output(700,801)
cmd.bitmap_file = "output/bitmap/schwarz.png"
cmd.execute()
with Map.init_workflow() as workflow:
workflow.cycles_to_output(601).cycles_to_output(611).cycles_to_output(621)
.cycles_to_output(631).cycles_to_output(641).cycles_to_output(651)
cmd.bitmap_file = "output/bitmap/strassendecker.png"
cmd.execute()
with Map.init_workflow() as workflow:
workflow.cycles_to_output(0,1001)
In den dadurch entstandenen Einzelebenen "Wasser" und "Schwarz" werden mit Irfanview die Freistellungen für die darunterliegenden Ebenen transparent gemacht. In Irfanview muss dafür die Hintergrundfarbe (254,254,254) eingestellt sein.
"C:\Program Files\IrfanView\i_view64.exe" wasser.png /transpcolor=(254,254,254) /convert=wasser1.png
"C:\Program Files\IrfanView\i_view64.exe" schwarz.png /transpcolor=(254,254,254) /convert=schwarz1.png
Die bearbeiteten Einzelebenen werden schließlich mit Magick übereinandergelegt. Optional kann ein Maßstab in der unteren rechten Ecke eingefügt werden.
magick.exe composite wasser1.png hintergrund.png map.png
magick.exe composite strassendecker.png map.png map.png
magick.exe composite schwarz1.png map.png map.png
#magick.exe composite scale50000.png -gravity SouthEast map.png map.png