たぶん動く...

多分GIS系の人。あくまで個人的見解であり、所属団体を代表するものではありません。

COGをソースにしてタイルサーバをホストする(1)

rio-tilerという、COG (Cloud Optimized GeoTiff)をベースとなるファイルとしてタイルサーバをホストするpythonモジュールがあります。 これを利用して、GCOM-C (しきさい)の全球タイルマップを作成してみます。

rio-tilerのサンプルを利用してまずはCOG1枚をホストしてみたいと思います。 利用するサンプルは以下です。 rio-tiler/dynamic_tiler.md at dev · cogeotiff/rio-tiler · GitHub

COGファイルを作成

ホストするCOGファイルを作成します。 しきさいのh5ファイルからからGeotiffを作成する方法は以下の記事を参考にしてください。

S3でホストする 今回は、rio-tilerをEC2から実行します。 EC2からS3を読み取れるように権限を設定してください。 以下のサイトがわかりやすいです。

AWS EC2からS3へアクセス(EC2とロールとポリシー) | ITSakura

rio-tilerをインストールする

公式ドキュメントのインストール手順を参考にしてください。

cogeotiff.github.io

rio-tilerをタイルサーバを起動する

まずはチュートリアルにある、dynamic_tilerをそのまま使用します。

github.com サンプルコードをapp.pyとして保存し、以下のコマンドで起動します。

$ uvicorn app:app --reload
INFO:     Will watch for changes in these directories: ['/home/ubuntu/app']
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [1920] using StatReload
INFO:     Started server process [1922]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

起動し、受信待機状態になったら成功です。
curlコマンドでテストしてみます。 以下のようにCOGに関する内容が返されれば成功です。

$ curl http://localhost:8000/tilejson.json?url=https://s3.ap-northeast-1.amazonaws.com/s3.tty6335.com/SGLI/L2/GC1SG1_20230314D08D_T0518_L2SG_Rs_VN03_AVE.tif
{"bounds":[0.0,30.00003381415789,13.05409622643624,40.00004508554387],"minzoom":4,"maxzoom":9,"name":"GC1SG1_20230314D08D_T0518_L2SG_Rs_VN03_AVE.tif","tiles":["http://localhost:8000/{z}/{x}/{y}.png?url=https://s3.ap-northeast-1.amazonaws.com/s3.tty6335.com/SGLI/L2/GC1SG1_20230314D08D_T0518_L2SG_Rs_VN03_AVE.tif"]

アプリ側のログも確認してみます。

INFO:     127.0.0.1:46808 - "GET /tilejson.json?url=https://s3.ap-northeast-1.amazonaws.com/s3.tty6335.com/SGLI/L2/GC1SG1_20230314D08D_T0518_L2SG_Rs_VN03_AVE.tif HTTP/1.1" 200 OK

QGISで表示してみる

サーバが立ち上がったので、QGISで表示できるか確認してみましょう。
左側メニューのブラウザから「XYZ Tiles」を選択して右クリックメニューから新規接続をクリックします。

現れたウィンドウに名前は適当に入力し(ここではCOGとします。) URLは先程curlを実行したときに返された "tiles"にあるURLを入力します。最後にOKをクリック

レイヤに追加します。

表示がおかしいですね.... COGがFLoat型で値を持っているのに対し、型変換をせずにIntg型に変換PNGに出力しているので濃淡がおかしくなっているようです。 次回ではPNGを作成する際に型変換とコントラストの調整を行いたいと思います。

参考文献

rio-tiler
rio-tilerを使ってCloud Optimized GeoTIFFをブラウザで表示する
AWS EC2からS3へアクセス(EC2とロールとポリシー) | ITSakura