python掩码netcdf文件,带有一个形状文件,并处理以度为单位的LAT LONG与以米为单位的LAT LONG



我正在努力屏蔽我的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你的空间调光是xy

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":(

相关内容

  • 没有找到相关文章

最新更新