Formato dei dati
Lo prenderò come un piccolo esercizio su come programmare un lettore di dati. Dai un'occhiata alla documentazione :
I dati SRTM sono distribuiti su due livelli: SRTM1 (per gli Stati Uniti e i suoi territori e possedimenti) con dati campionati a intervalli di un secondo d'arco in latitudine e longitudine e SRTM3 (per il mondo) campionato a tre secondi d'arco.
I dati sono divisi in caselle di latitudine e longitudine di uno per grado in proiezione "geografica", vale a dire una presentazione raster con uguali intervalli di latitudine e longitudine in nessuna proiezione ma facile da manipolare e mosaico.
I nomi dei file si riferiscono alla latitudine e longitudine dell'angolo in basso a sinistra della piastrella - ad es. N37W105 ha il suo angolo in basso a sinistra a 37 gradi di latitudine nord e 105 gradi di longitudine ovest. Per essere più precisi, queste coordinate si riferiscono al centro geometrico del pixel in basso a sinistra, che nel caso dei dati SRTM3 avrà una estensione di circa 90 metri.
I file di altezza hanno estensione .HGT e sono numeri interi a due byte. I byte sono nell'ordine "big-endian" di Motorola con il byte più significativo per primo, leggibile direttamente da sistemi come Sun SPARC, Silicon Graphics e computer Macintosh che utilizzano processori Power PC. DEC Alpha, la maggior parte dei PC e dei computer Macintosh costruiti dopo il 2006 utilizzano l'ordine Intel ("little-endian"), pertanto potrebbe essere necessario lo scambio di byte. Le altezze sono in metri riferite al geoide WGS84 / EGM96. Ai vuoti di dati viene assegnato il valore -32768.
Come procedere
Per la tua posizione, 50 ° 24'58.888 "N 14 ° 55'11.377" E, hai già trovato la piastrella corretta, N50E14.hgt. Scopriamo a quale pixel sei interessato. Prima latitudine, 50 ° 24'58.888 "N:
24'58.888" = (24 * 60)" + 58.888" = 1498.888"
secondi d'arco. Diviso per tre e arrotondato all'intero più vicino fornisce una riga della griglia di 500. Lo stesso calcolo per la longitudine risulta nella colonna della griglia 1104.
La documentazione di avvio rapido è priva di informazioni su come le file e le colonne sono organizzate nel file, ma nella documentazione completa si afferma che
I dati sono memorizzati nell'ordine principale della riga (tutti i dati per la riga 1, seguiti da tutti i dati per la riga 2, ecc.)
La prima riga del file è molto probabilmente la più settentrionale, vale a dire se siamo interessati alla riga 500 dal bordo inferiore , dobbiamo effettivamente guardare la riga
1201 - 500 = 701
dall'inizio se il file . La nostra cella della griglia è il numero
(1201 * 700) + 1104 = 841804
dall'inizio del file (ovvero saltare 700 righe e nel 701 prendere il campione 1104). Due byte per campione significa che dobbiamo saltare i primi 1683606 byte nel file e quindi leggere due byte per ottenere la nostra cella della griglia. I dati sono big-endian, il che significa che è necessario scambiare i due byte su ad esempio piattaforme Intel.
Programma di esempio
Un programma Python semplicistico per recuperare i dati giusti sarebbe simile a questo (consultare i documenti per l'uso del modulo 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)
Si noti che il recupero efficiente dei dati dovrebbe apparire un po 'più sofisticato (ad es. Non aprire il file per ogni singolo campione).
alternative
È inoltre possibile utilizzare un programma in grado di leggere i file .hgt immediatamente. Ma è noioso.
.hgt
formato del file nella documentazione SRTM , ma una risposta passo-passo specifica dipende dal software che hai a disposizione.