⬅ Zurück zur Übersicht

NASA – Höhendaten visualisieren

david am Sonntag, 01.03.2020 - 03:02:18
⬅ Zurück zur Übersicht

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
40
41
42
43
44
45
46
47
<?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);
?>
Kommentar schreiben

Kommentare

Cool! Willst du eventuell noch Schatten hinzufügen? Wie ich dich kenne ist das ein größeres Projekt das da dahinter steckt?

Haha, der Kommentar kam aber schnell 🙂
Ja, ich hab noch die ein oder andere Idee die ich gerne mit den Daten umsetzen würde, muss mir allerdings erstmal überlegen ob alles so umsetzbar ist wie ich möchte und ob die Performance von meinem kleinen vServer dafür ausreicht.

Thanks really valuable. Will certainly share website with my buddies.

Thanks, this website is really handy.