4
\ begingroup美元

我想在高斯网格上对GCM数据进行正则网格,比如在1度X 1度。如何使用CDOPythonMATLAB

编辑1:数据格式为netcdf

\ endgroup美元
3.
  • 1
    \ begingroup美元 对于CDO的使用:您有可用的netCDF文件的数据吗?您的输出网格是如何精确定义的?使用cdo最简单的方法:创建目标网格的网格描述文件(使用griddes从一个现有的目标网格netCDF文件),并应用插值例程(例如。remapbil)下载你需要转换的档案。 \ endgroup美元
    - - - - - -daniel.heydebreck
    2016年5月30日12:45
  • 1
    \ begingroup美元 关于Matlab:第二个和第三个搜索结果(当我刚刚搜索它)提供interp2而且griddedInterpolant这些函数都是你需要的。如需进一步帮助,请提供更多信息。 \ endgroup美元
    - - - - - -daniel.heydebreck
    2016年5月30日15:53
  • \ begingroup美元 @daniel。谢谢你的宝贵建议,我的数据在netcdf格式。我不确定是否interp2可应用于Gussian网格虽然我已经大量使用这个函数直线网格 \ endgroup美元
    - - - - - -dsbisht
    2016年5月31日6:39

2答案2

9
\ begingroup美元

气候数据操作员(CDO)

定义网格

我们定义了一个1°x1°网格单元大小为30x30的lat-lon目标网格,网格单元从40°N和-10°E(=10°W)开始:

Gridtype = lonlat xsize = 30 ysize = 30 xfirst = -10 xinc = 1 yfirst = 40 yinc = 1

该文本被写入一个文本文件。看到章节1.3.2 CDO手册有关详细信息和进一步的示例。

如果你已经有一个netCDF文件,其中包含目标网格上的数据,你也可以从该文件中提取网格定义:

cdo griddes FILE_WITH_TARGET_GRID。nc > myGridDef

myGridDef是文本文件。

插入数据

我假设我们做的是双线性插值。这是用remapbil运营商通过:

cdo remapbil myGridDef INPUT_FILE。数控OUTPUT_FILE.nc

输入数据的网格需要在输入文件中正确定义(这通常是个问题)。

“正确定义的”网格

选择1

数据变量的空间维度(以下示例中的SST)需要命名而且纬度.此外,坐标变量而且纬度必须存在(时间无关!)。这些变量需要具有正确的坐标变量属性(参见下面的示例)。

例子:

尺寸:lon = 30;Lat = 30;时间=无限;//(24当前)变量:double lon(lon);Lon:standard_name = "longitude";Lon:long_name = "longitude";Lon:单位= "degrees_east";lon:axis = "X";双拉(拉特);纬度:standard_name = "纬度"; lat:long_name = "latitude" ; lat:units = "degrees_north" ; lat:axis = "Y" ; double time(time) ; time:standard_name = "time" ; time:long_name = "time" ; time:units = "seconds since 1900-01-01 00:00:00" ; time:calendar = "standard" ; time:axis = "T" ; float SST(time, lat, lon) ; SST:long_name = "sea_surface_temperature" ; SST:units = "degree celsius" ; SST:_FillValue = NaNf ; SST:missing_value = NaNf ; SST:var_desc = "sea surface temperature" ;

选择2

空间维度和相应的变量存在于源文件中,但没有表示为而且纬度.然后每个数据变量(本例中为SST)都需要有一个属性坐标它保存了坐标变量的名称。

SST:坐标= "lon latat ";

例子:

尺寸:TSTEP =无限;//(24当前)COL = 112;Row = 106;变量:";双lon(ROW, COL);Lon:standard_name = "longitude";Lon:long_name = "经度坐标";Lon:单位= "degrees_east";lon:_CoordinateAxisType = " lon ";双拉(ROW, COL); lat:standard_name = "latitude" ; lat:long_name = "latitude coordinate" ; lat:units = "degrees_north" ; lat:_CoordinateAxisType = "Lat" ; double time(TSTEP) ; time:standard_name = "time" ; time:long_name = "time" ; time:units = "seconds since 1900-01-01 00:00:00" ; time:calendar = "standard" ; float SST(TSTEP, ROW, COL) ; SST:long_name = "sea_surface_temperature" ; SST:units = "degree celsius" ; SST:coordinates = "lon lat" ; SST:var_desc = "sea surface temperature" ;

注意:

如果坐标变量缺失,则可以通过setgrid操作符。如果我们想在源文件中添加网格定义,那么我们需要在文本文件中添加源文件的网格定义(参见'define grid')。

mySourceGridDef infile_no_cods。数控INFILE_WI_COORDS.nc
\ endgroup美元
5
  • \ begingroup美元 在为投影坐标系设置坐标时,是否有同样简单的方法?从文档中我没理解多少。 \ endgroup美元
    - - - - - -怪不得我
    2017年11月2日9:18
  • \ begingroup美元 @Janina你的意思是当你有一些投影时,它不会将你的模型网格投影到一个普通的尼龙网格上?你是指插值还是只是设置一个网格定义?你最好问一个新问题(参考这个),包括你的数据集的一个例子。 \ endgroup美元
    - - - - - -daniel.heydebreck
    2017年11月2日9:48
  • \ begingroup美元 是的,没错,像兰伯特共形圆锥曲线等等。从本质上讲,我想要设置网格定义,例如在Panoply中,它将在正确的地理位置绘制数据。是的,最终我对尊重感兴趣。好吧,我想我要把这个变成一个问题……: -) \ endgroup美元
    - - - - - -怪不得我
    2017年11月2日10:19
  • \ begingroup美元 @Janina,我刚刚重读了一遍我的答案。如果您在一个netCDF文件中已经有了可用的坐标,那么它实际上解决了您的问题。 \ endgroup美元
    - - - - - -daniel.heydebreck
    2017年11月2日10:31
  • 1
    \ begingroup美元 事实上,你是对的。经过一些尝试和错误的进展,我能够做的审查成功-谢谢你的详细描述!但我的工作流程的有效性值得怀疑。我在R中创建并保存了数据,原始坐标在EPSG: 3333.我通过添加投影元数据解决了地理引用问题。我对WGS84进行了转换,以latong -long形式获得单元格中心坐标,并将它们保存到变量lon和lat(就像您的替代方案2)griddes这个文件是一个曲线网格。 \ endgroup美元
    - - - - - -怪不得我
    2017年11月3日10:01
0
\ begingroup美元

使用Python时,我能找到的最佳解决方案是pyresample。看到这个博客

\ endgroup美元

    你的答案

    点击“张贴您的答案”,即表示您同意我们的服务条款隐私政策而且饼干的政策

    这不是你想要的答案?浏览带标签的其他问题问自己的问题