麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

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

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

一些缺点

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

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

相关阅读

麻辣GIS-Sailor

作者:

GIS爱好者,学GIS,更爱玩GIS。

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子

已有 3 条评论

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

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

      1. 麻辣GIS-Sailor
        Sailor  · 2016-01-19 14:30

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

          1. 麻辣GIS-lucky_xrg
            lucky_xrg  · 2016-01-19 14:42

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

留言板(小编看到第一时间回复) 取消回复