我正在努力屏蔽我的netcdf数据集。我设法做了一些事情,但做得不对。
基本上,我有一个形状文件和一个netcdf数据集。
我阅读的形状文件如下:
import geopandas as gpd
shp_noce = gpd.read_file(shapefile_path)
其读作:
DN geometry
0 1 POLYGON ((660074.143 5155942.267, 660172.884 5...
然后,我将文件读取为
rain = xarray.open_dataset(ncfile_path)
结果如下:
<xarray.Dataset>
Dimensions: (DATE: 14245, x: 641, y: 643)
Coordinates:
* DATE (DATE) datetime64[ns] 1980-01-01T12:00:00 ... 2018-1...
* x (x) float64 6.058e+05 6.061e+05 ... 7.656e+05 7.658e+05
* y (y) float64 5.06e+06 5.06e+06 ... 5.22e+06 5.22e+06
Data variables:
transverse_mercator |S1 ...
precipitation (DATE, y, x) float32 ...
Attributes:
CDI: Climate Data Interface version 1.9.9 (https://mpimet.mpg.de...
Conventions: CF-1.5
Title: Daily total precipitation Trentino-South Tyrol 250-meter re...
Created on: Fri Feb 26 21:30:51 2021
history: Fri Feb 26 23:31:30 2021: cdo -z zip -mergetime DAILYPCP_19...
CDO: Climate Data Operators version 1.9.9 (https://mpimet.mpg.de..
我试着遵循其他帖子中的一些建议。首先,我尝试过这个,它是基于rioarray的。这读作:
rain.rio.set_spatial_dims(x_dim="lon", y_dim="lat", inplace=True)
这就是结果:
raise MissingSpatialDimensionError(
MissingSpatialDimensionError: x dimension (lon) not found.
据我所知,由于投影单位的原因,链接形状文件和netcdf数据集可能会出现问题。因此,根据这里的报道,我做了以下工作:
shp_noce.to_crs("epsg:3395")
然而,我得到了同样的错误。我想是因为netcdf数据集中的字段名为x和y。
你有什么建议?我应该重命名字段吗?我应该";set_spatial_dims";作为x和y?
如果你的数据和shapefile在同一个CRS(mercator(中,你所需要做的就是告诉rioxarray你的空间调光是x
和y
。
rain.rio.set_spatial_dims(x_dim="x", y_dim="y", inplace=True)
关于ds.rio.set_spatial_dims
:,请参阅rioxarray API文档
set_spatial_dims
(x_dim:str,y_dim:str、inplace:bool=True(→Union[xarray.core.dataset.Dataset, xarray.core.dataarray.DataArray]
这将设置数据集的空间维度。
参数
- x_dim(str(–x维度的名称
- y_dim(str(–y维度的名称
- inplace(bool,可选(–如果为True,它将在原地修改数据帧。否则,它将返回一个修改后的副本
返回
- 设置了空间维度的数据集
返回类型
xarray.Dataset | xarray.DataArray
您让它查找一个名为"的维度;lon";,它告诉你在数据集中找不到lon。这是因为x维度被命名为"x"
:(