arcgis api for flex 开发入门(九)webservices 的使用

来源:互联网 发布:java如何判断文件大小 编辑:程序博客网 时间:2024/04/24 05:05
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 = "assets\\weather\\";
             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 = "assets\\weather\\";             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>


原创粉丝点击