Quiero asignar una posición específica larga / lat en un mapa a la elevación de los archivos de datos SRTM3, pero no tengo idea de cómo encontrar el valor específico. Así que quiero un ejemplo de cómo puedo encontrar en N50E14.hgt elevación a 50 ° 24'58.888 "N, 14 ° 55'11.377" E.
20
.hgt
formato de archivo en la documentación de SRTM , pero una respuesta específica paso a paso depende del software que tenga disponible.Respuestas:
Formato de datos
Lo tomaré como un pequeño ejercicio sobre cómo programar un lector de datos. Echa un vistazo a la documentación :
Cómo proceder
Para su posición, 50 ° 24'58.888 "N 14 ° 55'11.377" E, ya encontró el mosaico correcto, N50E14.hgt. Veamos qué píxel le interesa. Primera latitud, 50 ° 24'58.888 "N:
segundos de arco Dividido por tres y redondeado al entero más cercano, se obtiene una fila de cuadrícula de 500. El mismo cálculo para la longitud da como resultado la columna de cuadrícula 1104.
La documentación de inicio rápido carece de información sobre cómo se organizan las filas y columnas en el archivo, pero en la documentación completa se afirma que
Es muy probable que la primera fila del archivo sea la más septentrional, es decir, si estamos interesados en la fila 500 desde el borde inferior , en realidad tenemos que mirar la fila
desde el principio si el archivo . Nuestra celda de cuadrícula es número
desde el inicio del archivo (es decir, omita 700 filas y, en la 701, tome la muestra 1104). Dos bytes por muestra significa que tenemos que omitir los primeros 1683606 bytes en el archivo y luego leer dos bytes para obtener nuestra celda de cuadrícula. Los datos son big-endian, lo que significa que debe intercambiar los dos bytes, por ejemplo, en plataformas Intel.
Programa de muestra
Un programa simplista de Python para recuperar los datos correctos se vería así (ver los documentos para el uso del módulo de estructura):
Tenga en cuenta que la recuperación de datos eficiente debería verse un poco más sofisticada (por ejemplo, no abrir el archivo para todas y cada una de las muestras).
Alternativas
También puede usar un programa que pueda leer los archivos .hgt de fábrica. Pero eso es aburrido.
fuente
GDAL puede leer / escribir estos formatos ráster con el controlador SRTMHGT . Esto significa que puede ver el ráster con QGIS, ArcGIS o utilizar utilidades GDAL como gdallocationinfo para obtener valores de un punto, por ejemplo:
Convierta DMS a DD:
Luego, desde un shell, use
gdallocationinfo file.hgt -wgs84 long lat
:La elevación es de 216 m.
fuente
Si usa QGIS, verifique si está instalado el complemento de Python "Point Sampling Tool". Lo encontrará en -> Mejoras (Python) -> Analizar.
Seleccione su capa de puntos de las posiciones requeridas, luego inicie el PST, elija el hgt (o cualquier archivo raster / polygone) y elija una nueva forma de punto para la salida.
Eso es todo :-)
fuente
La respuesta de Chris indica que es sencillo muestrear puntos de una capa en QGIS.
Sin embargo, dado que su respuesta a mi comentario aclara que está escribiendo su propio programa para leer valores de elevación de los
.hgt
archivos, eche otro vistazo al PDF de inicio rápido en los documentos SRTM. Explica cómo se almacenan los datos de elevación. Para resumir:-32768
, que indican píxeles sin datos.Dice que puede convertir entre coordenadas lon / lat y píxeles, por lo que obtener la elevación es una cuestión de leer el valor entero del desplazamiento apropiado en el archivo. Dadas las coordenadas de píxeles
x
y eny
relación con la esquina superior izquierda de la escena, eso es básicamenteoffset = (y * 1201) + x
. Pixel0,0
es el primer entero del archivo y pixel1200,1200
es el último entero del archivo.fuente