Visualiser les données d'altitude de la NASA
Un petit snippet pour visualiser les données d'altitude de la NASA. Vous les trouverez ici : https://lpdaac.usgs.gov/products/srtmgl3v003/
Le script doit être téléversé sur le serveur, et le serveur HTTP doit avoir les droits d'écriture pour le fichier de métadonnées. Lors de la première exécution, un fichier de métadonnées est créé pour améliorer la visualisation et accélérer les rendus suivants : il y stocke l'altitude minimale et maximale. La visualisation mériterait encore quelques optimisations ; si vous avez des idées ou des conseils pour rendre les couleurs un peu plus réalistes, n'hésitez pas à m'écrire à srtm@devdave.de :-) Amusez-vous bien.
<?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);
?>