gdal2tiles を使用したスーパー オーバーレイの作成

Mano Marks、Google Geo API チーム
2009 年 9 月

目的

このチュートリアルでは、オープンソースの地理空間データ抽象化ライブラリ ユーティリティを使用して、リージョン ベースの NetworkLink を使用する地面オーバーレイのセットであるスーパー オーバーレイの作成の基本について説明します。

はじめに

Google Earth や Google マップなどのジオブラウザによって、衛星画像や地図タイルが表示されます。ただし、独自のものを使用することもできます。画像ラスターデータにはさまざまな形式があり、さまざまな用途があります。

  • 独自の衛星画像や航空画像をジオブラウザに配置
  • Google Earth のラムジー マップ レイヤなど、既存の画像の上に過去の地図を配置する
  • GIS データをラスター形式でインポートする
  • LIDAR 画像または赤外線画像をジオブラウザに配置する

しかし、高解像度のラスターデータの 1 つの問題は、その表示に多くのメモリが必要になることです。インターネットで送信するのであれば、帯域幅の懸念もあります。この問題に対処するには、タイルを作成する必要があります。

タイリングは、画像ファイルがさまざまな画像に分割され、画像が表示されるときに読み込まれます。ユーザーのズームアウト時に表示される低解像度の画像を作成します。同じ領域に 4 枚の高解像度画像を作成してより見やすくします。画像でオーバーレイする領域ごとに、4 つの高解像度画像を作成してズームを近づけるなどします。これは quadtree メソッドと呼ばれ、Google Earth と Google マップの画像のタイル表示方法です。このプロセスについて詳しくは、KML デベロッパー ガイドの地域の記事をご覧ください。

Adobe の PhotoShop や GIMP といったグラフィック編集アプリケーションで手動で設定することもできますが、作業が煩雑になり、間違いが起こりやすくなります。他にも、SuperOverlayArc2EarthMapCruncherCrunchUp2KML など、Windows 向けの優れたアプリが多数用意されています。

プロセスを自動化したり、独自のアプリケーションに機能を追加したりする場合は、GDAL のラスターデータとベクターデータを扱うための豊富なツールセットを利用できます。この記事では、コマンドライン オプションについて説明します。ただし、独自のアプリケーションに簡単に組み込むこともできます。このチュートリアルでは、gdalinfogdal_translategdalwarpgdal2tiles ユーティリティを使用します。究極の出力はスーパーオーバーレイです。

コマンドラインの手順

GDAL を使用するには、コマンドラインで 6 つのステップを行います。

  1. GDAL をダウンロードしてインストールする
  2. 画像をダウンロードする
  3. gdalinfo を使用して画像に関する情報を決定する
  4. gdal_translate を使用して画像を参照する
  5. gdalwarp を使用して画像の投影を変更する
  6. gdal2tiles を使用して画像をタイルに分割し、関連する KML コードを作成する

ステップ 1: GDAL をダウンロードしてインストールする

まず、こちらで GDAL をダウンロードしてインストールします。

ステップ 2: 画像をダウンロードする

任意の画像を使用できます。ウェブには、いくつもの地理データの情報源があります。どれを使用しても構いませんが、画像の境界線(画像の各隅の緯度と経度)を把握しておく必要があります。このチュートリアルでは、NASA のウェブサイトからダウンロードできる NASA の Blue Marble の画像を使用します。これらの画像は 2004 年に撮影されたもので、宇宙から撮影した地球の美しい画像です。右側のナビゲーション バーの右下にあるファイルのいずれかを選択します。

独自の画像を使用していて、すでにジオコード化されている場合は、ステップ 5 に進みます。それ以外の場合は、ステップ 3 に進みます。

ステップ 3: 画像に関する情報を取得する

GDAL ライブラリをインストールして画像を選択したら、画像を参照できるように、画像に関する情報を取得する必要があります。具体的には、画像の各隅のピクセルとラインの位置が必要です。画像を表から成るとしましょう。列と行があり、ピクセルが列、線が行です。

GDAL は、この情報を取得するための便利なユーティリティ gdalinfo を提供します。コマンドラインで、「gdalinfo filename」と入力します。filename はファイルのパスに置き換えます。出力は次のようになります。

