Двоичные файлы наса в Java - PullRequest
       47

Двоичные файлы наса в Java

2 голосов
/ 19 ноября 2011

У меня есть файл с двоичными данными.Это спецификация:

Файлы данных SRTM имеют такие имена, как "N34W119.hgt".Что означают буквы и цифры и что такое формат «.hgt»?

Каждый файл данных охватывает один градус широты и один градус долготы поверхности Земли.Первые семь символов обозначают юго-западный угол блока, где N, S, E и W означают север, юг, восток и запад.Таким образом, файл N34W119.hgt охватывает широты 34–35 северной широты и 118–119 западной долготы (этот файл включает центр Лос-Анджелеса, Калифорния).Расширение имени файла ".hgt" просто означает слово "высота", означающее высоту.Это НЕ тип формата.Эти файлы представлены в «сыром» формате (без заголовков и без сжатия), 16-разрядные целые числа со знаком, высота, измеренная в метрах над уровнем моря, в «географической» (массив широты и долготы) проекции, с пустотами данных, обозначенными -32768.,Международные файлы с тремя дугами-секундами имеют 1201 столбец и 1201 строку данных с общим размером файла 2 884 802 байта (= 1201 x 1201 x 2).В Соединенных Штатах файлы длиной 1 дуга-секунда имеют 3601 столбец и 3601 строку данных с общим размером файла 25 934 402 байта (= 3601 x 3601 x 2).Для получения дополнительной информации прочитайте текстовый файл "SRTM_Topo.txt" по адресу http://edcftp.cr.usgs.gov/pub/data/srtm/Readme.html

Кто-нибудь может мне помочь, как я могу прочитать этот файл в Java?Можно прочитать этот файл в массив, потому что мне нужно выполнить некоторые операции над элементами из этого файла?

1 Ответ

7 голосов
/ 19 ноября 2011

Я бы прочитал весь файл в ShortBuffer (поэтому вы выбираете endianess)

FileChannel fc = new FileInputStream(file).getChannel();
ByteBuffer bb = ByteBuffer.allocateDirect((int) fc.size());
while (bb.remaining() > 0) fc.read(bb);
fc.close();
bb.flip();
// choose the right endianness
ShortBuffer sb = bb.order(ByteOrder.LITTLE_ENDIAN).asShortBuffer();
...