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 :
Los datos SRTM se distribuyen en dos niveles: SRTM1 (para los EE. UU. Y sus territorios y posesiones) con datos muestreados a intervalos de un segundo de arco en latitud y longitud, y SRTM3 (para el mundo) muestreados a tres segundos de arco.
Los datos se dividen en mosaicos de latitud y longitud de uno por un grado en la proyección "geográfica", es decir, una presentación ráster con intervalos iguales de latitud y longitud en ninguna proyección, pero fácil de manipular y mosaico.
Los nombres de los archivos se refieren a la latitud y longitud de la esquina inferior izquierda del mosaico; por ejemplo, N37W105 tiene su esquina inferior izquierda a 37 grados de latitud norte y 105 grados de longitud oeste. Para ser más exactos, estas coordenadas se refieren al centro geométrico del píxel inferior izquierdo, que en el caso de los datos SRTM3 tendrá una extensión de aproximadamente 90 metros.
Los archivos de altura tienen la extensión .HGT y están firmados con enteros de dos bytes. Los bytes están en el orden "big-endian" de Motorola con el byte más significativo primero, directamente legible por sistemas como Sun SPARC, Silicon Graphics y computadoras Macintosh que utilizan procesadores Power PC. DEC Alpha, la mayoría de las PC y Macintosh construidas después de 2006 usan el orden Intel ("little-endian"), por lo que puede ser necesario un intercambio de bytes. Las alturas están en metros referenciados al geoide WGS84 / EGM96. A los vacíos de datos se les asigna el valor -32768.
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:
24'58.888" = (24 * 60)" + 58.888" = 1498.888"
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
Los datos se almacenan en el orden principal de la fila (todos los datos de la fila 1, seguidos de todos los datos de la fila 2, etc.)
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
1201 - 500 = 701
desde el principio si el archivo . Nuestra celda de cuadrícula es número
(1201 * 700) + 1104 = 841804
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):
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)
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.
.hgt
formato de archivo en la documentación de SRTM , pero una respuesta específica paso a paso depende del software que tenga disponible.