EU-DEM und NASA SRTM-Daten

Hö­hen­da­ten aus der Luft ge­grif­fen ...

SRTM-Daten V3 «no vo­ids»

Seit An­fang 2015 lie­gen ver­bes­ser­te SRTM (Shut­tle Ra­dar To­po­lo­gy Mis­si­on) Da­ten vor. Die Ver­sion 3 der SRTM Da­ten ist in ge­wis­ser Wei­se ei­ne Re­vo­lu­ti­on, da erst­ma­lig kei­ne Hö­he fehlt! Daraus las­sen sich neue Fea­tu­res bau­en, z. B. die Be­rech­nung ei­ner Schum­me­rung (hill sha­ding) auf dem ei­ge­nen Rech­ner. GNavigia kann das. Wie es geht, wie man das kon­fi­gu­riert und was das be­deu­tet, ha­be ich auf ei­ner se­pa­ra­ten Sei­te im Netz er­läu­tert:

«Schum­me­rung aus SRTM V3 Da­ten lo­kal er­zeu­gen»

mit der ul­ti­ma­ti­ven Er­wei­te­rung für Skan­di­na­vi­en (Nor­we­gen, Schwe­den, Finn­land):

«SRTM V3 glei­che Da­ten aus EU-DEM-Daten lo­kal er­zeu­gen»

Denn ak­tu­ell gilt: Die OSM-Gemein­de ver­wal­tet die Ka­cheln im­mer re­strik­ti­ver. Zeit­wei­se wa­ren auf dem Netz kei­ne Ka­cheln für die Schum­me­rung ver­füg­bar. Um von all dem Zir­kus un­ab­hän­gig zu sein, gibt es nun (auch) ei­ne hand­ge­mach­te Schum­me­rung. Zu­sam­men mit ei­ner Post­greSQL Da­ten­bank, die für die Schum­me­rung nicht er­for­der­lich ist, kann man sich un­ter Ein­satz von ca. 100 GB Plat­ten­platz «in sei­ne ei­ge­ne Welt» zu­rück­zie­hen. Aber auch oh­ne das lie­fert der neue An­satz ein deut­lich schö­ne­res Kar­ten­bild:

GNavigia Hill shading/Schummerung

GNavigia (Next) mit Im­posm3-Daten­bank­mo­dell

Viel bes­ser wird die Dar­stel­lung oh­ne­hin erst, wenn man selbst Kar­to­gra­fie be­treibt. Das fol­gen­de Bei­spiel zeigt ei­ne al­ler­ers­te Stu­die auf Ba­sis ei­ner PostGIS Da­ten­bank mit IMPOSM3 Da­ten­bank­mo­dell. Die sicht­ba­re Be­son­der­heit ist aber ei­ne gang an­de­re: Wur­de die Schum­me­rung frü­her über die fer­ti­ge Kar­te ge­legt, wird sie heu­te zwi­schen Kar­te und Be­schrif­tung po­si­tio­niert. Da­durch wird auch klei­ne Schrift nicht mehr un­le­ser­lich über­la­gert. Das Pro­jekt, das noch Wo­chen in An­spruch neh­men wird, hört auf den Ar­beits­ti­tel «best les­ba­rer Text»!

GNavigia (Next) mit Imposm3-Datenbankmodell und Hill shading/Schummerung

Die Be­rech­nung von Hö­hen­li­ni­en

GNavigia - Berechnung von Höhenlinen Aus den Hö­hen­da­ten las­sen sich Hö­hen­li­ni­en ab­lei­ten. Das Re­sul­tat soll, wie in den «gu­ten al­ten Zei­ten» der Kar­to­gra­fie, die Zah­len so dar­stel­len, dass sie mit dem Fuß ins Tal zei­gen, al­les an­de­re wä­re di­let­tan­tisch. Die hier ge­wähl­te Vor­ge­hens­wei­se ist be­son­ders an­schau­lich und ein­fach, al­ler­dings las­sen sich die Li­ni­en nur be­dingt glät­ten, die Re­sul­ta­te sind noch ex­pe­ri­men­tell.

