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函数。

第一次设置图像的大小和帧数
第二次设置每次展现的帧
第三次播放动画

一些缺点

采用这个方法绘图,有一个缺点是尽管可以展示出整个图像的动态变化特征,但是没有色标和经纬度标记,这样使得图的表达能力下降。

另外,如果作为读者的你有什么其他方法,欢迎留言或者投稿。

利用IDL的REFORM函数给数组降维数 IDL中的函数和过程

作者:,GIS爱好者。
分享本文,请您带上本文链接
分享到:

已有 3 条评论

  1. lucky_xrg
    1#
    lucky_xrg  · 2016-01-19 11:28

    你好,非常感谢您的代码分享。
    我直接copy代码运行时报语法错误,
    XINTERANIMATE,FRAME=i,IMAGE=sstdisplay[,,i]
    请问是什么原因呢?谢谢

      1. Sailor
        Sailor  · 2016-01-19 14:30

        你好,非常抱歉,是我这边代码转义出了问题,现在修改了一个,你试试行不行?

          1. lucky_xrg
            lucky_xrg  · 2016-01-19 14:42

            哈哈,非常棒,现在通了,谢谢。

发表评论