地球地図 Geo-TIFF の分析 の準備
国土地理院の地球地図サイトから、①世界の地盤高、②地表区分、③植被率のgeotiffが提供されている。解像度は、15秒ということで、約500mメッシュである。
これを使って、観測所毎の気象データの標高補正をして、気候区分図、人口分布図の作成等を試みようと考えた。
GeoTiffとの格闘
フォトビューワ(irfanview64)で中身を見てみよう
いきなり、①は、irfanviewでは見えない(数段階のグレーに見える。) ポインタのピクセルRGBでも、数色分しか見えない。
①のtiffは、標高をmで表現したもので、エベレストの9000あたりまで深度が必要だろう。それは13bit相当だ。
tiffってそんな深度に対応していたか?
ちなみに、②、③は、8bitインデックスカラーなので、irfanviewで見える。これなら、ruby-rmagickで読めるので問題は無い。
TIFFの仕様を調べてみる
バンド深度は、16bitにも対応している。自由度だ高く、圧縮方法もあり、色以外の追加情報も自由に設定できるよう。仕様は複雑で、半分くらい意味不明。バイナリの読み込みは無理。諦めよう。
rubyのゲッタ
探してみた。・・・見当たらない。
pythonのgeo-tiffゲッタはあるが、rubyからpythonを呼ぶ方法はまだ知らないので、別の手を考える。
QGISで読めるか?
あっさり読み込めた。レイヤ設定を変えると、こんな感じにできる。
rubyに取り込むためには、変換しよう。調べてみると、geotiffから、.xyzに変換できる、gdal_translate.exeというものがある。
やろうとすると、地球の1/8の図郭で200Mbyteのtiffを、変換するのに、20Gbyteのxyzができた。これは使いにくい。さらに他の方法を考えよう。
gdal_translateは、様々な形式に変換できる。
pngにすると、出てきたが、ワーニングで、8bitまでしか対応していない。らしい。
irfanviewでみると、250段階くらいありそうだが、250m以上は真っ白。なるほど。
irfanviewでみると、はじめと同じ数段階のグレー。
16bit深度に対応したビューワー ImageJ
うーん。irfanviewが、16bit深度に対応してなさそうである。PhotoShopは、16bitに対応してたな。でも、今は無い。フリーソフトを・・・あった。imageJ ( JはjavaのJ)。これで16bitグレーのTiffを判別できた。 素晴らしい。
DEMに変換
TIFFの16bitグレーで標高が入っていることが確認できたが、rubyに読めるわけではない。よい形式は無いか?
gdal_translateの出力形式で、USGS-DEMというのがあった。
これは、地理院のDEMと同様のもの?それなら、容量小さくなるのでは?
試してみると、200M⇒2G程度で済んだ。
単純なフォーマットだし。簡単に読めそう。とりあえず、保険。
ruby-rmagickでは?
さて、rubyのrmagickを使って読むことを考えたが、rmagickは、16bitに対応しているか? 調べてみよう。
全球を8分割した地盤高は、1ファイル分は普通に読めた。なーんだ。
逆に、植被率、地表条件のデータは、メモリーオーバー(rmagick)で読めない。
全球で、4万×8万の32億ピクセル、1ピクセル4byte->13G、12byte->37G。
16Gしか積んでいないので、無理なのか。
陸地の比率は3割で、それしか要らないのかな。
とりあえず、読むデータは、1km(30sec)の粗い方にして、それでもきついから、10km程度(5min)のデータを作成して使うことにしよう。