NASA - Visualizing Elevation Data
A small snippet for visualizing NASA elevation data. You can get the data here: https://lpdaac.usgs.gov/products/srtmgl3v003/
The script has to be uploaded to the server, and the HTTP server needs write permission for the meta file. On the first run, a meta file is created that stores the lowest and highest elevation, for better visualization and to speed up further renderings. The visualization could still be optimized a bit. If you have ideas or tips on how to make the coloring a little more realistic, feel free to write to srtm@devdave.de :-) Have fun.
<?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);
?>