NASA – Höhendaten visualisieren

Kleines Snippet zum visualisieren der NASA – Höhendaten.
Die Daten gibt’s hier:
https://dds.cr.usgs.gov/srtm/version2_1/SRTM3/
Das Skript muss auf den Server geladen werden, für die Meta – Datei muss der HTTP-Server schreibrechte haben.
Im ersten Durchlauf wird zur besseren Visualisierung und zum Beschleunigen weiterer Renderings eine Metadatei erzeugt, in welcher die kleinste bzw. größte Höhe gespeichert wird.
Die Visualisierung müsste noch etwas optimiert werden, wer hier Ideen oder Tipps hat wie die Farbgebung ein bisschen realistischer gestaltet werden kann darf mir gerne an srtm@devdave.de schreiben 🙂
Viel Spaß.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!--?php
$filename = 'N49E008.hgt';
$gd = imagecreatetruecolor(1201, 1201);
header('Content-Type: image/png');
$minRendered = $maxRendered = 0;
if (file_exists($filename.".meta"))
{
  $createMeta = false;
  list($minH, $maxH) = explode(";", file_get_contents($filename.".meta"));
}else{
  $createMeta = true;
  $minH = 0;
  $maxH = 2000;
}
$r = $g = $b = 0;
$range = 255/(($maxH-$minH)/3);
for($i=$minH; $i<$maxH; $i++){
  switch(0){
    case $i % 3: $r+=$range;
    case $i % 2: $g+=$range;
    case $i % 1: $b+=$range;
  }
  $color[$i] = imagecolorallocate($gd, $r, $g, $b);
}
$fh = fopen($filename, 'rb');
for($y = 0; $y < 1201; $y++)
for($x = 0; $x < 1201; $x++){
  $h = unpack("s", strrev(fread($fh, 2)))[1];
  if ($h == "-32768") continue;
  if ($createMeta){
    if ($h < $minRendered) $minRendered = $h;
    if ($h --> $maxRendered) $maxRendered = $h;
}
imagesetpixel($gd, $x, $y, $color[$h]);
}
fclose($fh);
imagepng($gd);
if ($createMeta) file_put_contents($filename.".meta", $minRendered.";".$maxRendered);
?&gt;
Kommentar schreiben

Kommentare
Impressum | Datenschutz