Umwandlung der CIAT Höhendaten in Shapefiles und pgSQL

Hallo liebes Forum,
ich habe mir gerade die Höhendaten von CIAT geladen unter http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp

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?

Danke für Eure Hilfe
Martin

Hi!

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.

Die beste Hilfe zu den GDAL tools kriegst Du in diesem ML-Forum:
http://osgeo-org.1803224.n2.nabble.com/GDAL-Dev-f2022644.html

bye
Nop

Hallo Nop,

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. :slight_smile:

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.

viel Erfolg

        Nop

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

Viel Erfolg und vielen Dank an Nop