Da­mit das Er­geb­nis bes­ser aus­sieht, wird ei­ne Zoom­stu­fe hö­her ge­rech­net als für die Dar­stel­lung er­for­der­lich, al­so 15 bei Stu­fe 14. Die Ka­chel­flä­che wird ent­spre­chend vier mal so groß, al­so 512x512 Pi­xel. Zu­letzt wird das Er­geb­nis wie­der auf 256x256 ver­klei­nert, was für an­spre­chen­de Li­ni­en und gut les­ba­re Zah­len sorgt. Kli­cken Sie auf die Gra­fik, um die Ver­grö­ße­rung an­zu­zei­gen!

  • Für je­des Pi­xel wird ei­ne Hö­he be­rech­net und ab­ge­legt. Da­nach wird der Über­gang über zu­vor fest­ge­leg­te, run­de Wer­te er­mit­telt und das Pi­xel farb­lich ge­kenn­zeich­net. Für aus­ge­zeich­ne­te Wer­te wird ein dunk­le­res Pi­xel er­zeugt. Da­mit sind die Li­ni­en be­reits sicht­bar.
  • Knick­punk­te und Ein­zel­li­ni­en wer­den ent­fernt und so in ers­ter Nä­he­rung ge­glät­tet.
  • Für die Be­schrif­tung mit Zah­len er­folgt (dann doch) ei­ne Li­ni­en­ver­fol­gung. Ei­nem Hö­hen­ni­veau kön­nen meh­re­re Li­ni­en­ab­schnit­te zu­ge­ord­net sein. Wenn ein An­fangs­punkt von L1 an ei­nen End­punkt von L2 an­stößt, wird die Li­nie L1 auf­ge­ge­ben und an L2 an­ge­hängt. Sto­ßen zwei An­fangs­punk­te oder End­punk­te an­ein­an­der, wird ei­ne der bei­den Li­ni­en um­ge­kehrt und an die an­de­re an­ge­hängt. Ziel ist es, mög­lichst nur ei­ne Zahl pro zu­sam­men­hän­gen­der Li­ni­en­geo­me­trie ein­zu­tra­gen.
  • Die Li­ni­en­ver­fol­gung er­laubt es, Ab­schnit­te zu su­chen, die so grad­li­nig sind, dass man die Hö­hen­zahl mit ge­ra­der Stand­li­nie ein­tra­gen kann. Zu­dem steht für je­den die­ser Ab­schnit­te der Dreh­win­kel für die An­zei­ge fest, die Ori­en­tie­rung (Fuß Rich­tung Tal) wird auf­grund der be­nach­bar­ten Hö­hen er­mit­telt und der Dreh­win­kel ggf. um 180° ge­än­dert. Die Ab­schnit­te wer­den ge­sam­melt und da­hin­ge­hend ana­ly­siert, wel­cher die best les­ba­re Dar­stel­lung der Zahl er­laubt.
  • Die Ka­cheln wer­den im Ca­che 8085 ab­ge­legt. Die Be­rech­nung ei­ner Ka­chel dau­ert zwei bis vier Se­kun­den auf ei­nem 11 Jah­re al­ten In­tel® Co­reTM i5-2500K.

Ei­ne Frei­stel­lung von We­gen und Ge­bäu­den er­folgt nicht.

We­gen der Frei­stel­lung der Hö­hen­zah­len muss der Layer der Hö­hen­li­ni­en vor dem Layer der Schum­me­rung ge­zeich­net wer­den. Da­zu ist die Kon­fi­gu­ra­ti­on des Tile-Ser­vers um das At­tri­but prio er­wei­tert wor­den: Je hö­her die Zahl de­sto spä­ter wird ge­zeich­net. Die Ba­sis­kar­te (OSM-BKG), hier ein Aus­schnitt mit Glet­scher und Gren­zen, wird un­ab­hän­gig da­von im­mer zu­erst ge­zeich­net.

Die In­ter­po­la­ti­on von Hö­hen

