myMapnik, oder: Dann habe ich was Eigenes [tm]

Hallo zusammen,

auf vielfachen Wunsch habe ich jetzt mal zusammengeschrieben, wie ich mit Mapnik neben eigenen Kartentiles auch transparente Overlays für verschiedene Anwenungsfälle erzeuge:

http://wiki.openstreetmap.org/wiki/User:Ajoessen/myMapnik

Alles lauffähig unter Windows XP mit ertwas angestaubter Hardware :wink:

Vorraussetzung ist eine funktionierende osmpgsql-PostgreSQL-Mapnik-Konfiguration, wie sie hier dokumentiert wird:
http://wiki.openstreetmap.org/wiki/User:Ajoessen/Postgis
http://wiki.openstreetmap.org/wiki/User:Ajoessen/Mapnik

Die transparenten Overlays sind für meinen OSMviewer geeignet:
http://wiki.openstreetmap.org/wiki/User:Ajoessen/Osmviewer_und_GPXviewer

Für den eiligen nutzer gibt es die Styles hier:
http://bahnradwandern.bplaced.net/myMapnik.zip
und die zusätzlichen Symbole hier:
http://bahnradwandern.bplaced.net/symbols.zip

Viel Spaß beim Nachbauen…

Gruß,
ajoessen

Wow sehr schön, muss ich mir mal in Ruhe durchlesen. Danke auf jeden Fall für deine Mühen!

Hallo ajossen,

ich bin noch ganz frisch in der Materie und versuche gerade, mit Mapnik eine Karte nach meinen Wünschen zu erstellen.

Ich hangele mich dabei an deiner hier genannten Vorgabe entlang, allerdings unter Linux Ubuntu 12.04.

Leider komm ich - trotz Tante Google - an einer Stelle nicht weiter.

Wenn ich das script generate_image.py ausführe, wird zwar ein Bild ausgegeben, in der Eingabeaufforderung/Terminal wird jedoch folgende Fehlermeldung ausgegeben:

andreas@Phenom-2300:~/osm/myMapnik$ ./generate_image.py
"Mapnik LOG> 2013-02-26 20:03:35:" Unable to process some data while parsing 'osm-de.xml':
* text 'r'
* node 'Filter' at line 4164
output image to image.png!

in Zeile 4164 meiner Datei osm-de.xml steht

<Filter>[landuse] = 'forest' or [natural] = 'wood' or [landuse] = 'wood'</Filter>

Die Datei habe ich vorher per upgrade_map_xml.py auf den aktuellen Stand gebracht.

Der gleiche Fehler taucht beim Versuch auf, Kacheln über generate_tiles.py zu erzeugen. Das script bricht hier allerdings ab und es werden keine Kacheln erzeugt.

andreas@Phenom-2300:~/osm/myMapnik$ ./generate_tiles.py
/usr/lib/pymodules/python2.7/mapnik2/__init__.py:27: DeprecationWarning:  mapnik2 module has been deprecated,
        please use 'import mapnik' 
  warnings.warn(msg, DeprecationWarning)
render_tiles( (7.8, 51.3, 9.4, 52.5) osm-de.xml tiles/ 12 14 "Test")
Traceback (most recent call last):
  File "./generate_tiles.py", line 212, in <module>
    render_tiles(bbox, mapfile, tile_dir, 12, 14, "Test")
  File "./generate_tiles.py", line 136, in render_tiles
    renderer = RenderThread(tile_dir, mapfile, queue, printLock, maxZoom)
  File "./generate_tiles.py", line 64, in __init__
    mapnik.load_map(self.m, mapfile, True)
RuntimeError: Unable to process some data while parsing 'osm-de.xml':
* text 'r'
* node 'Filter' at line 4164

System:
Ubuntu 12.04 x64
PostgreSQL 9.1
Postgis 1.5.x
aktuelles osm2pgsql aus ppa:kakrueger
mapnik 2.1.0

Irgendwelche Lösungsvorschläge, Tipps, Ansätze hierzu?

Gruß
Andreas

Hallo nochmal,

hat denn niemand eine Idee oder eventuell eine Vermutung, woran es liegen könnte?

Gruß
Andreas

Schon mal versucht die Leerzeichen wegzulassen?

also, dass es dann so aussieht:


<Filter>[landuse]='forest' or [natural]='wood' or [landuse]='wood'</Filter>

Nachtrag:

Eventuell kannst du auch noch die zeile oberhalb und unterhalb posten…

Hallo Thomas,

die Leerzeichen hatten keinen Einfluss…

hier noch der Auszug Zeilen 4155-4166, mit !!! die Zeile, die bemängelt wird:

<Rule>
      <Filter>[landuse] = 'forest' or [natural] = 'wood' or [landuse] = 'wood'</Filter>
      <MaxScaleDenominator>100000</MaxScaleDenominator>
      <MinScaleDenominator>50000</MinScaleDenominator>
      <PolygonSymbolizer fill="#8dc56c" fill-opacity="0.9"/>
    </Rule>
    <Rule>
      <Filter>[landuse] = 'forest'</Filter>
      <MaxScaleDenominator>50000</MaxScaleDenominator>
     !!! <Filter>[landuse] = 'forest' or [natural] = 'wood' or [landuse] = 'wood'</Filter> !!!
	   <PolygonPatternSymbolizer file="symbols/forest.png"/>
    </Rule>

