Format des données
Je vais le prendre comme un petit exercice sur la façon de programmer un lecteur de données. Jetez un œil à la documentation :
Les données SRTM sont réparties sur deux niveaux: SRTM1 (pour les États-Unis et ses territoires et possessions) avec des données échantillonnées à des intervalles d'une seconde d'arc en latitude et longitude, et SRTM3 (pour le monde) échantillonnées à trois secondes d'arc.
Les données sont divisées en tuiles de latitude et de longitude d'un degré en projection "géographique", c'est-à-dire une présentation matricielle avec des intervalles égaux de latitude et de longitude en aucune projection mais facile à manipuler et à mosaïquer.
Les noms de fichiers se réfèrent à la latitude et la longitude du coin inférieur gauche de la tuile - par exemple, N37W105 a son coin inférieur gauche à 37 degrés de latitude nord et 105 degrés de longitude ouest. Pour être plus exact, ces coordonnées se réfèrent au centre géométrique du pixel inférieur gauche, qui dans le cas des données SRTM3 aura une étendue d'environ 90 mètres.
Les fichiers de hauteur ont l'extension .HGT et sont signés de deux octets entiers. Les octets sont dans l'ordre "big-endian" de Motorola, l'octet le plus significatif en premier, directement lisible par des systèmes tels que Sun SPARC, Silicon Graphics et les ordinateurs Macintosh utilisant des processeurs Power PC. DEC Alpha, la plupart des PC et des ordinateurs Macintosh construits après 2006 utilisent l'ordre Intel ("little-endian") donc un échange d'octets peut être nécessaire. Les hauteurs sont en mètres par rapport au géoïde WGS84 / EGM96. Les vides de données reçoivent la valeur -32768.
La façon de procéder
Pour votre position, 50 ° 24'58.888 "N 14 ° 55'11.377" E, vous avez déjà trouvé la bonne tuile, N50E14.hgt. Voyons quel pixel vous intéresse. Première latitude, 50 ° 24'58.888 "N:
24'58.888" = (24 * 60)" + 58.888" = 1498.888"
secondes d'arc. Divisé par trois et arrondi à l'entier le plus proche donne une ligne de grille de 500. Le même calcul pour la longitude donne la colonne de grille 1104.
La documentation de démarrage rapide manque d'informations sur la façon dont les lignes et les colonnes sont organisées dans le fichier, mais dans la documentation complète, il est indiqué que
Les données sont stockées dans l'ordre principal des lignes (toutes les données de la ligne 1, suivies de toutes les données de la ligne 2, etc.)
La première ligne du fichier est très probablement la plus septentrionale, c'est-à-dire si nous sommes intéressés par la ligne 500 à partir du bord inférieur , nous devons en fait regarder la ligne
1201 - 500 = 701
dès le début si le fichier . Notre cellule de grille est nombre
(1201 * 700) + 1104 = 841804
dès le début du fichier (c'est-à-dire ignorer 700 lignes, et dans la 701e, prendre l'échantillon 1104). Deux octets par échantillon signifient que nous devons ignorer les premiers 1683606 octets dans le fichier, puis lire deux octets afin d'obtenir notre cellule de grille. Les données sont big-endian, ce qui signifie que vous devez échanger les deux octets, par exemple sur les plates-formes Intel.
Exemple de programme
Un programme Python simpliste pour récupérer les bonnes données ressemblerait à ceci (voir la documentation pour l'utilisation du module struct):
import struct
def get_sample(filename, n, e):
i = 1201 - int(round(n / 3, 0))
j = int(round(e / 3, 0))
with open(filename, "rb") as f:
f.seek(((i - 1) * 1201 + (j - 1)) * 2) # go to the right spot,
buf = f.read(2) # read two bytes and convert them:
val = struct.unpack('>h', buf) # ">h" is a signed two byte integer
if not val == -32768: # the not-a-valid-sample value
return val
else:
return None
if __name__ == "__main__":
n = 24 * 60 + 58.888
e = 55 * 60 + 11.377
tile = "N50E14.hgt" # Or some magic to figure it out from position
print get_sample(tile, n, e)
Notez que la récupération efficace des données devrait être un peu plus sophistiquée (par exemple, ne pas ouvrir le fichier pour chaque échantillon).
Alternatives
Vous pouvez également utiliser un programme qui peut lire les fichiers .hgt hors de la boîte. Mais c'est ennuyeux.
.hgt
format de fichier dans la documentation SRTM , mais une réponse étape par étape spécifique dépend du logiciel dont vous disposez.