IDL遥感应用入门(15):使用IDL生成动画(XINTERANIMATE)
在使用IDL处理数据的时候,通常情况下会涉及时间序列的数据,例如风速,每个月的风速,每天的风速,每三天的风速等等,面对这样的时间序列数据,我们可以利用时间的连续性做一个数据的动态分析,这就用到了IDL的动画功能。
数据说明
本次使用的数据还是之前IDL遥感应用入门(14):IDL读取netcdf数据(.nc)中所共享的数据,这里的数据其实可以是任意的数据,不同的数据使用不同的方法去读就行。全部测试数据可以从这里下载。
全部代码
;Author:Sailor
;2014-01-16
PRO Course_13
;定义文件路径
MyRootDir='D:\10\'
;加载色表
device,decomposed=0
loadct,39
;遍历文件夹
filearr = file_search(MyRootDir,'*.nc',count=num)
sstdisplay=intarr(4096,2048,num)
FOR fileindex=0,num-1,1 DO BEGIN
nid = ncdf_open(filearr[fileindex], /nowrite )
; inquire about this file; returns structure
file_info = ncdf_inquire(nid)
; print out the dimensions of this file
FOR dimid=0, file_info.ndims -1 DO BEGIN
ncdf_diminq, nid, dimid, name, size
print, ' ---> dimension ' + name + ' is: ', size
ENDFOR
FOR varid=0, file_info.nvars-1 DO BEGIN
; inquire about the variable; returns structure
var = ncdf_varinq( nid, varid )
print,var
print,'========================'
;read all attributes
FOR var_att_id=0,var.natts -1 DO BEGIN
att_name = ncdf_attname( nid, varid, var_att_id )
print,att_name
ncdf_attget, nid, varid, att_name, tematt
print,string(tematt)
ENDFOR
ENDFOR
;read sst
sstid = ncdf_varid(nid, 'analysed_sst')
ncdf_varget, nid, sstid, sst
sst=sst*0.01
print,size(sst)
landindex=where(sst eq min(sst))
sst[landindex]=min(sst)-1
print,max(sst),min(sst)
sst=bytscl(sst,min=-2,max=34,top=255)
sst=shift(sst,2048)
sstdisplay[*,*,fileindex]=sst
ENDFOR
;动画演示
sstdisplay= REBIN(sstdisplay, 1024, 512, num)
XINTERANIMATE, SET=[1024, 512, num], /SHOWLOAD
FOR i=0,num-1 DO begin
XINTERANIMATE, FRAME =i,IMAGE = sstdisplay[*,*,i]
endfor
XINTERANIMATE,5,/KEEP_PIXMAPS
END
效果图
代码说明
这里的内容跟IDL遥感应用入门(14):IDL读取netcdf数据(.nc)的数据处理是一致的,所以这里不再赘述,这里只说相对于教程14改变的内容。
在本次代码中将教程14的数据做了一个偏移,是起点的经度是0度,具体的偏转方法可以看利用IDL中的SHIFT函数实现经度翻转,如果你的数据出现了顶底倒置,你可以按照这篇文章:利用IDL中的REVERSE函数实现纬度反转的方法设置。
;动画演示
sstdisplay= REBIN(sstdisplay, 1024, 512, num)
XINTERANIMATE, SET=[1024, 512, num], /SHOWLOAD
FOR i=0,num-1 DO begin
XINTERANIMATE, FRAME =i,IMAGE = sstdisplay[*,*,i]
endfor
XINTERANIMATE,5,/KEEP_PIXMAPS
这是利用IDL实现动画演示的关键代码,这里主要用到XINTERANIMATE这个函数,可以看出,这里调用了3次XINTERANIMATE函数。
第一次设置图像的大小和帧数
第二次设置每次展现的帧
第三次播放动画
一些缺点
采用这个方法绘图,有一个缺点是尽管可以展示出整个图像的动态变化特征,但是没有色标和经纬度标记,这样使得图的表达能力下降。
另外,如果作为读者的你有什么其他方法,欢迎留言或者投稿。
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。
你好,非常感谢您的代码分享。
我直接copy代码运行时报语法错误,
XINTERANIMATE,FRAME=i,IMAGE=sstdisplay[,,i]
请问是什么原因呢?谢谢
你好,非常抱歉,是我这边代码转义出了问题,现在修改了一个,你试试行不行?
哈哈,非常棒,现在通了,谢谢。