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あんま触らんから、毎回しょうもないことで詰まる。。