Python:从 shapefile (polygon/multipolygon) 屏蔽 ERA5 数据 (NetCDF)
Python: Masking ERA5 data (NetCDF) from shapefile (polygon/multipolygon)
我想 select 来自 ERA5 网格数据(仅限地表层)的网格单元,这些数据位于瑞士北部和南部的地理掩码(加上雷达缓冲区)内,以计算区域均值。
shapefile 中的 4 个蒙版 (masks) are given as polygons/multipolygons (polygons),到目前为止,我能够使用 salem roi 获得我想要的 2 个蒙版:
radar_north = salem.read_shapefile('radar_north140.shp')
file_radar_north = file.salem.roi(shape=radar_north)
file_radar_north.cape.mean(dim='time').salem.quick_map()
然而,对于 radar_south 和 alpensuedseite 形状文件,代码在开始时不起作用(错误的 selection 或没有显示数据),现在什么都不起作用了(?)。我不知道为什么,因为我从第一次到第二次都没有改变任何东西。
如果有人看到问题或知道屏蔽 ERA 数据的不同方法(这可能更快),我将不胜感激! (我在这里的类似问题的答案没有成功)。
最佳
莉娜
如果您正在处理 netcdf 文件,这可能会起作用
import geopandas as gpd
import xarray as xr
import rioxarray
from shapely.geometry import mapping
# load shapefile with geopandas
radar_north = gpd.read_file('radar_north140.shp')
# load ERA5 netcdf with xarray
era = xr.open_dataset('ERA5.nc')
# add projection system to nc
era = era.rio.write_crs("EPSG:4326", inplace=True)
# mask ERA5 data with shapefile
era_radar_north = era.rio.clip(radar_north.geometry.apply(mapping), radar_north.crs)
我想 select 来自 ERA5 网格数据(仅限地表层)的网格单元,这些数据位于瑞士北部和南部的地理掩码(加上雷达缓冲区)内,以计算区域均值。 shapefile 中的 4 个蒙版 (masks) are given as polygons/multipolygons (polygons),到目前为止,我能够使用 salem roi 获得我想要的 2 个蒙版:
radar_north = salem.read_shapefile('radar_north140.shp')
file_radar_north = file.salem.roi(shape=radar_north)
file_radar_north.cape.mean(dim='time').salem.quick_map()
然而,对于 radar_south 和 alpensuedseite 形状文件,代码在开始时不起作用(错误的 selection 或没有显示数据),现在什么都不起作用了(?)。我不知道为什么,因为我从第一次到第二次都没有改变任何东西。
如果有人看到问题或知道屏蔽 ERA 数据的不同方法(这可能更快),我将不胜感激! (我在这里的类似问题的答案没有成功)。
最佳 莉娜
如果您正在处理 netcdf 文件,这可能会起作用
import geopandas as gpd
import xarray as xr
import rioxarray
from shapely.geometry import mapping
# load shapefile with geopandas
radar_north = gpd.read_file('radar_north140.shp')
# load ERA5 netcdf with xarray
era = xr.open_dataset('ERA5.nc')
# add projection system to nc
era = era.rio.write_crs("EPSG:4326", inplace=True)
# mask ERA5 data with shapefile
era_radar_north = era.rio.clip(radar_north.geometry.apply(mapping), radar_north.crs)