03 January 2014

Mit gdal_contour steht ein Programm zur Verfügung, das aus einem digitalen Terrainmodell Höhenkurven berechnet:

gdal_contour -a elev dtm110733.tif contour.shp -i 10.0

Mit diesem Befehl werden Höhenkurven mit einer Äquidistanz von 10 Metern erzeugt und in der Shapedatei contour.shp gespeichert. Zusätzlich wird die Höhe in das Attribut elev geschrieben.

Ohne jegliches Zutun wirken die Höhenkurven aber unruhig und es sind viele «Kleinst»-Höhenkurven vorhanden:

Höhenkurven mit gdal_contour

Ein schöneres Kartenbild ergibt sich durch vorgängiges Prozessieren des digitalen Terrainmodells. Mit einem Shell-Skript wird das Terrainmodell zehn Mal mit einer bestimmten Resamplingmethode umprojiziert. Das Umprojizieren ist in diesem Fall aber belanglos, da a) nichts umprojiziert wird und b) nur das Verschmieren der Rasterwerte durch das Resampling interessiert:

#!/bin/bash

cp $1 tmp_$1

for i in {1..10}
do
  gdalwarp -co COMPRESS=PACKBITS -overwrite -r cubicspline tmp_$1 smooth_$1
  cp smooth_$1 tmp_$1
done

rm contour_smooth.*
gdal_contour -a elev smooth_$1 contour_smooth.shp -i 10.0

ogr2ogr -overwrite -dialect SQLITE contour_smooth_reduced.shp contour_smooth.shp -sql "SELECT * FROM  contour_smooth WHERE ST_Length(GEOMETRY) > 100"

Das 10-fache Resampling findet in der for-Schleife statt. Anschliessend werden die Höhenkurven erzeugt. Der letzte Befehl löscht alle Höhenkurven, deren Länge kleiner 100 Meter ist. Dieser Befehl funktioniert erst mit gdal ≥ 1.10.

Et voilà:

Smoothe Höhenkurven

Posted by Stefan Ziegler. | GDAL , OGR , bash , Höhenkurven