关于用GrADS命令”sdfopen” 打开 .nc 文件出现的“SDF file has no discernable X coordinate” 问题详解
兰溪之水 2012-02-26
首先看看王老师的帖子:
关于netCDF格式数据
netCDF数据格式在气象中有广泛的应用,这种格式有一定的复杂性。作为数据的使用者可以不用对数据格式了解得很详细,不过大致的了解还是有必要的。netCDF是自描述的二进制数据格式,也就是说数据本身包含了相关的数据信息。经典的netCDF格式是由维(dimensions)、全局属性(global attribute)和变量(variations)组成的,netCDF4.0以后开始向HDF格式靠拢。下面是一个简单的netCDF数据的自描述信息。格点气象数据通常是4维,包括空间3维和时间维(x, y, z, t),如果把变量也算作一维也可以认为是5维。netCDF可以有一个无限长度的维(unlimited dimension),通常是时间维。
........
........
例子:
使用ncdump命令查看nc文件:
C:\Documents and Settings\Administrator>ncdump -h D:\evapr_oaflux_2011-original.
nc
netcdf D:\evapr_oaflux_2011-original {
dimensions:
time = UNLIMITED ; // (7 currently)
lat = 180 ;
lon = 360 ;
variables:
float lon(lon) ;
lon:long_name = "longitude" ;
lon:units = "degrees" ;
lon:range = "0.5 to 359.5" ;
float lat(lat) ;
lat:long_name = "latitude" ;
lat:units = "degrees" ;
lat:range = "89.5S to 89.5N" ;
int time(time) ;
time:units = "month" ;
time:comment = "Year 2011" ;
short evapr(time, lat, lon) ;
evapr:comments = "monthly mean evaporation rate" ;
evapr:units = "cm/yr" ;
evapr:scale_factor = 0.1 ;
evapr:missing_value = 32766. ;
short err(time, lat, lon) ;
err:comments = "monthly mean estimated error of evaporation rate
" ;
err:units = "cm/yr" ;
err:scale_factor = 0.1 ;
err:missing_value = 32766. ;
// global attributes:
:creation_date = "Oct 2011" ;
:description = "WHOI Objectively Analyzed air-sea Fluxes (OAFlux
) Project" ;
:project_PIs = "Lisan Yu, Bob Weller" ;
:website = "http://oaflux.whoi.edu" ;
}
我们从上面的变量单位可以看出这个evapr_oaflux_2011-original.nc文件并不符合COARDS约定。
我们试画一张图看效果:
..................
.....................
当然我们也可以使用open打开文件,但此时要写的ctl文件则需很详细,比如要加ZDEF之类的,这里就不详细了,有兴趣的可以自己试试!
此外,我们对这类的nc文件的处理
。。。。。。。。
。。。。。。。。
运行后 我看查看生成的文件:
netcdf evapr_oaflux_2011 {
dimensions:
time = UNLIMITED ; // (7 currently)
lat = 180 ;
lon = 360 ;
variables:
float lon(lon) ;
lon:long_name = "longitude" ;
lon:units = "degrees_east" ;
lon:range = "0.5 to 359.5" ;
float lat(lat) ;
lat:long_name = "latitude" ;
lat:units = "degrees_north" ;
lat:range = "89.5S to 89.5N" ;
int time(time) ;
time:units = "months since 2011-01-01 00:00:0.0" ;
time:comment = "Year 2011" ;
time:delta_t = "0000-01-00 00:00:00" ;
time:actual_range = "0., 6." ;
short evapr(time, lat, lon) ;
evapr:comments = "monthly mean evaporation rate" ;
evapr:units = "cm/yr" ;
evapr:scale_factor = 0.1 ;
evapr:missing_value = 32766. ;
evapr:_FillValue = -32767s ;
short err(time, lat, lon) ;
err:comments = "monthly mean estimated error of evaporation rate" ;
err:units = "cm/yr" ;
err:scale_factor = 0.1 ;
err:missing_value = 32766. ;
// global attributes:
:creation_date = "Oct 2011" ;
:description = "WHOI Objectively Analyzed air-sea Fluxes (OAFlux) Project" ;
:project_PIs = "Lisan Yu, Bob Weller" ;
:website = "http://oaflux.whoi.edu" ;
这样之后,我们就可以用GrADS的sdfopen命令打开此nc文件了:
上图看看效果:
。。。。。。。。。。
。。。。。。。。。。
跟第一张图一模一样的吧!!!
当然,当然,还有个最笨的办法:
就是用fortran等程序读入nc文件的数据再写出二进制文件,配上ctl即可啦!这里就不详细介绍这种方法了!
。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。
要了解详细内容?????不急,拿$_$来~