加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ArcGIS API for Flex实现的实时监控功能

发布时间:2020-12-15 04:15:10 所属栏目:百科 来源:网络整理
导读:在项目中涉及到一个实时监控功能,需求是:在一个地图服务中,有一个测站图层,这些测站是一些水位或者雨量测站。测站会定时的获取河流的水情信息,然后发送到数据中心, 所以在系统中也需要定时的去获取每个测站的最新信息,然后直观的体现在地图上面。 思


在项目中涉及到一个实时监控功能,需求是:在一个地图服务中,有一个测站图层,这些测站是一些水位或者雨量测站。测站会定时的获取河流的水情信息,然后发送到数据中心, 所以在系统中也需要定时的去获取每个测站的最新信息,然后直观的体现在地图上面。

思路是:???1.首先在地图加载完成后,获取测站图层里所有测站的编号和位置保存到数组中。

????? 2.测站编号获取完成后,通过WebService从数据库中获取所以测站的实时信息,信息保存在ArrayCollection中,并在之后定时去获取。

????? 3.根据测站编号在两个数组中进行匹配,然后用InfoSymbol显示相关信息

先看看效果图~

下面是完整的代码

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"??? layout="absolute" xmlns:esri="http://www.esri.com/2008/ags" xmlns:ns1="uc.*">
??? <mx:Script>
??????? <![CDATA[
??????????? import uc.MyLabel;
??????????? import com.esri.ags.symbol.InfoSymbol;
??????????? import com.esri.ags.events.LayerEvent;
??????????? import com.esri.ags.symbol.TextSymbol;
??????????? import com.esri.ags.SpatialReference;
??????????? import mx.collections.ArrayCollection;
??????????? import mx.rpc.events.FaultEvent;
??????????? import mx.rpc.events.ResultEvent;
??????????? import com.esri.ags.geometry.MapPoint;
??????????? import com.esri.ags.geometry.Geometry;
??????????? import mx.controls.Alert;
??????????? import com.esri.ags.Graphic;
??????????? import mx.rpc.AsyncResponder;
??????????? import com.esri.ags.tasks.FeatureSet;
??????????? [Bindable]
??????????? public???? var information:String=new String();
??????????? var resultlist:Array=new Array();
??????????? var stationInforArr:ArrayCollection=new ArrayCollection();
??????????? private var timer:Timer;
??????????? //定时十分钟获取一次
??????????? private var interval:uint = 600000;

??????? private function initApp():void
??????? {
??????????? timer = new Timer(interval);
??????????? timer.addEventListener(TimerEvent.TIMER,getData);
??????????? timer.start();
??????? }
??????? function getData(event:TimerEvent):void
??????? {
??????????? RealInforService.GetStationRealInformation.send();
??????? }

????????? //地图加载完成后获取测站信息
??????????? function onComplete(event:LayerEvent):void
??????????? {
??????????????? queryTask.url="http://sps-010/ArcGIS/rest/services/cezhan/MapServer/2";
??????????????? query.where="STNM <>''";?????????????? //查询出所有测站
??????????????? //查询结果是否返回Geometry
???????????????? query.returnGeometry=true;
??????????????? query.spatialRelationship="esriSpatialRelEnvelopeIntersects";
??????????????? //设置要查询的字段
??????????????? var fields:Array=new Array();
??????????????? fields.push("FID");
????????????????? fields.push("STCD");
??????????????? fields.push("STNM");
??????????????? fields.push("pinyin");
??????????????? //fields.push("POP2000");
??????????????? query.outFields=fields;
??????????????? //进行查询成功调用onResult方法,错误失败调用onFault
??????????????? queryTask.execute(query,new AsyncResponder(onResult,onFault));
??????????? }
??????????? private function onResult(featureSet:FeatureSet,token:Object = null):void
??????????? {
??????????????? var geo:Geometry;
??????????????? for each(var griphic:Graphic in featureSet.features)
??????????????? {
??????????????????? myGraphicsLayer.add(griphic);
??????????????????? geo= griphic.geometry;
?????????????????? switch(geo.type)
?????????????????? {
?????????????????????? case Geometry.MAPPOINT:
??????????????????????????????? //转成MapPoint
??????????????????????????? var pnt :MapPoint = geo as MapPoint ;
??????????????????????????????? resultlist.push({"编号":griphic.attributes.STCD,"名称":griphic.attributes.STNM,"位置":pnt});
?????????????????? }
??????????????? }

????????????? //激活计时器
??????????????? initApp();

???????????????? //获取实时信息
????????????????? RealInforService.GetStationRealInformation.send();
??????????? }
??????????? //查询失败提示
??????????? private function onFault(info:Object,token:Object = null ):void
??????????? {
??????????????? Alert.show("输入的查询语句不正确!");
??????????? }

//根据测站编号进行匹配
??????????? function onSuccess(event:ResultEvent):void
??????????? {
??????????????? stationInforArr=event.result.Tables.ds.Rows;
??????????????? if(stationInforArr.length>0&&resultlist.length>0)
??????????????? {
??????????????????? var i:int;
??????????????????? var j:int;
??????????????????? for(i=0;i<resultlist.length;i++)
??????????????????? {
??????????????????????? for(j=0;j<stationInforArr.length;j++)
??????????????????????? {
??????????????????????????? if(resultlist[i].编号==stationInforArr[j].STCD)
??????????????????????????? {
??????????????????????????????? if(stationInforArr[j].STTP=="PP")
??????????????????????????????? {
??????????????????????????????????? information="雨量测站("+stationInforArr[j].STNM+")n"+"日降雨量:"+stationInforArr[j].DRP+"n实时水位:"+stationInforArr[j].Z+"n警戒水位:"+stationInforArr[j].WRZ;
??????????????????????????????? }else if(stationInforArr[j].STTP=="ZZ")
??????????????????????????????? {
??????????????????????????????????? information="水位测站("+stationInforArr[j].STNM+")n"+"日降雨量:"+stationInforArr[j].DRP+"n实时水位:"+stationInforArr[j].Z+"n警戒水位:"+stationInforArr[j].WRZ;
??????????????????????????????? }
??????????????????????????? var infoSymbol:InfoSymbol = new InfoSymbol();????
??????????????????????????? var infoSymbolFactory:ClassFactory = new ClassFactory(MyLabel);
??????????????????????????? infoSymbolFactory.properties={htmlText:information};
??????????????????????????? infoSymbol.infoRenderer=infoSymbolFactory;
??????????????????????????? //new TextSymbol(information,null,0x0000FF)
??????????????????????????? var myGraphic:Graphic = new Graphic(new MapPoint(resultlist[i].位置.x,resultlist[i].位置.y),infoSymbol);
??????????????????????????? myGraphicsLayer.add(myGraphic);
??????????????????????????? }
??????????????????????? }
??????????????????? }
??????????????? }
??????????? }
??????????? function onStationFault(event:FaultEvent):void
??????????? {
??????????????? Alert.show("出错了!");
??????????? }
??????????? function initInformation(event:Event):void
??????????? {
??????????? }
??????? ]]>
??? </mx:Script>
??? <mx:WebService id="RealInforService" wsdl="../WebService.asmx?WSDL">
??? <mx:operation name="GetStationRealInformation" result="onSuccess(event)" fault="onStationFault(event)">
??? </mx:operation>
??? </mx:WebService>
??? <esri:QueryTask id="queryTask">
??? </esri:QueryTask>
??? <esri:Query id="query"/>

??? <esri:Map x="0" y="0">
??????? <esri:ArcGISDynamicMapServiceLayer load="onComplete(event)"?? url="http://sps-010/ArcGIS/rest/services/cezhan/MapServer"/>
??????? <esri:GraphicsLayer id="myGraphicsLayer">

??????? </esri:GraphicsLayer>
??? </esri:Map>

</mx:Application>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读