ruby-robotの夢

cygwin-ruby,qgisの達人を目指す奮闘記

地球地図 Geo-TIFF の分析 の準備

国土地理院の地球地図サイトから、①世界の地盤高、②地表区分、③植被率のgeotiffが提供されている。解像度は、15秒ということで、約500mメッシュである。

これを使って、観測所毎の気象データの標高補正をして、気候区分図、人口分布図の作成等を試みようと考えた。

GeoTiffとの格闘

フォトビューワ(irfanview64)で中身を見てみよう

いきなり、①は、irfanviewでは見えない(数段階のグレーに見える。) ポインタのピクセルRGBでも、数色分しか見えない。

f:id:george_thai:20190613212643p:plain

irfanviewで読み込み


①のtiffは、標高をmで表現したもので、エベレストの9000あたりまで深度が必要だろう。それは13bit相当だ。

tiffってそんな深度に対応していたか?

ちなみに、②、③は、8bitインデックスカラーなので、irfanviewで見える。これなら、ruby-rmagickで読めるので問題は無い。

TIFFの仕様を調べてみる

バンド深度は、16bitにも対応している。自由度だ高く、圧縮方法もあり、色以外の追加情報も自由に設定できるよう。仕様は複雑で、半分くらい意味不明。バイナリの読み込みは無理。諦めよう。

 

rubyのゲッタ

探してみた。・・・見当たらない。

pythonのgeo-tiffゲッタはあるが、rubyからpythonを呼ぶ方法はまだ知らないので、別の手を考える。

 

QGISで読めるか?

あっさり読み込めた。レイヤ設定を変えると、こんな感じにできる。

 

f:id:george_thai:20190613212420j:plain

geotiffをQGISで表示

rubyに取り込むためには、変換しよう。調べてみると、geotiffから、.xyzに変換できる、gdal_translate.exeというものがある。

やろうとすると、地球の1/8の図郭で200Mbyteのtiffを、変換するのに、20Gbyteのxyzができた。これは使いにくい。さらに他の方法を考えよう。

 

gdal_translateは、様々な形式に変換できる。

pngにすると、出てきたが、ワーニングで、8bitまでしか対応していない。らしい。

irfanviewでみると、250段階くらいありそうだが、250m以上は真っ白。なるほど。

 

tiffからtiffにも変換できるので、どうなるか?

irfanviewでみると、はじめと同じ数段階のグレー。

16bit深度に対応したビューワー ImageJ

うーん。irfanviewが、16bit深度に対応してなさそうである。PhotoShopは、16bitに対応してたな。でも、今は無い。フリーソフトを・・・あった。imageJ ( JはjavaのJ)。これで16bitグレーのTiffを判別できた。 素晴らしい。

f:id:george_thai:20190613213259p:plain

geotiffをimageJで表示

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しか積んでいないので、無理なのか。

QGIS、ビューワーは上手くメモリー使うんだな。

陸地の比率は3割で、それしか要らないのかな。

 とりあえず、読むデータは、1km(30sec)の粗い方にして、それでもきついから、10km程度(5min)のデータを作成して使うことにしよう。