您的位置:首页 > 其它

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

2009-06-02 15:04 447 查看
arcgis api for flex 开发入门(九)webservices 的使用
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>
原文地址:http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=35702&extra=page%3D3%26amp%3Borderby%3Ddateline
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: