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 ...
随机推荐
- 20190925-02配置redis服务在后台启动 000 023
多端口要加 -p 可以进入指定端口
- Docker Compose 搭建 Redis Cluster 集群环境
在前文<Docker 搭建 Redis Cluster 集群环境>中我已经教过大家如何搭建了,本文使用 Docker Compose 再带大家搭建一遍,其目的主要是为了让大家感受 Dock ...
- jenkins iOS自动打包
1.Jenkins配置 采用命令行下载配置Jenkins,防止产生权限问题 1)先安装brew,打开命令行,输入:/usr/bin/ruby -e "$(curl -fsSL https:/ ...
- Charles 抓包(Charles二)
前面安装了Charles,并初步配置了一下:https://blog.csdn.net/qq_38175040/article/details/105411407 今天开始正式抓包了 但过程却不是很顺 ...
- oracle之二控制文件
控制文件 3.1 控制文件的功能和特点: 1)定义数据库当前物理状态,不断在往controlfile写入[SCN等] 2)维护数据的一致性 3)是一个二进制文件 ...
- Java反序列漏洞
序列化:WriteObject 反序列化:readObject() Jd-gui.exe 最简单的打开java文件方式 Intellij idea 编辑工具 演示案例: WebGoat_Javaweb ...
- 乔悟空-CTF-i春秋-Web-Not Found-🙋🏻♂️
2020.09.08 又是匆匆忙忙的一天- 做题 题目 题目地址 做题 做题??做个屁,啥也不知道,干瞪眼
- 原来写插件还可以选MEF
MEF是微软提供的一个轻量级的ICO容器,可以轻易的解除程序集的依赖关系,最近想写个类似插件试的软件所以搜索了一下,终于淘到宝了. 下面我们看看MEF是如何解耦的 新建一个控制台项目两个类库 Ites ...
- Oracle数据库sqlldr工具的使用
sqlldr导入文本内容到数据库表时,需要指定一个ctl文件(控制文件),通过该文件来完成数据的导入. 1 首先创建一个表student create table student( stu_id nu ...
- elasticsearch 索引清理脚本及常用命令
elastic索引日志清理不及时,很容易产生磁盘紧张,官网给出curl -k -XDELETE可以清理不需要的索引日志. 清理脚本 #!/bin/bash #Author: 648403020@qq. ...