arcgis api for flex 开发入门(九)webservices 的使用
发布时间:2020-12-15 04:18:27 所属栏目:百科 来源:网络整理
导读:flex 本身对webservices有着良好的支持,我们可以调用互联网上的各种 webservices来结合esri 的map 做出自己想要的东西 我们就拿现在比较流行的天气预报来做例子,我们要实现的目标就是通过 webservices查询到武汉的天气情况,然后使用infowindow 显示到esri
flex 本身对webservices有着良好的支持,我们可以调用互联网上的各种
webservices来结合esri 的map 做出自己想要的东西 我们就拿现在比较流行的天气预报来做例子,我们要实现的目标就是通过 webservices查询到武汉的天气情况,然后使用infowindow 显示到esri 的map上 ,在讲解过程中,我们会重点解释infowindow 的用法。 现在提供天气预报的webservices很多,我们选用 http://www.webxml.com.cn/WebServices/WeatherWebService.asmx ? 来进行天气的查询。 那么,在flex中如何使用webservices呢? 只要使用 <mx:WebService>标签创建一个WebService就可以了,id唯一标识这个 webservice,wsdl指向提供webservice的地址。 <mx:WebService id="weatherWS"? wsdl=" http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?WSDL "? showBusyCursor="true"/>? 我们直接在application 创建完成的时候调用这个 webservice,得到结果后直接 显示到map上 。 private function Init():void { ??weatherWS.addEventListener(ResultEvent.RESULT,? WSGetWeatherResult);? ? ?? ?? ?? ?weatherWS.getWeatherbyCityName("武汉"); } private function WSGetWeatherResult(event:ResultEvent):void ? ?? ?? ? { ? ?? ?? ???weatherWS.removeEventListener (ResultEvent.RESULT,WSGetWeatherResult); ? ?? ?? ???var arrC:ArrayCollection =event.result as? ArrayCollection; ? ?? ?? ???if(arrC.length > 0) ? ?? ?? ???{ ? ?? ?? ?? ? var str:String = arrC.getItemAt(0).toString(); ? ?? ???//? ???var infWd :InfoWindow = new InfoWindow(EsriMap); ? ?? ?? ?? ???var str2:String = arrC.getItemAt(1).toString(); ? ?? ?? ?? ? myMap.infoWindow.title= str+"."+str2;?? ? ?? ?? ?? ? var vbox :VBox = new VBox(); ? ?? ?? ?? ? var vbox2 :VBox = new VBox(); ? ?? ?? ?? ? var hbox :HBox = new HBox(); ? ?? ?? ?? ? var canvas:Canvas = new Canvas(); ? ?? ?? ?? ? var path:String = "assetsweather"; ? ?? ?? ?? ? var img1 :Image = new Image; ? ?? ?? ?? ? img1.load(path+arrC.getItemAt(8).toString()); ? ?? ?? ?? ? hbox.addChild(img1); ? ?? ?? ?? ? var img2 :Image = new Image; ? ?? ?? ?? ? img2.load(path+arrC.getItemAt(9).toString()); ? ?? ?? ?? ? hbox.addChild(img2); ? ?? ?? ?? ? ? ?? ?? ??? ? ?? ?? ?? ? var txtTem :Text = new Text(); ? ?? ?? ?? ? txtTem.text =??arrC.getItemAt(5).toString(); ? ?? ?? ?? ? var txtWea :Text = new Text(); ? ?? ?? ?? ? txtWea.text =??arrC.getItemAt(6).toString(); ? ?? ?? ?? ? var txtWind :Text = new Text(); ? ?? ?? ?? ? txtWind.text =??arrC.getItemAt(7).toString(); ? ?? ?? ?? ? vbox.addChild(txtTem); ? ?? ?? ?? ? vbox.addChild(txtWea); ? ?? ?? ?? ? vbox.addChild(txtWind); ? ?? ?? ?? ? vbox2.addChild(hbox); ? ?? ?? ?? ? vbox2.addChild(vbox); ? ?? ?? ?? ? canvas.addChild(vbox2); ? ?? ?? ?? ? myMap.infoWindow.content = canvas; ? ?? ?? ?? ? var mapPnt2:MapPoint = new MapPoint (114.1547298,30.5127677); ? ?? ?? ?? ? myMap.infoWindow.show(mapPnt2); ? ?? ?? ?? ? myMap.centerAt(mapPnt2);? ?? ?? ?? ?? ?? ?? ? ?? ? ?? ?? ???} ? ?? ?? ? } 设置infoWindow有两点需要注意,一是infoWindow不需要自己new一个,只需要把 你要显示的内容赋值给myMap.infoWindow,二是显示的时候只需要调用 myMap.infoWindow.show(mapPnt2);就可以了,把你想显示的位置告诉他。 完整代码:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" pageTitle="Service Area" xmlns:esri="http://www.esri.com/2008/ags" layout="absolute" creationComplete="Init()" > <mx:Script> <![CDATA[ import mx.containers.HBox; import mx.containers.VBox; import mx.controls.Image; import mx.rpc.events.ResultEvent; //导入flash的命名空间 import mx.collections.ArrayCollection; import mx.controls.Alert; import mx.controls.Button; import mx.rpc.AsyncResponder; import flash.geom.Point; import mx.rpc.events.FaultEvent; import mx.printing.FlexPrintJobScaleType; import mx.printing.FlexPrintJob; import mx.rpc.soap.mxml.Operation; import mx.containers.Canvas; import flash.text.*; import mx.controls.Text; //导入esri flex api import com.esri.ags.geometry.MapPoint; import com.esri.ags.Graphic; import com.esri.ags.events.DrawEvent; import com.esri.ags.events.ExtentEvent; import com.esri.ags.SpatialReference; import com.esri.ags.layers.GraphicsLayer; import com.esri.ags.*; import com.esri.ags.InfoWindow; import com.esri.ags.InfoTemplate; private function Init():void { weatherWS.addEventListener(ResultEvent.RESULT,WSGetWeatherResult); weatherWS.getWeatherbyCityName("武汉"); } private function WSGetWeatherResult (event:ResultEvent):void { weatherWS.removeEventListener (ResultEvent.RESULT,WSGetWeatherResult); var arrC:ArrayCollection =event.result as ArrayCollection; if(arrC.length > 0) { var str:String = arrC.getItemAt(0).toString(); // var infWd :InfoWindow = new InfoWindow(EsriMap); var str2:String = arrC.getItemAt(1).toString(); myMap.infoWindow.title= str+"."+str2; var vbox :VBox = new VBox(); var vbox2 :VBox = new VBox(); var hbox :HBox = new HBox(); var canvas:Canvas = new Canvas(); var path:String = "assetsweather"; var img1 :Image = new Image; img1.load(path+arrC.getItemAt(8).toString()); hbox.addChild(img1); var img2 :Image = new Image; img2.load(path+arrC.getItemAt(9).toString()); hbox.addChild(img2); var txtTem :Text = new Text(); txtTem.text = arrC.getItemAt(5).toString(); var txtWea :Text = new Text(); txtWea.text = arrC.getItemAt(6).toString(); var txtWind :Text = new Text(); txtWind.text = arrC.getItemAt(7).toString(); vbox.addChild(txtTem); vbox.addChild(txtWea); vbox.addChild(txtWind); vbox2.addChild(hbox); vbox2.addChild(vbox); canvas.addChild(vbox2); myMap.infoWindow.content = canvas; var mapPnt2:MapPoint = new MapPoint (114.1547298,30.5127677); myMap.infoWindow.show(mapPnt2); myMap.centerAt(mapPnt2); } } ]]> </mx:Script> <esri:Map id="myMap" openHandCursorVisible="false"> <esri:extent> <esri:Extent xmin="113" ymin="30" xmax="115" ymax="32"/> </esri:extent> <esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap _World_2D/MapServer"/> </esri:Map> <mx:WebService id="weatherWS" wsdl="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?WSDL" showBusyCursor="true"/> </mx:Application> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |