GeoTIFFからUTFGridを作成するプログラムを作りました。
これを使えば、画像と共に属性値もタイルで配信できるようになります。
特徴は、
- webサーバーがあればいい。
- →MapServerやGeoServerなどの地図配信サーバーを立てなくてもいい。
- タイルなのでクライアントの動作が軽い。
- →ポリゴンデータをベクトルデータとして読み込むと遅くて動かない。
- 誰でも属性付き地図データを作成できて、配信できる。
- つまり、OpenTileMapとして共有できる!!!
ということで、使い方を紹介します。
できあがりはこんな感じ
標高の例
http://www.ecoris.co.jp/map/utfgrid_test.html?zoom=13&lat=4823548.9824&lon=15744694.52498&layers=BTTTTTT
植生の例
http://www.ecoris.co.jp/map/utfgrid_test.html?zoom=13&lat=4799872.6129&lon=15744694.52498&layers=BTTTTTT
絵地図の例
http://www.ecoris.co.jp/map/utfgrid_test.html?zoom=16&lat=4607129.48013&lon=15683405.16591&layers=BTTTTTT
A.プログラムの準備
ここからプログラムをとってきて、OSGeo4Wのbinに入れます。"C:\OSGeo4W\bin\ とか"
- gdal2tilesXYZ1band.py
- 1バンドのGeoTIFFを1バンドのXYZタイルに変換します。gdal2tilesは強制的に3バンドに変換するので、1バンドのデータをそのまま1バンドのままタイルにします。また、その際にTMS形式ではなくXYZ形式で出力します。
- gdal2tilesXYZ.py
- 3バンドのGeoTIFFを3バンドのXYZタイルに変換します。gdal2tilesの出力はTMS形式なので、それをXYZ形式にしたものです。ただし、gdal2tilesが出力するメタデータやhtmlは出力しません。
- tile2utfgrid.py
- タイル画像からUTFGridファイル(.json)を作成します。
- tile2utfgrid.bat
- OSGeo4Wのためのファイルです。上記プログラムを呼び出すだけです。
- gdal2tilesXYZ1band.bat
- OSGeo4Wのためのファイルです。上記プログラムを呼び出すだけです。
- gdal2tilesXYZ.bat
- OSGeo4Wのためのファイルです。上記プログラムを呼び出すだけです。
B.データの作成
データの作成方法には以下の3通りあります。
【パターン1】
- 1バンドのラスター値をそのまま属性値にする。標高データなど
【パターン2】
- 1バンドのラスター値に対応する凡例ファイルを用意して、それを属性値とする。植生データなど
【パターン3】
- 3バンドのRGB値に対応する凡例ファイルを用意して、それを属性値とする。絵地図など
以下それぞれのパターンについて説明します。
パターン1の場合(標高など)
1.標高データを取ってきて、geotiffに変換します。
こちら参照 http://www.ecoris.co.jp/contents/demtool.html
作成したファイルは dem.tif とします。投影法は緯度経度です(epsg:4326)
2. 1バンドのタイルを作成します。
gdal2tilesXYZ1band -s epsg:4326 -r bilinear -z 1-15 dem.tif
3. UTFGridを作成します。
tile2utfgrid dem
引数にはタイル化されたGeoTIFFの入っているフォルダを指定します。
4. 標高画像をお好みで作成します。
gdaldem color-releif dem.tif color.txt dem_color.tif
※color.txtは自分で用意してください。
5. 画像をタイルにします。
dem_color.tifの名前をdem.tifに変更します。
※demフォルダにタイルを保存するため
gdal2tilesXYZ -s epsg:4326 -z 1-15 dem.tif
パターン2の場合(植生など)
1.植生データを取ってきて、geotiffに変換します。
- こちらから植生データをダウンロードします。
- shpをQGISに読み込んで、テーブルのHANREI_Cを「raster」という列名で整数型としてコピーします。
- raster列を使ってベクターからラスターに変換します。
作成したファイルは syokusei.tif とします。投影法は緯度経度です(epsg:4326)
2. 1バンドのタイルを作成します。
gdal2tilesXYZ1band -s epsg:4326 -r near -z 1-15 syokusei.tif
補間はnearにします。(コード値なので)
epsgを4326で指定します。
3. 凡例ファイルを作成します。
ここでは、植生データのdbfファイルをcsvとして保存し、凡例ファイルとします。
保存したcsvをterapadなどで開いてutf-8で保存し直してください。
作成したファイルは p594123.csv とします。
4. UTFGridを作成します。
tile2utfgrid syokusei p594123.csv raster
第1引数にはタイル化されたGeoTIFFの入っているフォルダを指定します。
第2引数には凡例ファイルを指定します。
第3引数には"raster"を指定します。("color"を指定する場合は、次で説明)
5. 植生画像を作成します。
QGISでお好みの色を付けてRGBのGeoTIFFで書き出してください。
こちらのプラグインを使うと出来ます。
http://www.bc-consult.com/free/bccAddRColor.html
syokusei_color.tif というファイル名で作成したとします。
6. 画像をタイルにします。
syokusei_color.tifの名前をsyokusei.tifに変更します。
※syokuseiフォルダにタイルを保存するため
gdal2tilesXYZ -s epsg:4326 -z 1-15 syokusei.tif
パターン3の場合(絵地図など)
2. XYZタイルを作成します。
gdal2tilesXYZ -s epsg:4326 -r near -z 1-15 mymap.tif
補間はお好みで、とりあえずnearにします。
epsgを4326で指定します。
3. 凡例ファイルを作成します。
- GeoTIFF画像のRGB色に応じた凡例ファイル(csv)を作成します。
- 「R」「G」「B」列に、凡例をつけたい色を10進数(0〜255)で指定します。
- 色に幅がある場合は、155-160のように範囲でR,G,B列を指定できます。
- その他の列は、RGB値に対応させたい任意の属性を入れてください。
- 文字コードはutf-8にしてください。
作成したファイルは legendRGB.csv とします。
3. UTFGridを作成します。
tile2utfgrid mymap legendRGB.csv color
第1引数にはタイル化されたpngの入っているフォルダを指定します。
第2引数には凡例ファイルを指定します。
第3引数には"color"を指定します。
C.データのアップロード
作成した上記データをwebサーバーにアップロードしてください。
D.htmlの作成
Openlayersを使ってXYZタイル、UTFGridを呼び出すコードを書いたhtmlを作成します。
ラスタ値を取得する場合は、UTFGridのdataオブジェクトの値は"V"になります。その他のdataオブジェクトの値は、凡例で指定した列名の通りです。
これでできあがりです。
補足
TMSタイルは南西端を原点とするのに対し、XYZタイルは北西端を原点とします。
gdal2tilesはTMSタイルを作成します。
UTFGridの仕様は、XYZタイルです。
コメント
- バグがあったら教えてください。
- データを公開する際は、各データの規約をよくお読みください。
- このプログラムは、「OpenTileMapプロジェクト(仮)」のため、私個人が勝手に作成したものです。何か問題あったらごめんなさい。