我有一个 netcdf 文件,其中包含纬度、经度、时间和通量。我使用 Pyresample 重新网格化了数据。现在我想将这些重新网格化的数据放入形状文件中。但是我收到一些错误。重新网格化的数据采用 numpy 数组格式。所以我将其转换为 xarray 格式。然后当我使用 rio.clip 命令时,它显示错误。错误类似于:“找不到 y 维度。'rio.set_spatial_dims()'或者使用“rename()”将维度名称更改为“y”可以解决此问题。
导入pyresample、rioxarray、geopandas和所有必要的库后,我编写了这段代码。
data=xr.open_dataset("flux_file.nc4")
nlon=720
nlat=360
lonGrid=np.linspace(-180,180,nlon)
latGrid=np.linspace(-90,90,nlat)
res=0.5
deg2km=110
km2m=1000
roi=res*deg2km*km2m
area_def=geometry.AreaDefinition('areaD','World','areaD',{'lat_0':'0.00','lat_ts':'90.00','lon_0':'0.00','lon_ts':'180.00','proj':'latlon'},nlon,nlat,[-180,-90,180,90])
lon=data['longitude'].values
lat=data['latitude'].values
swath_def=geometry.SwathDefinition(lons=lon,lats=lat)
result=kd_tree.resample_nearest(swath_def,data['flux'].values,area_def,radius_of_influence=roi)
result[result==0]=np.nan
reverseresult=result[::-1,:]
op=xr.DataArray(reverseresult)
sf=gpd.read_file('India_shape.shp')
op= op.rio.write_crs("EPSG:4326", inplace=True)
op_sf = op.rio.clip(sf.geometry.apply(mapping), sf.crs)
I am expecting to map my regrided data in the shapefile file of India.
错误消息“未找到 y 维度”表示 rioxarray 需要空间坐标的特定维度命名约定。它需要一个名为“y”的维度(纬度)和“x”(经度)。
使用
将现有纬度和经度维度重命名为“y”和“x”op.rename({'纬度':'y','经度':'x'})
明确设置空间维度(如有必要):
如果重命名不起作用,请使用
op.rio.set_spatial_dims(x_dim =“x”,y_dim =“y”)
明确指定空间维度。