[Talk-de] Mapnik Hilfe

Sven Anders sven at anders-hamburg.de
Do Jan 26 19:23:54 UTC 2012


Moin,
ich bin gerade dabei eine Landkarte von Hamburg für einen Ausdruck 
vorzubereiten (ca. 1x1m Papierkarte 300 dpi oder 400 dpi).

Als Grundlage habe ich den deutschen Style genommen[1]. Diese nach mit 
dem Script von Holger Schöner[2] den Scale angepasst,  so das die 
Schrift jetzt auch für den Ausdruck halbwegs okay ist, nach Mapnik2 
gewandelt (upgrade_map_xml.py), und ein paar Attribute rausgeworfen/ergänzt.

Mir ist klar, das es ein Spezialthema ist und ich werde sicherlich auch 
in der Mapnik-ML nach Lösungen fragen, wenn ich hier nicht weiter komme, 
aber ich denke das Ziel eine Papierkarte zu machen, haben ja 
wahrscheinlich doch einige Mapper.

== Problem 1: Straßennamen sind ein MUST ==

Ich möchte gerne, alle Hamburger Straßen auf der Landkarte lesbar haben.

Wenn ich nun eine Regel wie diese hier habe:

<TextSymbolizer fill="rgb(0,0,0)" fontset-name="book-fonts" 
halo-radius="2" placement="line" size="16" 
spacing="300">[name]</TextSymbolizer>

Dann wird der Name nur dann geschrieben, wenn die Straße lang genug ist, 
das der Name dort auch rein passt.

Das ist zwar bei 95% der Straßen der Fall, aber leider nicht immer.

Kann ich irgendwie eine Regel machen, die dann greift, wenn der Text 
nicht geschrieben werden konnte.

Ich stell mir sowas vor:

<IfOkay><TextSymbolizer fill="rgb(0,0,0)" fontset-name="book-fonts" 
halo-radius="2" placement="line" size="16" 
spacing="300">[name]</TextSymbolizer><else/>
<TextSymbolizer fill="rgb(0,0,0)" fontset-name="book-fonts" 
halo-radius="2" placement="line" size="10" 
spacing="300">[name]</TextSymbolizer><else/>
<TextSymbolizer fill="rgb(0,0,0)" fontset-name="bold-fonts" 
halo-radius="2" minimum-distance="16" size="10" spacing="750">[name]
<else/>
<TextSymbolizer fill="rgb(0,0,0)" fontset-name="bold-fonts" 
halo-radius="2" placement="line" size="10" 
spacing="750">[num]</TextSymbolizer>
</IfOkay>

Also, wenn ein Straßenname mit 16pt nicht passt, nimm einen mit 10pt und 
wenn das auch nicht passt, schreibe ihn in 10pt und wenn das auch nicht 
passt, schreibe den Straßennamen in der Nähe mit 16pt, und wenn das auch 
nicht geht, schreibe das Attribut "num" hin.

Oder gibt es zumindest die Möglichkeit sowas irgendwie in ein Logfile zu 
schreiben, das ich weiß, welche Straßen fehlen?

== Problem 2: Symbole in SVG ==

In Mapnik2 ist es ja anscheind möglich die Symbole in SVG einzubinden.

Das hätte den Vorteil, das sie schön skalieren, wenn man wie ich den 
Scale verändert.

Hat das schon jemand gemacht? Leider liegen im Symbols Verzeichnis, bis 
auf wenige Ausnahmen ja nur PNG Dateien.

Ich habe die eigentliche Quelle zwar schon gefunden [3][4], kapituliere 
aber gerade ein wenig vor der Menge der Symbole und der nicht 
einheitlichen Bennenung.

BTW: Gibt es eine einfache Möglichkeit festzustellen, welche Icons für 
meinen Ausschnitt wirklich genutzt werden?


== Problem 3: Marker ==

In die Landkarte sollen ca. 200 Numerierte Marker eingefügt werden. 
Dabei gibt es sicher den Fall, das ein paar Marker recht dicht 
beieinander liegen. Trotzdem soll möglichst der Punkt genau getroffen 
werden.

Meine Vorstellung wäre, das man den Punkt nur als Punkt einträgt und die 
Nummer dorthin schreibt, wo Platz ist und mit einer Linie verbindet.

Hat da jemand eine Idee, wie man das in Mapnik umsetzen kann?

Die Lage der Marker erfahre ich vermutlich erst recht spät im 
Herstellungsprozess, also wäre mir dort ein automatisches Verfahren hier 
sehr recht (ist fast zwingend).

Viele Grüße

Sven


[1] http://openstreetmap.de/germanstyle.html

[2] http://www.ancalime.de/download
         /20100305_FOSSGIS_HolgerSchoener_KartenImDruck_Praesentation.pdf
[3] http://wiki.openstreetmap.org/wiki/Map_Icons
[4] http://www.sjjb.co.uk/mapicons/



Mehr Informationen über die Mailingliste Talk-de