1、netcdf文件格式说明

netCDF数据格式在气象中有广泛的应用,这种格式有一定的复杂性。作为数据的使用者可以不用对数据格式了解得很详细,不过大致的了解还是有必要的。netCDF是自描述的二进制数据格式,也就是说数据本身包含了相关的数据信息。经典的netCDF格式是由维(dimensions)、全局属性(global attribute)和变量(variations)组成的,netCDF4.0以后开始向HDF格式靠拢。下面是一个简单的netCDF数据的自描述信息。格点气象数据通常是4维,包括空间3维和时间维(x, y, z, t),如果把变量也算作一维也可以认为是5维。netCDF可以有一个无限长度的维(unlimited dimension),通常是时间维。

File Name: E:\Temp\nc\output.nc
Dimensions: 3
    longitude = 240;
    latitude = 121;
    time = 12;
Global Attributes: 2
    : Conventions = "CF-1.0";
    : history = "2011-07-22 15:15:21 GMT by mars2netcdf-0.92";
Variations: 4
    NC_FLOAT longitude(longitude);
        longitude: units = "degrees_east";
        longitude: long_name = "longitude";
    NC_FLOAT latitude(latitude);
        latitude: units = "degrees_north";
        latitude: long_name = "latitude";
    NC_INT time(time);
        time: units = "hours since 1900-01-01 00:00:0.0";
        time: long_name = "time";
        time: avg_period = "0000-01-00 00:00:00";
    NC_SHORT q(time,latitude,longitude);
        q: scale_factor = 3.07609393740706E-07;
        q: add_offset = 0.0101016578590996;
        q: _FillValue = -32767;
        q: missing_value = -32767;
        q: units = "kg kg**-1";
        q: long_name = "Specific humidity";
Unlimited dimension: 2

netCDF格式非常灵活,用程序自动判断维和变量等信息的前提条件是数据必须遵循某种约定(convensions)。气象上最常用的约定是CFCOARDS可以看作CF约定的子集),对于维、变量、属性有详细的规定,这样以来软件才能通过约定对数据进行正确的判读。

GrADS中netCDF数据可以通过三种方式打开:

