Höhenlinien / Contours: Probleme beim Einbinden der Daten in osm.xml

Hallo Forum,
kurzer Background: Ich beschäftige mich erst seit ca. 2 Wochen mit OSM und dem Renderer Mapnik. Bitte also nicht verwundert sein, wenn ich etwas uninformiert wirke :slight_smile: Mein Ziel: Einen eigenen Kartenserver für ein großes Webprojekt erstellen. Dafür möchte ich auch Karten mit eigenem Style generieren. Dazu benutze ich wie gesagt Mapnik. Für die Karten hätte ich gerne die Features Hill Shading und Elevation Coloring. Zur Übung wollte ich mich mal auf Höhenlinien beschränken und habe dazu das Tutorial durchgeführt unter:
http://wiki.openstreetmap.org/wiki/Contours

Um die Sache möglichst einfach zu halten, habe ich mich für den Shapfile Approach entschieden. Ich habe mich auch tapfer durch das Tutorial gekämpft, so dass ich jetzt 300GB indexierte Shapefiles für die Höhenlinien in ganz Eurasia zur Verfügung habe. Der Punkt an dem ich scheitere scheint das Einbinden in die osm.xml zu sein. Im Tutorial steht folgender Satz:

Da die generierten include Files selbst über 10.000 Zeilen haben, dacht ich mir mit Copy&Paste ist das nicht getan, so dass ich die Files via include in osm.xml einbinden wollte. Ich hab mir also die osm.xml angesehen und am Anfang folgenden include entdeckt:


<!DOCTYPE Map [
<!ENTITY % entities SYSTEM "inc/entities.xml.inc">
%entities;
]>

Um die zusätzlichen Definitionen für die Höhenlinien einzubinden hab ich das Ganze also folgendermaßen ersetzt:


<!DOCTYPE Map [
<!ENTITY % entities SYSTEM "inc/entities.xml.inc">
<!ENTITY % entities SYSTEM "inc/contour-layers-c10.include">
<!ENTITY % entities SYSTEM "inc/contour-layers-c50.include">
<!ENTITY % entities SYSTEM "inc/contour-layers-c100.include">
%entities;
]>

Beim Ausführen der generate_image.py ergibt das ganze aber das absolut gleiche Ergebnis. Sprich eine schöne Karte aber ohne Höhenlinien. Um sicher zu gehen, dass ich die Files auch richtig eingebunden habe, habe ich mal nicht vorhandene Dateien eingebunden:


<!DOCTYPE Map [
<!ENTITY % entities SYSTEM "inc/entities.xml.inc">
<!ENTITY % entities SYSTEM "inc/gibtesnicht.inc">
%entities;
]>

Leider werden auch hier keine Fehlermeldungen generiert, so dass ich nicht weiß was ich falsch mache. Hat hier im Forum vielleicht schon mal jemand das Tutorial gemacht und kann mir sagen, was ich falsch mache?

Danke für Eure Hilfe und ein schönes Wochenende.
Martin

Welche Version von mapnik?

Hallo Nop. Momentan läuft das Ding noch auf Windows. Also mapnik-0.7.1 für Windows. Kann es daran liegen?

Sollte es nicht. Es ist nur verwunderlich, daß Du keine qualifizierte Fehlermeldung bekommst. Bei Mapnik ab 0.7 sollte immer was sinnvolles ausgegeben werden. Hab nur gefragt weil bei einem früheren Fall unter Linux eine steinalte Version verwendet wurde.

Ich benutze selber eine einzige, große Datei ohne Inlcudes, da kann ich Dir leider nicht viel helfen.

Jede der <!ENTITY-Zeilen muss eine andere Variable definieren, ansonsten kannst zu die Include-Datei gar nicht ansprechen. Zudem musst Du die Variable dann natürlich auch noch ‘aufrufen’…

<!DOCTYPE Map [

%entities;
%contour10;
%contour50;
%contour100;
]>

Bei der Ausführung des Scripts wird dann im XML an der Stelle %contour10; die Datei inc/contour-layers-c10.include eingefügt. (Haben Deine Dateien tatsächlich die Endung .include?)

Hallo t-i,
vielen herzlichen Dank für den Tip. Ja die Dateien enden auf .include. Das macht das Script aus dem Tutorial so. Ein Umbenennen auf .inc geht natürlich ohne Problem. Das Einbinden der Daten funktioniert nun auch ganz prima. Ich habe das so gemacht:

Am Ende der Datei " inc/layers.xml.inc" folgende Definition einfügen:

<!ENTITY contour10 SYSTEM "contour-layers-c10.include">
<!ENTITY contour50 SYSTEM "contour-layers-c50.include">
<!ENTITY contour100 SYSTEM "contour-layers-c100.include">

Ausgabe der Definition in osm.xml:
Einfügen folgender Zeilen nach &layer-admin; ganz am Ende der Datei" osm.xml:"

&contour10;
&contour50;
&contour100;

Das Gute:
Die Dateien werden eingebunden (heißt ich bekomme Fehlermeldungen, wenn ich einen Fehler in die contour Dateien einbaue). Das Rendern dauert deutlich länger. Es scheint also so als würde er etwas zusätzliches machen.

Das Schlechte:
Auf der entstandenen Karte sind keine Höhenlinien. Kann es sein, dass ich das Einbinden in der osm.xml an der falschen Stelle gemacht hab? Ich hätte schon ein paar Positionen ausprobiert, aber noch nie Höhenlinien erhalten. Wär schön, wenn Ihr mir nochmal weiterhelfen könntet.

Danke Martin

Noch ein EInfall. Kann es sein, dass die Projektionen nicht zusammenpassen (sorry nochmal ich bin noch Newbie).
In der generate_image.py:

prj = mapnik.Projection("+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs +over")

In den contour Dateien:

<Layer name="srtm100" status="on" srs="+proj=latlong +datum=WGS84">

Kann es daran liegen?

Das kann durchaus sein - bei mir haben die Konturen eine andere Projektion als die OSM-Daten.

bye
Nop