Neh­men wir ein­mal an, sie hät­ten ei­nen Track in ei­nem Pro­gramm di­gi­ta­li­siert, das Ih­nen kei­ne Hö­hen lie­fert, dann ste­hen Sie nach dem Ein­le­sen der Da­ten vor ei­nem Track mit lau­ter Null­hö­hen. Die­se Hö­hen kann GNavigia auf un­ter­schied­li­che Ar­ten er­mit­teln:

  • In­ter­po­la­ti­on der Hö­hen aus den Hö­hen­li­ni­en ei­ner Post­greSQL-Daten­bank.
  • Down­load der ge­pack­ten HGT-Datei und In­ter­po­la­ti­on aus der Da­tei.
  • Be­reit­stel­lung der ge­pack­ten HGT-Datei­en mit­tels An­mel­dung, Down­load und ggf. Vor­ver­ar­bei­tung und In­ter­po­la­ti­on aus den Da­tei­en.

Die im fol­gen­den be­schrie­be­ne Vor­ge­hens­wei­se ist stets die glei­che, egal ob die Da­ten aus der Da­ten­bank oder der Da­tei stam­men. Der Be­nut­zer muss bei­de Ar­ten in ge­wis­sem Um­fang kon­fi­gu­rie­ren. Für den prak­ti­schen Ein­satz wird heu­te aber nur noch die Lö­sung «nach Be­reit­stel­lung» in Fra­ge kom­men.

Be­vor Hö­hen­da­ten über­tra­gen wer­den kön­nen, muss ein Track aus­ge­wählt wer­den, auf des­sen Track­punk­te die Ope­ra­tio­nen an­ge­wen­det wer­den sol­len. Wäh­len Sie aus dem Me­nü der Appli­ka­ti­on her­aus Be­ar­bei­ten/Track/Hö­hen aus SRTM-Daten in­ter­po­lie­ren/Al­le ak­ti­ven Track­punk­te. Es er­scheint ein Dia­log, der die Dif­fe­ren­zen ta­bel­la­risch dar­stellt und ein Ab­bre­chen oder auch nur die Ein­schrän­kung auf be­stimm­te Wer­te er­mög­licht.

Kli­cken auf die Spal­te mit dem Kreuz ([X]) wech­selt zwi­schen drei Zu­stän­den:

  • al­le Punk­te se­lek­tiert
  • kein Punkt se­lek­tiert
  • nur Punk­te mit Null­hö­hen se­lek­tiert, falls es ein­zel­ne Null­hö­hen gibt.

Mit­hil­fe der Schalt­flä­che Zen­trie­ren kann man sich das nä­he­re Um­feld ei­nes Punk­tes ge­nau­er an­se­hen. Klickt man ein zwei­tes Mal für den­sel­ben Punkt, wird die vor­aus­ge­hen­de Dar­stel­lung an­ge­zeigt. Wei­te­res Kli­cken wan­dert im Sta­pel der An­zei­ge wei­ter zu­rück. (In Vor­be­rei­tung.)

Ge­schütz­te Hö­hen

Wird ei­ne SRTM-Höhe von 0.0 an­ge­zeigt, dann liegt es dar­an, dass (in be­son­ders fla­chen Ge­bie­ten kann das vor­kom­men) die nächs­te Hö­hen­li­nie zu weit vom Track­punkt ent­fernt ist. Ei­nen sol­chen Wert in­ter­po­liert man spä­ter über die be­kann­te In­ter­po­la­ti­ons­funk­ti­on für zu 0 ge­setz­te Hö­hen. Au­ßer­dem gibt es Ab­schnit­te, z. B. Brücken, für die Sie die Hö­hen spe­zi­ell in­ter­po­lie­ren oder gleich von Hand set­zen wol­len. Sol­che Ak­tio­nen er­zeu­gen so­ge­nann­te «ge­schütz­te Hö­hen». Be­las­sen Sie es da­bei, dass ge­schütz­te Hö­hen nicht über­schrie­ben wer­den!

Kor­rek­tur und Aus­ga­be der Da­ten

