MeteoInfoLab脚本示例:创建netCDF文件(合并文件)
在MeteoInfoLab中增加了创建netCDF文件并写入数据的功能,这里利用合并多个netCDF文件为一个新的netCDF文件为例。
1、创建一个可写入的netCDF文件对象(下面用ncfile表示),用addfile函数,第一个参数是文件名,第二次参数'c'表示创建新的netCDF文件。
ncfile = addfile(outfn, 'c')
2、添加维(Dimensions),用ncfile的adddim函数,两个参数分别是维名称和维长度。
stn = 26564
stdim = ncfile.adddim('station', stn)
3、添加全局属性,用ncfile的addgroupattr函数,两个参数分别是属性名称和属性值。
ncfile.addgroupattr('Conventions', 'Unidata Observation Dataset v1.0')
4、添加变量,用ncfile的addvar函数,三个参数分别是变量名称、变量数据类型和变量维列表。并给变量添加一些属性用变量对象的addattr函数。
var = ncfile.addvar('streamflow', 'float', [tdim, stdim])
var.addattr('long_name', 'River Flow')
var.addattr('units', 'meter^3 / sec')
5、创建netCDF文件,上面的步骤都是对netCDF文件的设置,完成之后需要create函数表示设置已完成,可以开始写数据了。
ncfile.create()
6、写数据,用ncfile的write函数,参数分别是变量和要写入的数组,origin是各维起点的列表,可以控制写入某个变量的部分数据。如果要写入的数组的维数和变量的维数不一致,需要用reshape函数来确保二者有相同的维数。
ncfile.write(variables[3], flow, origin=origin)
7、关闭netCDF文件,数据写完之后需要关闭netCDF文件。
ncfile.flush()
ncfile.close()
示例脚本程序(合并4个不同时次的netCDF文件为一个新的netCDF文件):
datadir = 'D:/Temp/nc'
outfn = os.path.join(datadir, 'join_file.nc')
#New netCDF file
ncfile = addfile(outfn, 'c')
#Add dimensions
stn = 26564
recdim = ncfile.adddim('recNum', stn)
stdim = ncfile.adddim('station', stn)
iddim = ncfile.adddim('id_len', 11)
tdim = ncfile.adddim('time', 4)
#Add global attributes
ncfile.addgroupattr('Conventions', 'Unidata Observation Dataset v1.0')
ncfile.addgroupattr('cdm_datatype', 'Station')
ncfile.addgroupattr('geospatial_lat_max', '90.0')
ncfile.addgroupattr('geospatial_lat_min', '-90.0')
ncfile.addgroupattr('geospatial_lon_max', '180.0')
ncfile.addgroupattr('geospatial_lon_min', '-180.0')
ncfile.addgroupattr('stationDimension', 'station')
ncfile.addgroupattr('missing_value', -8.9999998E15)
ncfile.addgroupattr('stream_order_output', 1)
#Add variables
variables = []
var = ncfile.addvar('latitude', 'float', [stdim]) #Latitude
var.addattr('long_name', 'station latitude')
var.addattr('units', 'degrees_north')
variables.append(var)
var = ncfile.addvar('longitude', 'float', [stdim]) #Longitude
var.addattr('long_name', 'station longitude')
var.addattr('units', 'degrees_east')
variables.append(var)
var = ncfile.addvar('altitude', 'float', [stdim]) #Altitude
var.addattr('long_name', 'station altitude')
var.addattr('units', 'meters')
variables.append(var)
var = ncfile.addvar('streamflow', 'float', [tdim, stdim]) #Stream flow - Add time dimension
var.addattr('long_name', 'River Flow')
var.addattr('units', 'meter^3 / sec')
variables.append(var)
tvar = ncfile.addvar('time', 'int', [tdim])
tvar.addattr('long_name', 'time')
tvar.addattr('units', 'hours since 1900-01-01 00:00:0.0')
#Creat netCDF file
ncfile.create()
#Write data
stime = datetime.datetime(2015,8,2,0)
etime = datetime.datetime(2015,8,2,3)
st = datetime.datetime(1900,1,1)
fi = 0
while stime <= etime:
print stime
fn = os.path.join(datadir, stime.strftime('%Y%m%d%H') + '00.CHRTOUT_DOMAIN2')
if os.path.exists(fn):
print '\t' + fn
f = addfile(fn)
hours = (stime - st).total_seconds() // 3600
origin = [fi]
ncfile.write(tvar, array([hours]), origin=origin)
if fi == 0:
lat = f['latitude'][:]
ncfile.write(variables[0], lat)
lon = f['longitude'][:]
ncfile.write(variables[1], lon)
alt = f['altitude'][:]
ncfile.write(variables[2], alt)
flow = f['streamflow'][:]
origin = [fi, 0]
shape = [1, stn]
flow = flow.array.reshape(shape)
ncfile.write(variables[3], flow, origin=origin)
fi += 1
stime = stime + datetime.timedelta(hours=1) #close netCDF file
ncfile.flush()
ncfile.close() print 'Finished!'
对合并后的文件绘图:
f = addfile('D:/Temp/nc/join_file.nc')
lon = f['longitude'][:]
lat = f['latitude'][:]
var = f['streamflow']
flow = var[1,:]
axesm()
mlayer = shaperead('D:/Temp/Map/bou2_4p.shp')
geoshow(mlayer)
levs = arange(0, 0.1, 0.005)
layer = scatterm(lon, lat, flow, levs, edge=False)
colorbar(layer)
t = f.gettime(1)
title('River Flow (' + t.strftime('%Y-%m-%d %Hh)'))

