GeoTIFFからUTFGridを作る方法

GeoTIFFからUTFGridを作成するプログラムを作りました。
これを使えば、画像と共に属性値もタイルで配信できるようになります。

特徴は、

  1. webサーバーがあればいい。
    • →MapServerやGeoServerなどの地図配信サーバーを立てなくてもいい。
  2. タイルなのでクライアントの動作が軽い。
    • →ポリゴンデータをベクトルデータとして読み込むと遅くて動かない。
  3. 誰でも属性付き地図データを作成できて、配信できる。
    • つまり、OpenTileMapとして共有できる!!!

ということで、使い方を紹介します。

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に変換します。
  1. こちらから植生データをダウンロードします。
  2. shpをQGISに読み込んで、テーブルのHANREI_Cを「raster」という列名で整数型としてコピーします。
  3. raster列を使ってベクターからラスターに変換します。

作成したファイルは syokusei.tif とします。投影法は緯度経度です(epsg:4326)

2. 1バンドのタイルを作成します。
gdal2tilesXYZ1band -s epsg:4326 -r near -z 1-15 syokusei.tif 

補間はnearにします。(コード値なので)
epsgを4326で指定します。

3. 凡例ファイルを作成します。
  • 凡例ファイルには、ラスタ値に対応した「raster」列が必要です。
  • その他の列は、raster値に対応した任意の属性を入れてください。
  • 文字コードUTF-8にしてください。

ここでは、植生データのdbfファイルをcsvとして保存し、凡例ファイルとします。
保存したcsvterapadなどで開いて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の場合(絵地図など)

1.自作の絵地図などをgeotiffに変換します。

こちらを参照

作成したファイルは mymap.tif とします。投影法は緯度経度です(epsg:4326)

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プロジェクト(仮)」のため、私個人が勝手に作成したものです。何か問題あったらごめんなさい。