4
\ begingroup美元

我想regrid GCM数据可用高斯电网常规电网,说在1度X 1度。如何做到这一点CDOPythonMATLAB

编辑1:数据格式是netcdf

\ endgroup美元
3
  • 1
    \ begingroup美元 使用CDO的:你有你的数据可作为netCDF文件吗?输出网格到底是如何定义的?与cdo的最简单的方法:创建一个目标网格的网格描述文件(griddes从现有目标网格netCDF文件)并应用一个插值程序(如remapbil在你的文件,应该转换)。 \ endgroup美元
    - - - - - -daniel.heydebreck
    2016年5月30日在45
  • 1
    \ begingroup美元 对Matlab:第二个和第三个搜索结果(我只是搜索时)提供interp2griddedInterpolant这似乎是您所需要的功能。如果你需要进一步的帮助,请提供更多的信息。 \ 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)

定义网格

我们定义了一个lat-lon目标网格与1°x1°网格单元尺寸30 x30网格细胞从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。数控> myGridDef

myGridDef是一个文本文件。

插入数据

我认为我们做一个双线性插值。这是完成了remapbil运营商通过:

cdo remapbil myGridDef INPUT_FILE。数控OUTPUT_FILE.nc

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

正确地定义的网格

选择1

数据变量的空间维度下面的例子(SST)需要命名纬度。此外,坐标变量纬度必须存在(时间独立!)。这些需要正确的坐标变量属性(见下面的例子)。

例子:

维度:经度= 30;lat = 30;时间=无限;/ /当前(24)变量:双经度(朗);朗:standard_name =“经度”;朗:long_name =“经度”;朗:单位=“degrees_east”;朗:轴= " X ";双纬度(lat);纬度: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,在这个例子中)需要一个属性坐标保存坐标变量的名字。

风场:坐标= "经度纬度”;

例子:

维度:TSTEP =无限;/ /当前(24)坳= 112;行= 106;变量:”;双经度(行,坳);朗:standard_name =“经度”;朗:long_name =“经度坐标”;朗:单位=“degrees_east”;朗:_CoordinateAxisType =“朗”;双重纬度(行,坳); 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操作符。如果我们想要添加一个网格定义源文件我们需要源文件的网格定义文本文件(参见“定义网格”)。

cdo setgrid, mySourceGridDef INFILE_NO_COORDS。数控INFILE_WI_COORDS.nc
\ endgroup美元
5
  • \ begingroup美元 有一个同样简单的方法进行设置投影坐标系的坐标?我不懂太多的文档。 \ endgroup美元
    - - - - - -怪不得我
    2017年11月2日上午
  • \ begingroup美元 @Janina你的意思是当你有一些投影,这不是项目模型网格在常规lat-lon网格?你的意思是插值或只是设置一个网格的定义?更好的你问一个新的问题(指这一个),包括您的数据集的一个例子。 \ endgroup美元
    - - - - - -daniel.heydebreck
    2017年11月2日,9:48
  • \ begingroup美元 是的,没错,兰伯特正形圆锥等。从本质上讲,我想设置网格的定义,所以,例如在情节中的数据正确的地理位置。是的,最终我对regridding感兴趣。好的,我想我还是把这变成一个问题…:-) \ endgroup美元
    - - - - - -怪不得我
    2017年11月2日,19
  • \ begingroup美元 @Janina我重读我的回答。实际上解决了你的问题,如果你已经有你的坐标中可用一个netCDF文件。 \ endgroup美元
    - - - - - -daniel.heydebreck
    2017年11月2日,31
  • 1
    \ begingroup美元 实际上,你是对的。经过反复试验进展我能够做regridding成功——谢谢你的详细的描述!但我的工作流程的有效性是有问题的。我创建并保存数据与原始坐标REPSG: 3333。我解决了运用问题通过添加投影的元数据。我转换了WGS84坐标的细胞中心坐标和拯救他们变量经度和纬度(就像你选择2)的输出griddes这个文件是一个曲线网格。 \ endgroup美元
    - - - - - -怪不得我
    2017年11月3日远
0
\ begingroup美元

使用Python,最好的解决方案我已经能够找到pyresample。看到这个博客

\ endgroup美元

    你的答案

    通过点击“发布你的答案”,你同意我们服务条款并承认您已阅读并理解我们的隐私政策的行为准则

    不是你要找的答案?浏览其他问题标记问你自己的问题