Mein Ziel wäre für ein Online Portal Karten für Deutschland, Österreich und die Schweiz zu rendern mit Höhenlinien und Hillshading.
Im Prinzip also was ähnliches wie die ziemlich geniale Reit- und Wanderkarte (http://topo.openstreetmap.de/) die ja auch die CIAT Daten verwendet.
Nachdem ich die Daten heruntergeladen und entzippt habe erhalte ich *.hdr, *.tfw und *.tif Dateien. Diese möchte ich jetzt mit gdal_contour gemäß dem Tutorial unter (http://wiki.openstreetmap.org/wiki/Contours) wandeln in Shapefiles und verwende dazu folgende bash Datei:
#!/bin/bash
rm /home/bergsport/RAID/tileserver/data/contours/extracted/*.hgt #remove unzipped .hgt files, not needed
rm /home/bergsport/RAID/tileserver/data/contours/extracted/*.shp #remove old shapefiles so that gdal_contour doesn't barf
rm /home/bergsport/RAID/tileserver/data/contours/extracted/*.shx
rm /home/bergsport/RAID/tileserver/data/contours/extracted/*.dbf
for X in /home/bergsport/RAID/tileserver/data/contours/extracted/*.tif
do
echo $X
gdal_contour -i 10 -snodata 32767 -a height $X ${X%%.tif}c10.shp
gdal_contour -i 50 -snodata 32767 -a height $X ${X%%.tif}c50.shp
gdal_contour -i 100 -snodata 32767 -a height $X ${X%%.tif}c100.shp
done
Leider bricht gdal_contour immer mit folgender Fehlermeldung ab:
0...10...20...30...40.ERROR 2: CPLRealloc(): Out of memory allocating 219360 bytes.
Gibt es eine Möglichkeit gdal_contour mit mehr virtuellem Speicher aufzurufen, oder weiß jemand wie ich das Problem sonst umgehen kann?
Erst mal hast Du noch einen Fehler drin: Der nodata-Wert der CIAT Daten ist -32768, Du gibst ihn aber mit -snodata 32767 an. Das könnte zu Artefakten führen, falls eine längere Küstenlinie in der Kachel ist. Bei mir erkennt gdal_contour den Wert allerdings selbstständig, so daß man den Parameter ganz weglassen kann.
Falls das nichts bringt, kann es einfach sein, daß das Gebiet zu groß ist, dann müßtest Du es erst mit gdalmerge in kleinere Stücke schneiden.
ich glaube langsam bin ich Dir ein Bierchen schuldig. Danke für Deine super schnelle Antwort. Kann es sein, dass Du ohnehin der kreative Kopf hinter der Reit- und Wanderkarte bist?
Ich werde mal versuchen den nodata wert wegzulassen. Im Moment läuft auf der Maschine gdalwarp um das Hillshading voranzutreiben. Ich glaub ich hab schon verstanden wie ich die Dateien mit gdal_merge verkleinern könnte. Nur weiß ich nicht woher ich die Koordinaten für bekomme. Von der Seite http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp hab ich mir die Kacheln 35-1 … 31-5 bis 42-1…42-5 heruntergeladen (also ziemlich genau Europa). Die Kacheln sind anscheinend zu groß für gdal_contour. Auf der Website habe ich aber keine Möglichkeit gefunden kleinere GeoTIFF Dateien zu laden. Bleibt mir nur gdal_merge. Da könntest mir vielleicht noch eine Tip geben. Ist mit Längen und Breitengrade gemeint. Wenn ja könnt ich doch mit folgender bash Europa in kleinere 1x1 Grad Dateien aufteilen:
#!/bin/bash
for (( I=-12; $I <= 25; I++ ))
do
for (( J=10; $J <= 35; J++ ))
let NEXTI = $I + 1
let NEXTJ = $J + 1
gdal_merge.py -v -o europa_$I_$J -ul_lr $I $J $NEXTI $NEXTJ /home/bergsport/RAID/tileserver/data/contours/extracted/*.tif
done
done
Ich probiers mal aus und lass es euch wissen obs geklappt hat. Dauert halt ewig bis das durchgerechnet ist. Wenn ich für andere Werte brauche wärs nett, wenn Ihr es mich wissen lassen könntet.
Danke und Grüße aus Passau
Martin
Sieht so aus. Das Bier bitte als Attachement schicken.
Richtig, die CGIAR Daten gibt’s nur in 5°x5°. Man kann nicht pauschal sagen, daß das zu groß ist, das hängt an der Komplexität der Höhenlinien. In den Alpen muß man recht klein schneiden, an der Nordseeküste kannst Du viel größere Flächen in einem Satz rechnen.
Die Koordinaten sind Geokoordinaten, richtig, Du mußt nur auf die richtige Reihenfolge achten, die ist leider manchmal unterschiedlich. Die Abmessungen einer CGIAR-Kachel kriegst Du mit gdalinfo raus. gdal_merge ist ziemlich schnell, < 5 Sekunden pro geschnittener Kachel.
Also für alle die mal das gleiche Problem haben. hier meine bash Datei mit der ich die CIAT Daten in kleinere Dateien zerlegen konnte und dann in Shapefiles wandeln konnte:
In kleinere Dateien zerlegen:
#!/bin/bash
for (( I=-10; $I<=30; I++ ))
do
for (( J=60; $J>=35; J-- ))
do
let nexti=$I+1
let nextj=$J-1
echo $nexti
echo $nextj
echo europa_${I%%}_${J%%}
gdal_merge.py -v -o /home/bergsport/RAID/tileserver/data/contours/extracted/europa_${I%%}_${J%%}.tif -ul_lr $I $J $nexti $nextj /home/bergsport/RAID/tileserver/data/contours/extracted/*.tif
done
done
Ihr müsst halt dann einfach noch euer Verzeichnis anpassen. Betriebssytsem: Ubuntu Lucid Lynx