Format data
Saya akan menganggapnya sebagai latihan kecil tentang cara memprogram pembaca data. Lihatlah dokumentasi :
Data SRTM didistribusikan dalam dua tingkat: SRTM1 (untuk AS dan wilayah dan harta miliknya) dengan data sampel pada interval satu busur-detik dalam lintang dan bujur, dan SRTM3 (untuk dunia) disampel pada tiga busur-detik.
Data dibagi menjadi ubin lintang dan bujur satu per satu derajat dalam proyeksi "geografis", yang berarti presentasi raster dengan interval lintang dan bujur yang sama dalam tanpa proyeksi sama sekali, tetapi mudah untuk memanipulasi dan membuat mosaik.
Nama file merujuk pada lintang dan bujur sudut kiri bawah ubin - misalnya N37W105 memiliki sudut kiri bawah pada 37 derajat lintang utara dan 105 derajat bujur barat. Untuk lebih tepatnya, koordinat ini merujuk ke pusat geometris dari piksel kiri bawah, yang dalam hal data SRTM3 akan mencapai sekitar 90 meter.
File tinggi memiliki ekstensi .HGT dan ditandatangani bilangan bulat dua byte. Byte berada dalam urutan "big-endian" Motorola dengan byte pertama yang paling signifikan, langsung dapat dibaca oleh sistem seperti Sun SPARC, Silicon Graphics dan komputer Macintosh menggunakan prosesor Power PC. DEC Alpha, kebanyakan komputer PC dan Macintosh yang dibangun setelah 2006 menggunakan Intel ("little-endian") sehingga beberapa byte-swapping mungkin diperlukan. Ketinggian dalam meter direferensikan ke geoid WGS84 / EGM96. Void data diberi nilai -32768.
Bagaimana cara melanjutkan
Untuk posisi Anda, 50 ° 24'58.888 "N 14 ° 55'11.377" E, Anda sudah menemukan ubin yang benar, N50E14.hgt. Mari kita cari tahu piksel mana yang Anda minati. Lintang pertama, 50 ° 24'58.888 "N:
24'58.888" = (24 * 60)" + 58.888" = 1498.888"
detik busur. Dibagi dengan tiga dan dibulatkan ke bilangan bulat terdekat memberikan baris grid 500. Perhitungan yang sama untuk hasil garis bujur dalam kolom grid 1104.
Dokumentasi quickstart tidak memiliki informasi tentang bagaimana baris dan kolom disusun dalam file, tetapi dalam dokumentasi lengkap dinyatakan bahwa
Data disimpan dalam urutan utama baris (semua data untuk baris 1, diikuti oleh semua data untuk baris 2, dll.)
Baris pertama dalam file sangat mungkin yang paling utara, yaitu jika kita tertarik pada baris 500 dari tepi bawah , kita sebenarnya harus melihat baris
1201 - 500 = 701
dari awal jika file . Sel kisi kami adalah angka
(1201 * 700) + 1104 = 841804
dari awal file (yaitu lewati 700 baris, dan yang 701 ambil sampel 1104). Dua byte per sampel berarti kita harus melewati 1683606 byte pertama dalam file dan kemudian membaca dua byte untuk mendapatkan sel grid kita. Data adalah big-endian, yang berarti Anda harus menukar dua byte pada platform Intel misalnya.
Program sampel
Program Python sederhana untuk mengambil data yang tepat akan terlihat seperti ini (lihat dokumen untuk penggunaan modul 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)
Perhatikan bahwa pengambilan data yang efisien harus terlihat sedikit lebih canggih (mis. Tidak membuka file untuk masing-masing dan setiap sampel).
Alternatif
Anda juga bisa menggunakan program yang bisa membaca file .hgt di luar kotak. Tapi itu membosankan.
.hgt
format file dalam dokumentasi SRTM , tetapi jawaban langkah demi langkah spesifik tergantung pada perangkat lunak yang Anda miliki.