SRTM-Höhen kön­nen um ei­nen ge­wis­sen Be­trag von den Er­war­tun­gen ab­wei­chen. Hier­für kann man die Hö­hen vor der Über­tra­gung auf die Track­punk­te um ei­nen ge­wis­sen, kon­stan­ten Wert kor­ri­gie­ren. Ge­ben Sie den Kor­rek­tur­wert in das Ein­ga­be­feld ein und be­tä­ti­gen Sie die Schalt­flä­che «Kor­rek­tur». Das Re­sul­tat än­dert sich.

Die Schalt­flä­che «Als Da­tei spei­chern» er­zeugt ei­ne Da­tei mit al­len be­rech­ne­ten und ggf. kor­ri­gier­ten Wer­ten. Die Da­tei ent­hält kei­ne Koor­di­na­ten.

SRTM-Höhen aus HGT-Datei­en er­mit­teln

GNavigia konn­te frü­her per HTTP-Request die HGT-Datei­en V3 («no vo­ids») ab­ru­fen und aus­wer­ten, die vom US Geo­de­tic Sur­vey da­mals noch oh­ne Re­gis­trie­rung be­reit­ge­stell­te wur­den. Ei­ne re­strik­ti­ve­re Po­li­tik hat dem ein En­de ge­macht.

Sind die Da­tei­en (noch) vor­han­den, durch Down­loads her­un­ter­ge­la­den oder aus EU-DEM Da­ten um­ge­setzt, kön­nen sie nach wie vor für die In­ter­po­la­ti­on von Hö­hen be­nutzt, aber auch zur Be­rech­nung ei­ner Schum­me­rung ver­wen­det wer­den.

Da­mit Hö­hen­da­ten ab­ge­ru­fen wer­den, müs­sen Sie ein Ver­zeich­nis an­ge­ben, ei­nen so­ge­nann­ten «Ca­che», in dem die Da­ten ab­ge­legt sind!

Da­mit SRTM-Höhen ver­wen­det wer­den, müs­sen Sie zwei Din­ge tun:

  • Sie müs­sen ein Ver­zeich­nis an­ge­ben, in dem die HGT-Datei­en ab­ge­legt wer­den kön­nen, und
  • sie müs­sen im Me­nü un­ter «Ex­tras/Ein­stel­lun­gen» im Rei­ter «Hö­hen» an­ge­ben, dass SRTM-Höhen ver­folgt wer­den sol­len.
Letz­te­res ist nur dann nö­tig, wenn Sie beim Kli­cken in die Kar­te Hö­hen­an­ga­ben in der Sta­tus­leis­te se­hen wol­len. Al­le an­de­ren Funk­tio­nen ar­bei­ten auch oh­ne den zwei­ten Schritt.

Die Kon­fi­gu­ra­ti­on ge­schieht da­zu im En­vi­ron­ment (der Um­ge­bung). Wie das geht und was Sie min­des­tens tun müs­sen, ist un­ter Sys­tem­tipps in epi­scher Brei­te be­schrie­ben. Set­zen Sie min­des­tens

GNAVIGIA_SRTM_CACHE=C:\Cache\SRTM

Sie müs­sen GNavigia neu star­ten, falls es ge­öff­net sein soll­te. Da­nach be­rech­net das Pro­gramm Hö­hen­da­ten. Durch den Ca­che kön­nen Sie aber auch ei­ne Wei­le off­line ar­bei­ten, da die Da­ten, an­ders als die Ka­cheln, für al­le Maß­stä­be und Zoom­stu­fen die­sel­ben sind.

Ca­che bei ei­ge­ner Be­reit­stel­lung der SRTM-Daten

Sie dür­fen den Ca­che auf gar kei­nen Fall be­gren­zen, da sonst Da­tei­en «ver­schwin­den» kön­nen.

Ca­che beim Down­load der SRTM-Daten

Stan­dard­mä­ßig wird das Pro­gramm ei­nen Ca­che von un­be­grenz­ter Grö­ße an­le­gen. Für Deutsch­land kom­plett be­nö­ti­gen Sie et­wa 250 MB. Wie Sie den Ca­che be­gren­zen kön­nen, fin­den Sie eben­falls un­ter Sys­tem­tipps.

