Je veux attribuer une position longue / lat spécifique sur une carte à l'élévation à partir des fichiers de données SRTM3, mais je ne sais pas comment trouver la valeur spécifique. Je veux donc un exemple de la façon dont je peux trouver dans N50E14.hgt une élévation à 50 ° 24'58.888 "N, 14 ° 55'11.377" E.
20
.hgt
format de fichier dans la documentation SRTM , mais une réponse étape par étape spécifique dépend du logiciel dont vous disposez.Réponses:
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 :
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:
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
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
dès le début si le fichier . Notre cellule de grille est nombre
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):
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.
la source
GDAL peut lire / écrire ces formats raster avec le pilote SRTMHGT . Cela signifie que vous pouvez afficher le raster avec QGIS, ArcGIS ou utiliser les utilitaires GDAL comme gdallocationinfo pour obtenir des valeurs à partir d'un point, par exemple:
Convertir DMS en DD:
Puis à partir d'un shell, utilisez
gdallocationinfo file.hgt -wgs84 long lat
:L'altitude est de 216 m.
la source
Si vous utilisez QGIS, vérifiez si le plugin python "Point Sampling Tool" est installé. Vous le trouverez dans -> Améliorations (Python) -> Analyser.
Sélectionnez votre couche de points des positions requises, puis démarrez le PST, choisissez le hgt (ou tout autre fichier raster / polygone) et choisissez une nouvelle forme de point pour la sortie.
C'est tout :-)
la source
La réponse de Chris indique qu'il est simple d'échantillonner des points d'une couche dans QGIS.
Cependant, puisque votre réponse à mon commentaire précise que vous écrivez votre propre programme pour lire les valeurs d'élévation des
.hgt
fichiers, jetez un autre coup d'œil au PDF Quickstart dans les documents SRTM. Il explique comment les données d'élévation sont stockées. Résumer:-32768
, qui indiquent des pixels sans données.Vous dites que vous pouvez convertir entre les coordonnées lon / lat et les pixels, donc obtenir l'élévation est une question de lecture de la valeur entière à partir du décalage approprié dans le fichier. Étant donné les coordonnées des pixels
x
et pary
rapport au coin supérieur gauche de la scène, c'est essentiellementoffset = (y * 1201) + x
. Le pixel0,0
est le premier entier du fichier et le pixel1200,1200
est le dernier entier du fichier.la source