衛星データを使って琵琶湖の温度を観察する

衛星データを扱うお仕事をしていますが、最近「海面水温とかとれるの？」と聞かれました。ということで、試しにやってみました。

感想としては、[rioxarray](https://corteva.github.io/rioxarray/stable/)があれば、簡単にこんな処理もできるなぁということでした。ありがとうrioxarray！！！

## 使ったデータ・開発環境など

### 使ったデータ

- GCOM-C(しきさい)
- 海面水温
- [JAXA G-PORTALより取得](https://gportal.jaxa.jp/gpr/index/index)

### 開発環境

- google colab (Python 3.7.14)
- rioxarray 0.9.1
- geopandas 0.10.2
- plotly 5.5.0

## JAXAのGPORTALから画像をダウンロード

### ユーザ登録

JAXAのGPORTALはIDを作ると衛星のデータが無償でダウンロードできます。[ユーザー登録はここから](https://gportal.jaxa.jp/gpr/user/regist1)出来るようです。

### ダウンロードしたいデータを選び、ダウンロードする

登録が終わったら、GUIからデータを選択しダウンロードします（[ここのページから](https://gportal.jaxa.jp/gpr/search?tab=0)）。

範囲は大きめに指定します。そうすると、候補のデータをあげてくれます。

![jaxa3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85433/341009a3-40a6-e951-cc5b-a9855f691d19.jpeg)
G-PORTALより

よさげなのを加工してダウンロードします。今回はgeotiff形式で扱いたいので、その指定を行います。

![jaxa4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85433/4d0beafd-4fe0-a4ea-2f28-4503c7b2b7a9.jpeg)
G-PORTALより

## ダウンロードしたデータを読み込み、指定範囲のデータを作る

データがダウンロードできました。ダウンロードしたgeotiffファイルをrioxarrayのopen_rasterioで読み込みます。

```python3
import rioxarray as rxr
import geopandas as gpd

data = rxr.open_rasterio('/data/GC1SG1_202209200148J05610_L2SG_SSTDK_3001_0000000001010830_SST.tif')
```

読み込み終わったデータを確認し、可視化してみます。

#### データ確認
読み込んだデータはx軸に経度、y軸に緯度を持つデータということが分かります。

![jaxa5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85433/a0932f5d-b789-7756-01d3-d414b168b0d0.jpeg)

データ可視化
```python3
data.plot()
```
![jaxa6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85433/ae59c11a-9e9c-dbcc-6db4-6e41edefe895.jpeg)

### 気温のデータがちょっと変

気温のデータに6万を超える値が入っていました。そこでググってみると、[QGISを使ったGCOM-C（しきさい）プロダクトの画像化手順](https://gportal.jaxa.jp/gpr/notice/case/view/1015?lang=ja)というページが出てきました。

[そちらの資料](https://gportal.jaxa.jp/gpr/assets/mng_upload/COMMON/upload/Imaging_procedure_for_GCOM-C(SHIKISAI)_product_by_using_QGIS(Step.3-4)_ja.pdf)に画像データを海面水温に換算するという項目がありました。

次の数式で換算するようです。

```
SST(℃) = DN × 0.0012 - 10
```

というわけで、先ほど読み込んだデータも水温に換算します。

```
data = data * 0.0012 -10
```

換算することで、次のように気温っぽいデータが作れました。

![jaxa7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85433/609eeae5-2c28-7c38-5dad-d217efa97e14.jpeg)

## 琵琶湖のデータをとってきて範囲指定したデータを作成する

気温のデータはできたので、最後に琵琶湖のデータを取得し、範囲を切り抜き、その湖面気温を作成します。

琵琶湖の位置情報に関しては、はんなりPythonのGISハンズオンの[ドリさんパートのノートブック](https://github.com/hannari-python/hands-on-2022/blob/main/GIS-hands-on/part1/02/04-exercise-biwako.ipynb)を参照ください。国土交通省のページから取得できます。

そのデータを使ってと思いましたが、ちょっとカクカクし過ぎなので時間がかかりそうなので、そのデータから琵琶湖を囲める四角形を作って、その場所のデータを代替で取得しました。

```python3
lake = gpd.read_file('/content/W09-05-g_Lake.shp')
biwako = lake.loc[418]
biwako_rote = biwako.loc[418, 'geometry'].minimum_rotated_rectangle # ここで琵琶湖を囲む四角形を作った
print(biwako_rote.__geo_interface__)
```

出力
![jaxa8.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85433/9e9eba91-bcdf-a071-ddbf-4f9dd0704ff2.jpeg)

ざっくりと琵琶湖風の形を切り出すために、データを処理します。

```python3
biwako_rote_bounds = biwako_rote.bounds
```

![jaxa9.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85433/21082596-ad5f-cda4-34a8-98291d661c3a.jpeg)

これを使って、tifデータを切り抜くと、琵琶湖周辺のデータが作れます。

## コードをまとめていく

琵琶湖の水温用のコードをまとめます。

```python3

data = rxr.open_rasterio('GC1SG1_202209200148J05610_L2SG_SSTDK_3001_0000000001010830_SST.tif')
data = data.where(data < 60000) # 60000以上の数値をnaとする
data = data * 0.0012 - 10
lake = gpd.read_file('/content/W09-05-g_Lake.shp')
biwako = lake.loc[418]
biwako_rote = biwako['geometry'].minimum_rotated_rectangle
biwako_rote_bounds = biwako_rote.bounds
biwako_data = data.sel(
    x=slice(biwako_rote_bounds[0], biwako_rote_bounds[2]),
    y=slice(biwako_rote_bounds[3], biwako_rote_bounds[1])
)
biwako_data.plot()
```

可視化すると琵琶湖の形っぽくないが、一応データはできたようです。

![jaxa10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85433/9e365817-64cf-bd4d-4de0-3b43036fa8d0.jpeg)

## QGISで位置があっているか確認する

うまく処理できたか分からないので、一先ずtifファイルで保存し、QGISでいい感じにデータが表示されるか確認します。

```python3
biwako_data.to_raster('biwako.tif') #保存
```

QGISでオープンストリートマップにかぶせてみます。

![jaxa11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85433/b1a775e5-e33d-e27a-a275-4747d9a417a3.jpeg)

このデータが取得できていないのは何なのか？琵琶湖クリップをしていないデータを見てみると・・・

![jaxa12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85433/e81c92c5-38a7-7c03-cf1b-ec0eab0d7718.jpeg)

## 6万以上の数値には意味があった！！！（ドキュメントしっかり読め問題）

やはり、ちょっと抜けがあります。これは雲がかかっている可能性が考えられますね。と思ってJAXAの資料を見返していると、格納されている60000以上の数値は次のような意味があるようです。

最後にしきさいのデータを扱う際に注意すべき点として資料よりピックアップしておきます。

![JAXA13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85433/c9483cd7-2169-f3f8-816f-a5b66cc43ee6.jpeg)
[QGISを使ったGCOM-C(しきさい)プロダクトの画像化手順（STEP1-2）](https://gportal.jaxa.jp/gpr/assets/mng_upload/COMMON/upload/Imaging_procedure_for_GCOM-C(SHIKISAI)_product_by_using_QGIS(Step.1-2)_ja.pdf)

## アピール

衛星データを使ってみたいとか、会社のDXを進めたいとかございましたら、[京都のデータテクノロジー企業　長目](https://chomoku.com/)までおといあわせください。