gdal2tiles.pyを使っているとたまにこんなエラーでコケることがあります。
ERROR 5: Illegal values for buffer size ERROR 5: Illegal values for buffer size Traceback (most recent call last): File "/usr/bin/gdal2tiles.py", line 2262, in <module> gdal2tiles.process() File "/usr/bin/gdal2tiles.py", line 478, in process self.generate_base_tiles() File "/usr/bin/gdal2tiles.py", line 1264, in generate_base_tiles dstile.WriteRaster(wx, wy, wxsize, wysize, data, band_list=list(range(1,self.dataBandsCount+1))) File "/usr/lib/python2.7/dist-packages/osgeo/gdal.py", line 796, in WriteRaster buf_pixel_space, buf_line_space, buf_band_space ) TypeError: not a string
これが起きるのはどうも元データの解像度が良くないというのがあって、画像のサイズを変更するとうまくいくというなんでそうなったんだみたいなFAQが出てきます。そして本当に画像のサイズを変更するとうまくいくのでなんじゃこりゃっていう感じなんですが、とりあえず対応手順をメモしておきます。
今回利用するのは地球地図のフィリピンの標高データです。というか僕が試してコケたのがこのデータだけなんですが。
地球地図については省略というか、今月末のFOSS4G 2014 Tokyoでセッションをやるので来ていただきたく(宣伝)。
さて、まずダウンロードしたzipファイル(gm-phl-el_1_0.zipという名前のはず)を解凍します。
解凍するとglobalmというディレクトリができます。
この中の globalm/area/raster というところにbilファイルが転がっているので、とりあえずこいつを一つのGeotiffにします。
gdalbuildvrt --config GDAL_CACHEMAX 1024 merged.vrt globalm/area/raster/*.bil gdal_translate -a_srs EPSG:4326 --config GDAL_CACHEMAX 2048 merged.vrt merged.tif
次にこのファイルの解像度を変更してやるんですが、先に大きさを調べます。
gdalinfo merged.tif
出力でSize is というところをチェックします。
Size is 1800, 3000
次にこのファイルをgdalwarpで変換をかけます。ここでのポイントは2つあります。
- -ts オプションで倍の解像度にする(倍じゃなくていいけど)
- -srcnodata オプションをつけてno dataとして扱う値をちゃんと指定しておく。(これをしておかないと変なデータになる)
gdalwarp -overwrite -s_srs EPSG:4326 -r near -ts 3600 6000 -of EHdr -srcnodata 9998 merged.tif output.tif
あとはQGISで読み込んでSingleband pseudocolorでがんばって色付けします。
あとはこのレイヤーを画像として保存します。
この時の注意点は二つ。
- ExtentのLayer Extentというボタンを押す。
- Create OptionsでProfileを選んでおく。
これで変換可能なGeoTiffが出来たので、gdal2tiles.pyで処理します。
gdal2tiles.py -r near -e -v -z 4-6 el_phl_test.tif output_tiles
とりあえず、要点としては以下の二つ。
- gdal2tiles.pyでこけたらgdalwarpで解像度を変更する
- FOSS4G 2014 Osaka/Tokyoに遊びに来て下さい
なお、FOSS4G 2014 Osaka/Tokyoの固定ページがないのは僕がWebサイト構築をする余裕が無かったからだと思います!!!!!!!