Der Ca­che ist schlau. Da sich SRTM-Daten nie wie­der än­dern wer­den bis sie durch bes­se­re und voll­stän­di­ge­re Da­ten er­setzt wer­den, kön­nen Sie der Ca­che­ver­wal­tung mit­tei­len, dass Sie be­stimm­te Da­tei­en nie­mals lö­schen soll. Da­zu müs­sen Sie im Ca­che­ver­zeich­nis die Da­tei «Ca­cheSa­ve.txt» an­le­gen und die Da­tei­en, die nicht ge­löscht wer­den sol­len, ein­tra­gen. Da­zu muss in je­der Zei­le der Da­tei links­bün­dig ge­nau ein Da­teiname ste­hen. Sol­len al­le Da­tei­en, die sich im Ver­zeich­nis be­fin­den, ein­ge­tra­gen wer­den, öff­nen Sie ei­ne «Ein­ga­be­auf­for­de­rung» mit­tels «cmd», wech­seln in das Ver­zeich­nis und tip­pen am Prompt ein:

C:\Cache\SRTM>dir /B >CacheSave.txt

Da­mit ist die Da­tei er­stellt. Sie darf nur Da­tei­en ent­hal­ten, die auf «hgt.zip» en­den. Sie wird aus­ge­wer­tet, wenn es um das Be­rei­ni­gen des Ca­ches geht. Die Da­tei hat Vor­rang vor der An­ga­be der Grö­ße des Ca­ches. Wenn Sie für 1 GB Da­tei­en an­ge­ben, wird der Ca­che im Lau­fe der Zeit auf 1 GB an­wach­sen. Da die Da­tei­en kom­pri­miert sind und un­ter­schied­lich groß, gibt es kei­ne Über­schlags­for­mel für die An­zahl der Da­tei­en.

Die HGT-Datei­en wer­den über ei­nen HTTP-Request syn­chron ge­la­den. Nach 1-2 Se­kun­den soll­te die Da­tei ge­la­den und die Hö­he be­stimmt sein. Da­nach ist nicht nur die Da­tei im Ca­che, auch de­ren Da­ten wer­den im Pro­gramm in ei­nem in­ter­nen Ca­che ver­wal­tet, der na­tür­lich nur so­lan­ge ak­tiv ist, wie das Pro­gramm läuft. Zu­grif­fe dar­auf be­we­gen sich im Be­reich von Mil­li­se­kun­den.

Den Pfad für den HTTP-Request ent­nimmt das Pro­gamm ei­ner Set­zung in der Kon­fi­gu­ra­ti­ons­da­tei GNavigiaDigitalElevation.xml, die im Ver­zeich­nis der aus­führ­ba­ren Da­tei­en liegt. Die Set­zun­gen sind ein­ge­tra­gen un­ter:

<SRTM.V3>

SRTM V2 wird nicht mehr un­ter­stützt.

SRTM-Höhen aus Hö­hen­li­ni­en ei­ner Post­greSQL Da­ten­bank

Das Pro­gramm kann Hö­hen­da­ten hin­rei­chend ex­akt in­ter­po­lie­ren, so­fern die OSM-Daten­bank hier­zu mit SRTM-Daten ge­füllt ist. Ers­te Tests ha­ben ge­zeigt, dass sich da­mit Ge­nau­ig­kei­ten um 20 m für die Hö­he er­zie­len las­sen. Das be­reits zu­vor er­wähn­te PDF-Doku­ment er­läu­tert die Vor­ge­hens­wei­se zum Ein­spie­len von NASA SRTM-Daten.

