地理院さんの空中写真+ワールドファイルをマージする
はじめに
地理院さんが被災地空中写真を出されています。簡易オルソ化したうえ、ワールドファイルも置いてくれているというものです。
これをマージしようとするものです。また、JPEGで配布されていて、JPEGは透過非対応ですので、マージ時に余計な白が出てきたりしますし、また投影変換時に余計な黒が出てきます。これを透過にマージして、さらにタイル化まで持っていくのが今回の作業です。
使用条件は遵守しましょう
地理院さんの出されている使用条件には必ず従って下さい。
分からなかったら地理院さんのウェブサイトを見て、それでも分からない場合は地理院さんに聞いて下さい。悪いようにはしない、と思います。
なし崩し的に条件を守らない、ということが目立つと、今後に響く可能性が十分に考えられます。
あと、使用条件が変更になることが予告されています。条件変更があったらすぐに対応しましょう。
あんまり地理院さんを困らせない方向で。
用意するもの
手順
- jpegを落としてくる。
- jpegごとに、convert -alpha on (jpeg) (出力png) でpngファイルを作る。alpha onはアルファチャネルを入れるもので、GIMPでもできるけど、こっちでやっといた方が操作が楽。
- GIMPなりでpngファイルのひとつずつ白いところを「あいまい選択」で選択→カット→保存 (クリック→Ctrl+x→Ctrl+s)
- ワールドファイルを展開→拡張子がjgwなのをpwwにする(これでそのままpngのワールドファイルになります)。pgwはpngと同じフォルダに置いておく。
- gdalwarp -dstnodata "255 255 255 0" (pngファイル) (出力tifファイルA) でマージ。データのない部分は RGBA = 255,255,255,0 になり、透明(透過非対応では白)になる。
WGS84正距円筒に投影変換
- gdalwarp -s_srs epsg:2425 -t_srs epsg:4326 -dstnodata "255 255 255 0" (tifファイルA) (出力tifファイルB) で投影変換。
これで MapServer に持っていったら、とりあえずうまくいきました。
タイル画像生成
- gdalwarp -s_srs epsg:2425 -t_srs epsg:900913 -dstnodata "255 255 255 0" (tifファイルA) (出力ファイルC) で投影変換。
- gdal_translate -a_nodata none (tifファイルC) (出力ファイルD) でnodataタグを落としたtif生成。
- gdal2tiles -z "0-18" -s epsg:900913 -p mercator (tifファイルD) でタイル生成。
nodataについて
gdalwarp で -dstnodata "255 255 255 0" としているのは、投影変換の際に隙間ができるので、これを透明(不透明にすると白)にするためです。これは普通にやります。
この際に出来上がったGeoTIFFファイルには、バンド毎にNoDataタグが埋め込まれます。
これが食わせ物。gdalinfoで見れば分かりますが、255,255,255,255 になっています。このままいくと、白色(不透明)がNoData認定されて、コンクリの建物の一部が透明にされてしまいます。
そこで、タイル画像作成時には、ややこしいですが、いったんNoDataタグを落として、RGBAだけを見てもらうようにしておきます。