在gis系统中往往需要在一个时间间隔内把图形动态播放出来,比如2000年到现在地震变化啊,海啸的变化,在flex中这种展现方式需要后台rest服务相结合,要建立有时间点的图层,arcgis发布要选timeinfo属性,如果我们不用后台,数据格式是json或者xml形式应该怎么做呢,在flex中还有帧动画这个东东,在javascript应该怎么写呢,因为这个表现形式要以数据做支持,而且要在一个地图底图上叠加不断展现,现有javascript动画库是用不上了,很多都是css动画和canvas(html5)的,但是可以用settime这个函数展示这种变化,比如说某某月到某某月热点图的变化。写了一个热点图时间描述。
1 /** 2 * Created by haibalai on 2015/9/29. 3 */ 4 var HeatLayerAnimate = function() 5 { 6 7 var heatLayerManager; 8 9 var ajaxTool; 10 11 var queryVo = new QueryVO(); 12 13 //设置时间间隔 14 var timeinterval = 5000; 15 16 var isStopFlag = false; 17 18 this.init = function(heatLayerManager1) 19 { 20 heatLayerManager = heatLayerManager1; 21 ajaxTool = new AjaxTool(); 22 23 } 24 25 /** 26 * 添加某个时间段的分色 27 * @param queryVO 28 * @param polygon 29 */ 30 this.addAnimate = function(queryVO1,polygon) 31 { 32 queryVo = queryVO1; 33 heatLayerManager.addRenderCallBack(queryVO1,polygon,ajaxquery); 34 } 35 36 37 38 function ajaxquery(param) 39 { 40 param.startDate = queryVo.startDate; 41 param.endDate = queryVo.endDate; 42 param.layerName= queryVo.layerName; 43 param.tjfs = queryVo.tjfs; 44 var str = JSON.stringify(param); 45 46 //--------------------------------------测试环境用 47 ajaxTool.getTimeHeatData1(str,ajaxBack); 48 //------------------------------------- 49 50 51 //--------------------------------------真实环境用 52 //ajaxTool.getTimeHeatData(str,ajaxBack); 53 //------------------------------------- 54 } 55 56 var i = 0; 57 var len = 0; 58 var num1 = 0.01; 59 var obj; 60 61 function ajaxBack(obj1) 62 { 63 num1 = 0.01; 64 len = obj1.dataarr.length; 65 i = 0; 66 obj = obj1; 67 68 setRender(i); 69 70 } 71 72 function setRender(i) 73 { 74 if(i < len) 75 { 76 if(isStopFlag == false) 77 { 78 setTimeout(function() 79 { 80 var codeobj = obj.dataarr[i]; 81 renderplay(codeobj,i,setRender); 82 },timeinterval); 83 } 84 85 } 86 87 } 88 89 function renderplay(codeobj,i,callback) 90 { 91 if(isStopFlag == false) 92 { 93 heatLayerManager.ajaxBackFun(codeobj,num1); 94 // -----------------------------------num1 这一段是我测试用的 95 num1 = num1 + 0.05; 96 //-------------------------------------------------------- 97 i++; 98 callback(i); 99 } 100 101 } 102 103 /** 104 * 停止动画 105 */ 106 this.stopRender = function() 107 { 108 isStopFlag = true; 109 } 110 111 /** 112 * 动画再生 113 */ 114 this.resumeRender = function() 115 { 116 isStopFlag = false; 117 setRender(i); 118 } 119 120 121 122 }