Die Sei­te GNavigia Cli­ents ist u. a. dem ODBC-Anschluss von Da­ten­ban­ken ge­wid­met, nur dass hier die Da­ten­quel­le (Da­ta Sour­ce) post­gres_srt­m_v2 lau­ten muss. (Un­ter Win­dows 64-Bit müs­sen Sie für das Hin­zu­fü­gen des ODBC-Trei­bers statt Sys­tem­steue­rung/Ver­wal­tung/ODBC-Daten­quel­len als Ad­mi­nis­tra­tor das Pro­gramm C:\Win­dows\SysWOW64\odb­cad32.exe aus­füh­ren, um 32-Bit ODBC-Trei­ber hin­zu­zu­fü­gen.)

Di­gi­ta­li­sie­ren von Punk­ten

Beim Di­gi­ta­li­sie­ren von Punk­ten wird au­to­ma­tisch ei­ne SRTM-Höhe in­ter­po­liert, wenn die Funk­tio­na­li­tät zur Ver­fü­gung steht. Da für je­de Hö­he ein neu­er Thread er­zeugt wird, kann es auf lang­sa­men Ma­schi­nen da­zu kom­men, dass die Hö­hen­be­stim­mung nach­läuft. Ein Ver­such auf ei­nem 3000+ Ath­lon mit schnel­ler Klick­fol­ge, 1100 Punk­ten und 180 km Track­län­ge führ­te zu dem Er­geb­nis, dass im Ma­xi­mum fast 800 Threads zu­sätz­lich ak­tiv wa­ren. Nach ei­ner lan­gen Pha­se kon­kur­rie­ren­der Be­rech­nun­gen lie­fen die Er­geb­nis­se am En­de fast si­mul­tan ein, so­dass man dann «die Hö­hen her­an­flie­gen sah», zu­dem in ei­ner et­was an­de­ren Rei­hen­fol­ge als die in­ner­halb des Tracks, zeit­lich ge­se­hen, nicht räum­lich.

In­ter­po­la­ti­ons­for­mel

Die In­ter­po­la­ti­on von Hö­hen ba­siert auf Da­ten­bank­funk­tio­nen, die durch­aus zu un­er­war­te­ten Re­sul­ta­ten füh­ren kön­nen. Da­her soll der ver­wen­de­te Al­go­rith­mus nä­her er­läu­tert wer­den, wo­bei rech­te Win­kel, wie in der Geo­dä­sie üb­lich, mit dop­pel­ten Vier­tel­krei­sen mar­kiert sind:

Eine Datenbankfunktion sucht die bei­den Hö­hen­li­ni­en, für die, wenn man vom zu in­ter­po­lie­ren­den Punkt P das Lot auf die­se fällt, die Län­ge des Lots mi­ni­mal ist. Da­zu wird in ei­nem fes­ten Um­kreis um P ge­sucht und al­le Lo­te wer­den der Län­ge nach auf­stei­gend sor­tiert. Die ers­ten bei­den Er­geb­nis­se lie­fern die nächs­ten Nach­barn des Punk­tes. Zwi­schen den Lot­fuß­punk­ten P1 und P2 wird ge­dank­lich ei­ne Li­nie auf­ge­spannt und der Punkt P wird dar­auf auf­ge­win­kelt. Im Lot­fuß­punkt wird die Hö­he in­ter­po­liert und als die Hö­he von P ver­mu­tet. Wenn die Hö­hen­li­ni­en ziem­lich par­al­lel und mit glei­chen Ab­stän­den ver­lau­fen, ist das auch der Fall.

Im skiz­zier­ten Bei­spiel lie­gen die bei­den nächs­ten Li­ni­en aber so, dass der Punkt P zwi­schen P2 und P3 ex­tra­po­liert wer­den müss­te. Dem trägt der Al­go­rith­mus Rech­nung. P wird auf die Li­nie zwi­schen P2 und P3 auf­ge­win­kelt, wo­durch ein ge­ring­fü­gig an­de­res Er­geb­nis für die Hö­he des Punk­tes auf­tritt, als er­war­tet. Al­ler­dings sind we­der die SRTM-Höhen noch mit­tel GPS er­mit­tel­te Ver­gleichs­wer­te ge­nau­er als 10 Me­ter, so­dass der Feh­ler ge­ring ist ge­gen die zu er­war­ten­de Ge­nau­ig­keit.