||
昨天在HYSPLIT的论坛上看到一个帖子说以前老版本HYSPLIT输出的浓度数据新版本读不了,目前维护HYSPLIT模式的科学家Arial Stein回帖说应该是数据被破坏了。我下载了有问题的示例数据文件,大致看了看,感觉可能是字节顺序的问题,HYSPLIT输出的浓度数据是二进制的自定义格式文件,规定是big endian,但老版本也可能输出little endian的数据。通过修改MeteoInfoLib中读取HYSPLIT浓度数据的代码(之前只能读big endian的数据)进行了简单的测试,基本确定是little endian的问题。因此在HYSPLITConcDataInfo类中增加了byteOrder变量,可以事先确定byteOrder为ByteOrder.BIG_ENDIAN或ByteOrder.LITTLE_ENDIAN,在数据解码过程中根据byteOrder读取相应数据。这样就可以正确读取little endian的数据了。
正常的HYSPLIT浓度数据读取绘图代码:
fn = 'D:/Temp/HYSPLIT/cdump'
f = addfile_hyconc(fn)
data = f['TEST'][0,0,:,:]
axesm()
lworld = shaperead('D:/Temp/Map/country1.shp')
geoshow(lworld)
layer = imshowm(data)
colorbar(layer)
对于little endian的浓度数据在addfile_hyconc函数中要添加big_endian参数为False:
fn = 'D:/Temp/HYSPLIT/cdump.t00z'
f = addfile_hyconc(fn, big_endian=False)
data = f['SO2'][25,0,:,:]
axesm()
lworld = shaperead('D:/Temp/Map/country1.shp')
geoshow(lworld, edgecolor='k')
levs = arange(0.2, 10, 0.2)
layer = imshowm(data, levs, cmap='WhBlGrYeRe')
colorbar(layer)
xlim(-161, -154)
ylim(17, 21)
title('HYSPLIT concentration data with little endian')
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-23 10:14
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社