MeteoInfoLab脚本示例:创建netCDF文件(合并文件)的更多相关文章
- MeteoInfoLab脚本示例:MODIS AOD
MODIS的气溶胶光学厚度(AOD)产品应用很广,数据可以在Giovanni上下载:http://disc.sci.gsfc.nasa.gov/giovanni/overview/index.html ...
- MeteoInfoLab脚本示例:加载图片和透明图层
MeteoInfoLab的georead函数提供了读取shape文件.image文件(JPG.PNG等,需要有相应的地理定位文件)文件生成图层的功能(事实上shaperead也是同样的功能,不过函数名 ...
- MeteoInfoLab脚本示例:计算垂直螺旋度
尝试编写MeteoInfoLab脚本计算垂直螺旋度,结果未经验证. 脚本程序: print 'Open data files...' f_uwnd = addfile('D:/Temp/nc/uwnd ...
- MeteoInfoLab脚本示例:闪电位置图
这个脚本示例读取文本格式的闪电数据,读出每条闪电记录的经纬度和强度,在地图上绘制出每个闪电的位置,并用符号和颜色区分强度正负.数据格式如下:0 2009-06-06 00:01:16.6195722 ...
- MeteoInfoLab脚本示例:FY-3C全球火点HDF数据
FY-3C全球火点HDF数据包含一个FIRES二维变量,第一维是火点数,第二维是一些属性,其中第3.4列分别是火点的纬度和经度.下面的脚本示例读出所有火点经纬度并绘图.脚本程序: #Add data ...
- MeteoInfoLab脚本示例:读取远程文件
利用Unidata netCDF Java库对远程文件的读取能力(OpenDAP, ADDE, THREDDS等),可以读取远程文件并绘图.脚本程序: fn = 'http://monsoondata ...
- MeteoInfoLab脚本示例:合并数组
对于全球数据来说,经度要么是-180 - 180,要么是0 - 360,都会存在边界数据不连续的问题.比如0 - 360的数据,怎么得到 -20 - 30度的连续格点数据就是个问题(跨越了数据的经度边 ...
- MeteoInfoLab脚本示例:Hamawari-8 netCDF data
示例数据:ftp://ftp.bom.gov.au/anon/sample/catalogue/Satellite/IDE00220.201507140300.nc 该数据的分辨率很高(22000*2 ...
- MeteoInfoLab脚本示例:Trajectory
示例读取HYSPLIT模式输出的气团轨迹数据文件,生成轨迹图层,并显示轨迹各节点的气压图.脚本程序: f = addfile_hytraj('D:/MyProgram/Distribution/jav ...
随机推荐
- 20190923-13Linux企业真实面试题 000 021
百度&考满分 问题:Linux常用命令 参考答案:find.df.tar.ps.top.netstat等.(尽量说一些高级命令) 瓜子二手车 问题:Linux查看内存.磁盘存储.io 读写.端 ...
- 《Head First 设计模式》:组合模式
正文 一.定义 组合模式允许你将对象合成树形结构来表现"整体/部分"层次结构.组合能让客户以一致的方式处理组合对象以及个体对象. 组合对象:包含其他组件的组件. 个体对象(叶节点对 ...
- 实践案例丨基于 Raft 协议的分布式数据库系统应用
摘要:简单介绍Raft协议的原理.以及存储节点(Pinetree)如何应用 Raft实现复制的一些工程实践经验. 1.引言 在华为分布式数据库的工程实践过程中,我们实现了一个计算存储分离. 底层存储基 ...
- JS中条件判断语句
用pycharm敲代码时,在.js文件中敲,敲完之后复制代码到浏览器的console中去回车执行 1.if( ){} 2.switch(a){} 3.for循环 循环列表 循环字典 循环字符串 另外 ...
- 第17课 - make 中的路径搜索(上)
第17课 - make 中的路径搜索(上) 1. 问题 在以往的 make 学习中,我们使用到的 .c 文件和 .h 文件都与 makefile 处在同一个路径.在实际的工程项目中,所有的源文件和头文 ...
- [Leetcode]585. 2016年的投资(MySQL)
题目 写一个查询语句,将 2016 年 (TIV_2016) 所有成功投资的金额加起来,保留 2 位小数. 对于一个投保人,他在 2016 年成功投资的条件是: 他在 2015 年的投保额 (TIV_ ...
- 升级微服务架构5:API网关
API网关是一个服务器,是系统的唯一入口.从面向对象设计的角度看,它与外观模式类似.API网关封装了系统内部架构,为每个客户端提供一个定制的API.它可能还具有其它职责,如身份验证.监控.负载均衡.缓 ...
- git个人常用命令
git https://www.cnblogs.com/chenwolong/p/GIT.html 添加当前目录的所有文件到暂存区 $ git add . 提交暂存区到仓库区 $ git commit ...
- java序列化与反序列化总结
很多商业项目用到数据库.内存映射文件和普通文件来完成项目中的序列化处理的需求,但是这些方法很少会依靠于Java序列化.本文也不是用来解释序列化的,而是一起来看看面试中有关序列化的问题,这些问题你很有可 ...
- 有向图的基本算法-Java实现
有向图 有向图同无向图的区别为每条边带有方向,表明从一个顶点至另一个顶点可达.有向图的算法多依赖深度搜索算法. 本文主要介绍有向图的基本算法,涉及图的表示.可达性.检测环.图的遍历.拓扑排序以及强连通 ...