たぶん動く...

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

GCOM-Cのデータで全球画像を作ってみる (その1)

GCOM-Cのデータを使って全球カラー画像の作成をトライしてみました。 全部ダウンロードして画像を作成するとなると、ダウンロードに時間がかかり、自宅の回線を圧迫することは容易に想像出来ます。
そこで今回はAWS上ダウンロードと画像作成までしてみたいと思います。

1. ダウンロードするファイル一覧を取得

G-PortalCSW検索を用いてファイル一覧とftpのURLを取得します。G-PortalCSW検索についてはG-Portalのマニュアル を参照してください。
今回は2021年1月のDescending バンド3の 一か月統計データを取得してみます。
以下のコマンドでファイル名一覧を取得できます。

curl -s 'https://gportal.jaxa.jp/csw/csw?service=CSW&version=3.0.0&request=GetRecords&outputFormat=application/json&count=3000&datasetId=10002035&startTime=2021-01-01T00:00:00Z&endTime=2021-01-31T23:59:59Z&orbitDirection=Descending&ProcessTimeUnit=01M' | jq '.features[].properties.product.fileName' | sed -e 's/"//g' | awk -F"/" '{print $12}'  

簡単に説明しますと、出力フォーマットにjsonを指定し、jqコマンドでファイル名を含む文字列を抜き出す。 awkコマンドで / ごとに区切り、ファイル名の文字列のみを抜き出します。
実行結果によると、全部で422ファイルあるようです。

実行結果(一部)
GC1SG1_20210101D01M_T0831_L2SG_RV03Q_2000.h5
GC1SG1_20210101D01M_T0927_L2SG_RV03Q_2000.h5
GC1SG1_20210101D01M_T0928_L2SG_RV03Q_2000.h5
GC1SG1_20210101D01M_T0729_L2SG_RV03Q_2000.h5
GC1SG1_20210101D01M_T0929_L2SG_RV03Q_2000.h5
GC1SG1_20210101D01M_T0829_L2SG_RV03Q_2000.h5
GC1SG1_20210101D01M_T0826_L2SG_RV03Q_2000.h5
GC1SG1_20210101D01M_T0629_L2SG_RV03Q_2000.h5
GC1SG1_20210101D01M_T0930_L2SG_RV03Q_2000.h5
GC1SG1_20210101D01M_T0828_L2SG_RV03Q_2000.h5

2. ファイルのURL一覧を取得

先ほどのコマンドを少し修正し、G-PortalftpサイトのURLにします。 sedコマンドでhttps://gportal.jaxa.jpftp://ftp.gportal.jaxa.jp に変えます。

curl -s 'https://gportal.jaxa.jp/csw/csw?service=CSW&version=3.0.0&request=GetRecords&outputFormat=application/json&count=3000&datasetId=10002035&startTime=2021-01-01T00:00:00Z&endTime=2021-01-31T23:59:59Z&orbitDirection=Descending&ProcessTimeUnit=01M' | jq '.features[].properties.product.fileName' | sed -e 's/"//g' -e 's/https/ftp/g' -e 's/gportal.jaxa.jp\/download/ftp.gportal.jaxa.jp/g'

これで一覧が取得できます。

実行結果(一部)
ftp://ftp.gportal.jaxa.jp/standard/GCOM-C/GCOM-C.SGLI/L2.LAND.RV03.Statistics/2/2021/01/GC1SG1_20210101D01M_T1307_L2SG_RV03Q_2000.h5
ftp://ftp.gportal.jaxa.jp/standard/GCOM-C/GCOM-C.SGLI/L2.LAND.RV03.Statistics/2/2021/01/GC1SG1_20210101D01M_T1408_L2SG_RV03Q_2000.h5
ftp://ftp.gportal.jaxa.jp/standard/GCOM-C/GCOM-C.SGLI/L2.LAND.RV03.Statistics/2/2021/01/GC1SG1_20210101D01M_T0602_L2SG_RV03Q_2000.h5
ftp://ftp.gportal.jaxa.jp/standard/GCOM-C/GCOM-C.SGLI/L2.LAND.RV03.Statistics/2/2021/01/GC1SG1_20210101D01M_T1325_L2SG_RV03Q_2000.h5
ftp://ftp.gportal.jaxa.jp/standard/GCOM-C/GCOM-C.SGLI/L2.LAND.RV03.Statistics/2/2021/01/GC1SG1_20210101D01M_T1225_L2SG_RV03Q_2000.h5

3.ファイルのダウンロードとtiff画像作成

先ほどつくったURLからwgetコマンドでファイルをダウンロードします。 こちらを参考にしました。
wgetftpで扱えることに気が付きませんでした。そういえば、ftpサイトはwebブラウザで開けるのでwgetでもいけるのか。
先ほどのURL一覧を配列で保存して、wgetで一つずつダウンロードします。

wget -c --user=${USR} --password=anonymous ${URL}

ダウンロードしたらtiffファイルを作成していきます。今回は統計量のうち、Rs_VN03_MAXを指定しました。

python h5_2_tiff.py ${filename} Rs_VN03_MAX ${tiff_filename}

tiffファイルを作成するところまでしたら、tiff画像をgzipで圧縮ます。圧縮することで、一つ80MBほどのファイルが半分以下の容量に減らせます。
ダウンロードしたHDF5ファイルは不要なので削除します。全部保持していたら容量がおそらく100GBを超えるはずです、、、

gzip ${tiff_filename}
rm ${filename}

この流れをAWSのEC2インスタンス上で実行します。
かなり小さいインスタンスタイプのt2.micro で実行します。t2.miroではメモリが4GBしかないですが、gdalwarpとかメモリ消費が大きい操作はないので、実行できるはずです。

4. 処理結果

全442ファイルの処理が完了するまで、4時間半かかりました。圧縮して全部で11GBでした。当初の見立てでは2時間くらいで終わる予定でしたが、だいぶ時間がかかりました。
一番の原因としては、CPUの稼働率が常に50%以上で、CPUクレジット残高を著しく消費し、実行速度がとても遅くなっていました。これ知らんかったよ... おそらく、これと関連してると思うのですが、ダウンロード速度が著しく遅くなっていました。

5. まとめ

今回はAWS EC2の一番小さいインスタンスタイプ(t2.micro)でGCOM-Cの250m解像度のファイルを大量にダウンロードと処理してみました。結果、t2.microでは、CPU使用率が高い状態が続き、CPUクレジット残高を消費した結果、処理が遅くなり想定より時間がかかる結果になりました。スポットインスタンスで実行して、S3に保存とかが賢い方法かもしれません。

参考文献

G-Portal 地球観測衛星データ提供システムユーザ向け取扱説明書

Tomoko Kawaguchi Akitsu's Web Page - GCOM-Cデータのダウンロード

バーストパフォーマンスインスタンスの CPU クレジットとベースライン使用率 - Amazon Elastic Compute Cloud

jqコマンドでjsonデータを整形・絞り込み - Qiita