PythonでNetCDF fileを読み込みとpolygonでclipする

.ncの拡張子で終わるfileはNetCDFというタイプのよう。
xarrayというパッケージを使って読み込む。

これだと、複数の変数がある時に読み込めない。

import xarray
xarray.open_dataarray

これだと、複数の変数があっても読み込める。

xarray.open_dataset


次に、読み込んだ NetCDF を polygon データを使ってマスクする。

準備として、読み込んだNetCDFデータのCRSをセットする必要がある。
(これはマスクするポリゴンデータと同じである必要あり。)

ここで、つまずいたこと。

df.rio.write_crs("epsg:4326")

とすると、

y dimension (lat) not found. Data variable: lon_bnds

と怒られた。よくわかってないけど、名前が悪いっぽかった。
dimensionとcoordinatesの名前があってないといけない、という声が散見されたため、`rename`をトライしたが、名前がconflictしていけないと怒られる。
ググってたら、`xarray.Dataset.set_coords`を発見し、次をトライ。うまくいった!

df.set_coords(['lon_bnds', 'lat_bnds']).rio.write_crs("epsg:4326")

無事、CRS完了。

clipするのは、簡単だった。

clipped = df.rio.clip(thai.geometry.apply(mapping), thai.crs, drop=True)

drop = Trueにすると、polygonのとこだけ切り取ってくれるのではないかと期待している。

(補論)
ちなみに、crop と mask と clip の違い
- crop :四角形に切ってくれる
- mask:ポリゴンデータとかを使って、その形通りに切ってくれる
- clip:??(maskと同義?)
と理解している。間違っていたらすみません。

pythonあんま触らんから、毎回しょうもないことで詰まる。。




この記事が気に入ったらサポートをしてみませんか?