zhoufcumt的个人博客分享 http://blog.sciencenet.cn/u/zhoufcumt

博文

NETCDF文件读取要点

已有 16058 次阅读 2013-3-22 23:42 |个人分类:数据格式|系统分类:科研笔记|关键词:学者| NetCDF, 头文件, 数据读取

很多数据都以NETCDF或GRIB的格式出现,比如NCEP和ECMWF的数据基本是NETCDF的格式,读取这些数据的格式时,在linux下可以安装NETCDF库来读取,比如用fortran读取NCEP大气数据时,需要有这样一句,

call readnetcdf(ncfile, 'pres', start,count,stride,press,time),这个‘pres’即为NCEP大气数据的关键字,那么对一个NETCDF格式的数据,如何获取这个关键字呢?这里就要用到一个很方便的工具ncdump:

ncdump -c pres.sfc.2012.nc > header.atmos

这样在header.atmos文件下将会有这样的信息:


netcdf pres.sfc.2012 {

dimensions:

lat = 73 ;

lon = 144 ;

time = UNLIMITED ; // (1464 currently)

variables:

float lat(lat) ;

lat:units = "degrees_north" ;

lat:actual_range = 90.f, -90.f ;

lat:long_name = "Latitude" ;

lat:standard_name = "latitude" ;

lat:axis = "Y" ;

float lon(lon) ;

lon:units = "degrees_east" ;

lon:long_name = "Longitude" ;

lon:actual_range = 0.f, 357.5f ;

lon:standard_name = "longitude" ;

lon:axis = "X" ;

double time(time) ;

time:units = "hours since 1-1-1 00:00:0.0" ;

time:long_name = "Time" ;

time:actual_range = 17628096., 17636874. ;

time:delta_t = "0000-00-00 06:00:00" ;

time:standard_name = "time" ;

time:axis = "T" ;

short pres(time, lat, lon) ;

pres:long_name = "4xDaily Pressure at surface" ;

pres:unpacked_valid_range = 40000.f, 115000.f ;

pres:actual_range = 49030.f, 109490.f ;

pres:units = "Pascals" ;

pres:add_offset = 367650.f ;

pres:scale_factor = 10.f ;

pres:missing_value = 32766s ;

pres:precision = -1s ;

pres:least_significant_digit = -1s ;

pres:GRIB_id = 1s ;

pres:GRIB_name = "PRES" ;

pres:var_desc = "Pressure" ;

pres:dataset = "NMC Reanalysis" ;

pres:level_desc = "Surface" ;

pres:statistic = "Individual Obs" ;

pres:parent_stat = "Other" ;

pres:valid_range = -32765s, -25265s ;


// global attributes:

:Conventions = "COARDS" ;

:title = "4x daily NMC reanalysis (2012)" ;

:history = "created 2011/12 by Hoop (netCDF2.3)" ;

:description = "Data is from NMC initialized reanalysisn",

"(4x/day).  It consists of most variables interpolated ton",

"pressure surfaces from model (sigma) surfaces." ;

:platform = "Model" ;

:references = "http://www.esrl.noaa.gov/psd/data/gridded/data.ncep.reanalysis.html" ;


short pres(time, lat, lon) ; 这句中的pres即为关键字。

pres:units = "Pascals" ;  这句即为气压数据的单位:帕斯卡。

下面还有经纬度格网信息、时间信息(时间的单位是小时,time:units = "hours since 1-1-1 00:00:0.0" ),内容较多,显示不全,有兴趣的可以自己试验。


将NETCDF格式文件转化为可读文本文件:

ncdump -bc pres.sfc.2012.nc > atmos_ncep_2012.dat

但这样对于数据量大的数据比较耗时,不建议这样做,还是尽量用NETCDF的库完成NETCDF格式文件的读取。


NOTE:在当前数据目录下必须有类似动态库文件 libnetcdf.so.7!





https://m.sciencenet.cn/blog-350278-672989.html

上一篇:linux下一些很有意思的工具
下一篇:Cygwin/X 的正确安装

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-17 09:15

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部