Driver: JPEG/JPEG JFIF
Files: world_200401.jpg
Size is 21600, 10800
Coordinate System is `'
Image Structure Metadata:
  SOURCE_COLOR_SPACE=YCbCr
  INTERLEAVE=PIXEL
  COMPRESSION=JPEG
Corner Coordinates:
Upper Left  (    0.0,    0.0)
Lower Left  (    0.0,10800.0)
Upper Right (21600.0,    0.0)
Lower Right (21600.0,10800.0)
Center      (10800.0, 5400.0)
Band 1 Block=21600x1 Type=Byte, ColorInterp=Red
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 2 Block=21600x1 Type=Byte, ColorInterp=Green
  Image Structure Metadata:
    COMPRESSION=JPEG
Band 3 Block=21600x1 Type=Byte, ColorInterp=Blue
  Image Structure Metadata:
    COMPRESSION=JPEG

このチュートリアルの重要な情報は、左上、左下、右上、右下の行です。これらは各隅のピクセルと線の値を示します。この場合、左上は 0.0、右下は 21600,10800 にあります。

ステップ 4: 画像をジオ参照する

この場合のジオリファレンスとは、画像の各隅の地理的位置を記述するメタデータを作成することを意味します。ステップ 3 と gdal_translate で取得した情報を使用して、ジオリファレンス情報をファイルに割り当てることができます。これにより、world_200401.jpg イメージ bluemarble1.vrt から VRT ファイルが作成されます。VRT ファイルは、特定の変換(この場合は gdal_translate ステップ)に関する情報を含む XML ファイルです。次のステップでこれを再び使用して、タイルの最終的なセットを作成します。gdal_translate を使用すると、主要な画像ファイル形式を含む複数のファイル出力タイプを実行できます。VRT 出力を使用することで、基本的に最後のステップまで出力ファイルの作成を開始できます。これにより、効率が高まり、コマンドラインを使用する場合に個々のステップの待ち時間が短縮されます。次のコマンドを実行します。

gdal_translate -of VRT -a_srs EPSG:4326 -gcp 0 0 -180 90 -gcp 21600 0 180 90 -gcp 21600 10800 180 -90 world_200401.jpg bluemarble1.vrt

1 行ごとに多くの情報があるので、ここではその内訳を示します。

  • -of は出力形式です。この場合は VRT です。
  • -a_srs は、空間参照システムをファイルに割り当てます。使用するアプリケーションは、どの座標系が使用されているかがわかります。このケースでは、Google Earth で使用されている座標系である WGS84 と同じ、EPSG:4326 を使用しています。
  • -gcp(地面コントロール ポイント)は、ファイル内の位置に座標を割り当てます。このケースでは、画像は 3 つの点で十分です。画像は長方形で、4 つ目の点を簡単に識別できるからです。-gcp については、ピクセル、行番号、経度、緯度を設定して gcp を定義します。それぞれがスペースで区切ります。
  • 最後の 2 つのパラメータは、オリジン ファイルとターゲット ファイルです。

ステップ 5: 画像を歪める

元の画像は丸い地球儀用に作成されたものではなく、平らに見えるように作成されています。GIS 用語では射影されています。つまり、3 次元のオブジェクトの 2 次元表現です。投影法では、地球の平らな画像のように見えるように画像を歪める必要があります。

適切な画像を表示するには、地球にフィットするように画像を歪める必要があります。幸いなことに、GDAL もそのための優れたツールを提供します。gdalwarp -of VRT -t_srs EPSG:4326 bluemarble1.vrt bluemarble2.vrt と入力します。これにより、bluemarble2.vrt という新しいファイルが作成され、ワープ処理に関するメタデータが提供されます。

ステップ 6: タイルを作成する

もう少しで完了ですが、この部分には一番時間がかかります。タイルを作成するには、「gdal2tiles.py -p geodetic -k bluemarble2.vrt」と入力します。-k は KML 出力を強制します。これにより、スーパー オーバーレイがあるディレクトリ構造が作成されます。これらの画像ファイルは個別に作成する必要があるため、実行には時間がかかります。大きな画像の場合は、コーヒーを飲み、昼寝をして、軽く食事をします。完了したら、doc.kml を開いて結果を確認します。

まとめ

このチュートリアルでは、GDAL でできることを少しだけ紹介しますが、タイルを生成するための便利なメカニズムです。コア GDAL ライブラリは C++ で記述されていますが、Perl、Python、VB6、R、Ruby、Java、C#/.NET のバインディングを備えているため、GDAL を独自のアプリケーションに簡単に組み込めます。また、gdal2tiles などのユーティリティの多くは Python で記述されているため、Python アプリケーションに簡単に組み込めます。gdal2tiles には、Google Maps APIOpenLayers のページを生成することもできます。