概要#
Cloud Optimized GeoTIFF (COG) は 2 つの補助技術に依存しています。
-
最初の技術は、GeoTiff のストレージ能力です。未処理のピクセルを直接保存するのではなく、特殊な方法でピクセルを保存します。
-
2 番目の技術は、HTTP Get でサポートされる範囲リクエストです。これにより、クライアントはファイルの必要な部分のみをリクエストできます。
前者の GeoTIFF のストレージ方法により、後者のリクエストはファイル内の処理が必要なデータを簡単に取得できます。
GeoTIFF の組織方法#
COG は、タイルと概観の 2 つの主要なデータ組織技術を使用しています。データの圧縮により、データのオンライン転送が効率的になります。
タイルスライシングは、画像内にスライスを作成し、データのストライプを単純に使用するのではなく、指定したデータを取得するためには、データ全体を読み取る必要があります。スライスが指定された領域で迅速に取得できるようになると、同じ要件を満たすために特定のデータの一部のみにアクセスするだけで済みます。
概観は、同じ画像のダウンサンプリングバージョンを作成します。ダウンサンプリングとは、元の画像を「縮小」すると、多くの詳細が失われることを意味します(現在の 1 ピクセルには、元の画像に 100 ピクセルまたは 1000 ピクセルが存在する場合があります)。また、データ量も小さくなります。通常、1 つの GeoTIFF には、さまざまなズームレベルに対応する複数の概観があります。これにより、サーバーの応答が高速化されます。レンダリング時には、特定のピクセル値のみを返す必要があり、これにより、どのピクセル値を使用してこれらの 1000 ピクセルを表すかを見つける必要はありませんが、ファイル全体のサイズが大きくなる可能性があります。
データの圧縮により、ソフトウェアは画像を迅速に取得でき、通常はより良いユーザーエクスペリエンスを提供できますが、HTTP GET の範囲リクエストの効率も非常に重要です。
HTTP Get の範囲リクエスト#
HTTP の 1.1 バージョンでは、非常に便利な機能である範囲リクエストが導入されました。これは、クライアントがサーバーからデータを取得する際に使用する GET リクエストです。サーバーのレスポンスヘッダーにAccept-Ranges: bytes
が含まれている場合、データ内のバイトはクライアントが任意の方法でチャンク分割してリクエストできることを意味します。これは通常、「バイトサービング」とも呼ばれ、その動作原理についてはウィキペディアの記事で詳しく説明されています。クライアントは必要なバイトをサーバーにリクエストすることができます。Web 領域では、これは広く使用されており、ビデオサービスなどにも適用されています。これにより、クライアントはファイル全体をダウンロードせずに操作できます。
範囲リクエストはオプションのフィールドですので、サーバーは必ずしも実装する必要はありません。ただし、ほとんどのクラウドサービスプロバイダ(Amazon、Google、Microsoft、OpenStack など)のオブジェクトストレージツールはこのオプションを提供しています。したがって、クラウド上に保存されているデータのほとんどは範囲リクエストをサポートできます。
統合#
これらの 2 つの技術を紹介した後、2 つの部分がどのように連携するかが明確になります。COG 内のタイルと概観は、クラウド上のファイルに確定的な構造で保存されるため、範囲リクエストは関連するファイルの部分をリクエストできます。
概観は、クライアントが全体の画像のクイックビューをレンダリングする場合に役立ちます。このプロセスでは、各ピクセルをダウンロードする必要はありません。代わりに、より小さい事前作成の概観をリクエストします。特定の GeoTIFF ファイルの構造は、HTTP 範囲リクエストをサポートするサーバーでのみ、クライアントが必要なファイルの部分を簡単に取得できるようにします。
スライスは、特定の全画像の一部を処理または視覚化する必要がある場合に役立ちます。これは概観の一部である場合もありますし、フル解像度の場合もあります。注意点として、タイルはファイル内の同じ位置に関連するデータをすべて組織するため、必要に応じて範囲リクエストでそれを取得できます。
GeoTIFF が概観とスライスを「クラウド最適化」していない場合、リモート操作も可能ですが、データ全体をダウンロードするか、実際の要件を超えるデータ量をダウンロードする必要があります。
利点#
ますます多くの地理情報データがクラウドに移行されており、そのうちのほとんどはクラウドベースのオブジェクトストレージに保存されています。S3やGoogle Cloud Storageなどのクラウドサービスによって、伝統的な GIS ファイル形式はクラウドに簡単に保存できますが、Web マップタイルサービスを提供したり、高速なデータ処理を実行するためには、これらの形式は効率的ではありません。通常、データを別の場所にダウンロードしてから、より最適化された形式に変換したり、メモリに読み込んだりする必要があります。
Cloud Optimized GeoTIFF は、いくつかの小さな技術を使用して、データフローを効率化し、クラウドベースの地理データワークフローを可能にします。Planet PlatformやGBDXなどのオンライン画像プラットフォームは、この方法を使用して画像サービスを提供し、画像処理を非常に高速化しています。COG テクノロジーを使用するソフトウェアは、必要なデータの一部を取得することで実行時間を最適化できます。
GeoTrellis、Google Earth Engine、IDAHOなど、多くの新しい地理情報ソフトウェアも COG の考え方をソフトウェアアーキテクチャに組み込んでいます。各処理ノードは、COG の一部のファイルストリームを取得することで高速な画像処理を実行します。
既存の GeoTIFF 規格に与える影響は、新しいファイル形式を導入するのではなく、現在のソフトウェアが COG を読み取るために変更を必要としないことです。これらのソフトウェアはストリームファイルの処理能力を持つ必要はなく、単にファイル全体をダウンロードして読み取るだけです。
クラウド上で Cloud Optimized GeoTIFF 形式のファイルを提供することで、多くのファイルコピーを削減できます。オンラインソフトウェアは、自分自身のコピーを保持する必要がなく、ストリームファイルを使用できるため、より効率的になります。これは、現在の一般的なパターンです。さらに、データプロバイダは、さまざまな形式のデータを提供する必要がありません。古いソフトウェアと新しいソフトウェアの両方がこれらのデータを読み取ることができます。データプロバイダは、1 つのバージョンのデータを更新するだけで済みます。同時に、余分なコピーとダウンロードは不要であり、さまざまなオンラインソフトウェアで使用できます。
クイックスタート#
はじめに#
このチュートリアルでは、開発者が Cloud Optimized GeoTIFF を使用して作業する方法について説明します。
読み取り#
最も簡単な方法は、GDAL のVSI Curl機能を使用することです。GDAL Wiki のHow to read it with GDALセクションを参照してください。ほとんどの地理情報ソフトウェアは、GDAL を依存ライブラリとして使用しているため、GDAL を使用することは COG を読み取るための最速の方法です。
Planetでは、すべてのデータがすでに COG 形式です。ダウンロードに関しては、download part of an imageという小さなチュートリアルがあります。ほとんどのチュートリアルは Planet API の使用方法について説明していますが、GDAL Warp が大きな COG ファイルから単一のワークエリアを抽出する方法も説明しています。
作成#
同様に、GDAL Wiki の COG ページには、How to generate it with GDALというセクションがあります。
$ gdal_translate in.tif out.tif -co TILED=YES -co COPY_SRC_OVERVIEWS=YES -co COMPRESS=DEFLATE
または、rio-cogeoプラグインを使用することもできます。
$ rio cogeo create in.tif out.tif --cog-profile deflate
他の多くの地理情報ソフトウェアでも、適切な概観とスライスを追加できるはずです。
検証#
rio-cogeo プラグインを使用します。
$ rio cogeo validate test.tif