バイナリファイルで提供されるNASA SRTM標高データの一部をダウンロードしました。フォーマットはdescribed as followsある:ClojureでSRTMデータを操作する
DEMは、単純なバイナリ ラスタの16ビット符号付き整数データとして提供されます。ファイルに埋め込まれたヘッダーまたはトレーラーバイトはありません。 のデータは、行のメジャー順(1行目のすべてのデータ、次に2行目のすべてのデータで など)に格納されます。
http:// www.NGA.mil/GandG/wgsegm/に記載されているように、すべての標高はWGS84/EGM96ジオイドを基準としたメートル単位です。
バイト順序は、モトローラ( "ビッグエンディアン") 標準で、最上位バイトが最初です。 に符号が付けられているので、整数の標高は-32767から32767メートルの範囲で、 は地球上で見つかる仰角の範囲です。
これらのデータはまた、 シャドウイングなどの原因、位相アンラップ異常、または他のレーダ特定の原因の数から時折ボイドを含みます。 空白には-32768という値が設定されています。
私は、さらなる分析と可視化のためにClojureので、これらの値を解析しようとしています。私の現在のコードは次のようになります。
;; Taken from http://stackoverflow.com/a/26372677/2345852
(defn slurp-bytes
"Slurp the bytes from a slurpable thing"
[x]
(with-open [out (java.io.ByteArrayOutputStream.)]
(clojure.java.io/copy (clojure.java.io/input-stream x) out)
(.toByteArray out)))
(defn read-elevation
"Reads elevation data stored in .hgt files as provided by the NASA
SRTM datasets"
[src]
(->> (slurp-bytes src)
(partition 2)
(map #(reduce + %))))
(read-elevation ...)
これが出力誤ったデータには思える:私はヒマラヤで探していますし、配列は-126から150までの数字を保持している私がお勧め理由(java.nio.ByteOrder/nativeOrder)
を実行して、間違ったバイト順(です戻り値はLITTLE_ENDIAN
です)。プラットフォームに依存しないようにバイトオーダーをどのように元に戻すのですか?