Lösche ich die Zeile komplett raus, ist die Fehlermeldung dazu weg.
Was aber bleibt, ist der erste Teil der Fehlermeldung

RuntimeError: Unable to process some data while parsing 'osm-de.xml':
* text 'r'

Da komm ich einfach nicht weiter…

Gruß
Andreas

Zwei Filter in einer Rule? Kommt mir komisch vor. Und dem Renderer wohl auch.

also: Erstes Filter raus!

Gruss
walter

[gelöscht]
ups, da war jemand vieeel schneller :slight_smile:

Jo, deswegen hab ich das ja dann auch gelöscht (siehe mein letzter post).

Aber was ist mit der verbleibenden Fehlermeldung?

Gruß
Andreas

Hattu aber sehr unklar formuliert. Egal.

bitte poste den restlichen Fehler mit der passenden Umgebung.

Gruss
walter

p.s. ach ja, das deprecated-Warning solltest du auch fixen.

Hallo Walter,

bitte hilf mir dazu nochmal weiter, da ich da ja noch ziemlich unbeleckt bin…

Was meinst du mit “passender” Umgebung?

Und wie kann man das deprecated-Warning fixen?

Danke schonmal und Gruß
Andreas

Aktuelle Fehlermeldung (ohne doppeltes Filter) mit den dazu passenden Datenzeilen, was sonst?

keine Ahnung, muttu Manual lesen. Hat was mit Wechsel von mapnik auf mapnik2 zu tun und dein Vorlagen könnten noch mit mapnik 1 sein.
Mapnik ist bei mir derzeit wegen Rechnerwechsel nicht installiert, daher kann ich nicht testen.

Gruss
walter

p.s. mach mal aus “import mapnik2” “import mapnik” - eventuell war es das mit dem warning.

Hi,

guckst du meinen allerersten post mit der Meldung zu generate_tiles.py und streiche die letzte Zeile des code-Schnippels, dann hast du die übrig gebliebene Fehlermeldung.
Leider nix mit Datenzeilen oder so…einfach nur “* text ‘r’”

Gruß
Andreas

So, der Vollständigkeit halber, hier nochmal die aktuelle Fehlermeldung komplett:

andreas@Phenom-2300:~/osm/myMapnik$ ./generate_tiles.py
render_tiles( (7.8, 51.3, 9.4, 52.5) osm-de.xml tiles/ 12 14 Test )
Traceback (most recent call last):
  File "./generate_tiles.py", line 212, in <module>
    render_tiles(bbox, mapfile, tile_dir, 12, 14, "Test")
  File "./generate_tiles.py", line 136, in render_tiles
    renderer = RenderThread(tile_dir, mapfile, queue, printLock, maxZoom)
  File "./generate_tiles.py", line 64, in __init__
    mapnik.load_map(self.m, mapfile, True)
RuntimeError: Unable to process some data while parsing 'osm-de.xml':
* text 'r'
andreas@Phenom-2300:~/osm/myMapnik$ 

Gruß
Andreas

Sorry, da muß ich passen.

Eventuell reduzierst du das Datenfile solange bis es funktioniert oder nimmst ein total anderes.
Vielleicht gibt es auch Debug-Optionen?

Gruss
walter

Hi Andreas,
schon mal versucht das angemeckerte xml in einem Browser oder einem xml-Editor aufzumachen um zu sehen ob dort auch Fehlermeldungen kommen?
Evtl. hast Du Dir ein “nicht druckbares Zeichen” eingefangen? Hast Du einen Editor, der solche Zeichen (z.B. als Rechteck) sichtbar macht?
Nur so als Idee…
Gruß, Heinz

Nur ne Idee: Mit welchem Zeilenumbruch ist die Datei gespeichert? \r\n könnte evtl. das “r” erklären. :expressionless:

Solange er uns nicht verrät, wie er osm-de.xml erzeugt hat und was drin steht (download!), schweig ich wie ein Pfarrer nach der Beichte.

Gruss
walter

Moin,

dann also nochmal: Steht doch in meinem ersten post, was ich gemacht habe. Dann kann man sich eigentlich auch denken, wo ich die xml-Datei her habe und was drinsteht, oder?

Egal.

xml-Datei (osm-de.xml) steckt in dieser zip-Datei:http://bahnradwandern.bplaced.net/myMapnik.zip

Danach habe ich dieses script drüber laufen lassen: upgrade_map_xml.py

Die Datei hat danach über 8000 Zeilen. Soll ich die hier komplett posten, oder kann man auch ne Datei hier hochladen?

Gruß
Andreas

Hallo Stefan,

wie kann man das auf die Schnelle herausfinden?

Suche ich nach \r\n in osm-de.xml wird nix gefunden. Such ich nach \n findet er was am Ende jeder Zeile, ohne das da was steht…
Hab die Datei mit gedit geöffnet.

Gruß
Andreas