(1)sdfopen,只限于符合COARDS约定(http://ferret.wrc.noaa.gov/noaa_coop/coop_cdf_profile.html)的nc数据。GrADS不支持CF约定(COARDS约定过于简单,无法描述复杂的数据),因此sdfopen能打开的数据十分有限。

(2)xdfopen,对于非COARDS约定的nc数据可以尝试xdfopen来打开,需要一个简单的ctl文件,具体可以看官方说明http://cola.gmu.edu/grads/gadoc/gradcomdxdfopen.html

(3)open,如同打开GrADS二进制文件,需要一个完整的ctl文件,详见http://cola.gmu.edu/grads/gadoc/descriptorfile.html

第2和3种打开nc文件的方法都需要control文件,是为了软件能够正确读取维和变量等信息。

MeteoInfo打开nc文件的方式类似sdfopen,无需control文件,不过MeteoInfo支持CF约定(包含了COARDS约定)、WRF Out约定(WRF模式输出)和IOAPI约定(用于CMAQ模式)。因此可以在不需要control文件的情况下打开更多的nc数据文件。

案例分析

使用 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 ;
关于用 GrADS 命令”sdfopen” 打开 .nc 文件出现的“SDF file has no discernable X coordinate” 问题详解 兰溪之水
3 / 6
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约定
所以我们用”sdfopen”命令打开时,会出现

解决方法1、写一个简单的ctl文件,用xdfopen打开nc文件

DSET ^evapr_oaflux_2011-original.nc
TITLE monthly mean evapr_oaflux_2011
UNDEF 32766
XDEF lon 360 LINEAR 0.5 1.0
YDEF lat 180 LINEAR -89.5 1.0
TDEF time 7 LINEAR 00Z01JAN2011 1mo
VARS 2
evapr=>evapr 0 99 monthly mean evaporation rate
err=>err 0 99 monthly mean estimated error of evaporation rate
ENDVARS

保存为:evapr_oaflux_2011.ctl,然后用xdfopen d:/evapr_oaflux_2011.ctl即可打开nc文件

解决方法2:写一个详细的ctl文件,用open打开nc文件

注意:这里的ctl 文件则需很详细,比如要加 ZDEF 之类的,

这里就不详细做了,有兴趣的可以自己试试!

解决方法3:直接修改 nc 文件里面的描述,使其符合 COARDS约定

使用ncl:

begin
f = addfile("./evapr_oaflux_2011.nc","w")
f->lon@units = "degrees_east"
f->lat@units = "degrees_north"
f->time@units = "months since 2011-01-01 00:00:0.0"
end

执行之后,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" ;

之后就能用sdfopen打开nc文件了

文章内容参考气象家园的文章,如下:

http://bbs.06climate.com/forum.php?mod=viewthread&tid=1267

 

http://bbs.06climate.com/forum.php?mod=viewthread&tid=6008

grads读取netcdf文件,报错SDF file has no discernable X coordinate解决办法的更多相关文章

  1. Linux 下解压.tar.gz文件报错 gzip:stdin:not in gzip format 的解决办法!

    [root@hzp124 opt]# tar xzvf 1577255462-qypt.tar gzip: stdin: not in gzip formattar: Child returned s ...

  2. excel第一次打开报错 向程序发送命令时出错 多种解决办法含终极解决方法

    excel第一次打开报错 向程序发送命令时出错 多种解决办法含终极解决方法 office2007应该遇到“向程序发送命令时出现 问题”,设置为以管理员运行也不好用,重装office也不好用,下面介绍下 ...

  3. CocoaPods pod install的时候报错:invalid byte sequence in UTF-8 (ArgumentError)解决办法

    CocoaPods pod install的时候报错:invalid byte sequence in UTF-8 (ArgumentError)解决办法: 基本可以确定是Podfile中的内容编码有 ...

  4. Scrapy安装报错 Microsoft Visual C++ 14.0 is required 解决办法

    Scrapy安装报错 Microsoft Visual C++ 14.0 is required 解决办法原因:Scrapy需要的组 twisted 需要 C++环境编译. 方法一:根据错误提示去对应 ...

  5. adb shell报错:error: insufficient permissions for device的解决办法

    1.错误描述 执行 adb shell 时,报错如下; error: insufficient permissions for device  2.解决办法 1,终端执行 lsusb 结果如下,注意绿 ...

  6. 转 : Apache启动报错:could not bind to address [::]:443 解决办法

    转:Apache启动报错:could not bind to address [::]:443 解决办法 安装Apache服务器的时候,报如下错误: Installing the 'apache' s ...

  7. pydicom读取dicom文件报错

    之前采用pydicom读取dicom文件一切都很正常,不过最近读取一批数据的时候,会报错 读取代码 file = pydicom.read_file(filepath) data = file.pix ...

  8. python3 读取dbf文件报错 UnicodeDecodeError: 'gbk' codec can't decode

    在读取dbf文件时由于编码问题报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xb5 in position 49: incomplete ...

  9. 解决Requests中文乱码【有用】,读取htm文件 读取txt文件报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 0

    打开这个网址https://blog.csdn.net/chaowanghn/article/details/54889835 python在open读取txt文件时,出现UnicodeDecodeE ...

  10. python中读取json文件报错,TypeError:the Json object must be str, bytes or bytearray,not ‘TextIOWrapper’

    利用python中的json读取json文件时,因为错误使用了相应的方法导致报错:TypeError:the Json object must be str, bytes or bytearray,n ...

随机推荐

  1. MySQL配置和常用命令

    目录 数据库配置 常用操作 项目地址:https://github.com/aijisjtu/Bot-Battle graph LR A[配置数据源] --> B[建立连接] B --> ...

  2. #斯坦纳树,状压dp#洛谷 3264 [JLOI2015]管道连接

    题目 分析 如果对于每一个频道单独跑斯坦纳树可能会存在两种频道共用一条道路而重复统计的情况, 考虑状压dp,设\(f[s]\)表示选择频道二进制状态为\(s\)的最小贡献,那么对于每个状态跑斯坦纳树然 ...

  3. #位运算#CF959E Mahmoud and Ehab and the xor-MST

    题目 \(n\)个点的完全图标号为\([0,n-1]\),\(i\)和\(j\)连边权值为\(i\: xor\:j\),求MST的值 分析 考虑MST有两种解法一种是Prim一种是Kruskal,Pr ...

  4. OpenHarmony创新赛|赋能直播第五期

     OpenHarmony创新赛赋能直播课程即将再次与大家见面!本期基于之前的青蛙影院的UI界面设计的课程,介绍综合性APP的需求介绍和技术栈整合等内容.此外,课程同步赋能OpenHarmony创新赛, ...

  5. 未来已来,OpenHarmony 3.2 Release发布,迈入发展新阶段

      2023年4月9日,在社区开发者的期盼中,在春风送暖万物更新的季节里,我们迎来了OpenAtom OpenHarmony(以下简称"OpenHarmony")3.2 Relea ...

  6. 分析即服务(AaaS)是什么?终于有人讲清楚了

    随着世界数据领域的地位和规模的不断扩大,大数据.人工智能和云计算正在结合起来,以分析即服务的形式为企业提供急需的喘息机会 . 让我们简要回顾一下 2010 年以来发生的事情. 这十年来我们见证了许多技 ...

  7. 【原创】win11完美搭建macos13实现IOS自动化测试环境

    虚拟机完美搭建IOS自动化测试环境 一.win系统 1.1 安装虚拟机VM16 如果是macos系统请跳过 详细安装请看压缩包,私信可以提供安装包 1.2 VM解锁macOS 使用的是unlocker ...

  8. node require的循环引用是怎么一回事

    require 运行过程 require 引用是同步的,没有异步这么一说,它会先运行一遍. setouttime(function(){ export=a; }) 如果我们require的时候,那么这 ...

  9. ICMP 概念

    前言 打算从新整理网络这一块,那么我先把概念整理下来. 正文 ICMP是ip的一个组成.他传递差错报文以及其他需要注意的信息.主要用于反馈一些网络传输的问题.因为ip协议很容易丢包,那么icmp可以告 ...

  10. C++ 默认参数与引用传递:语法、用法及示例

    C++ 默认参数 默认参数概述 在 C++ 中,函数参数可以拥有默认值.这意味着,在调用函数时,如果省略了某个参数,那么将使用为该参数指定的默认值. 设置默认参数 默认参数值使用等号 = 符号进行设置 ...