2008年10月15日星期三

ArcGIS API for Flex入门 - 5.任务Task

Task是ArcGIS Server的重要组成部分,一个Task可以执行某些特定的任务,比如Identify、Query等等。在这个小节,我们通过IdentifyTask来认识Task的使用方法。

IdentifyTask是一个可以识别要素的任务,让我们打开Sample的“IdentifySample.mxml”,看一下其中核心的代码。

我们首先注意一下在Flex Application中添加了这样一个IdentifyTask的标签:

我们设想的功能大概是这样的:先在地图上画一个多边形,然后识别多边形内的所有要素,最后在图上标注出来。让我们看一下这个功能在Flex中是如何通过Task执行完成的:

首先是绘图,我首先需要在地图上画一个多边形,在ArcGIS API for Flex中有一个提供绘图的工具条com.esri.ags.toolbars.Draw,通过它我们可以很轻松地实现绘图功能:
如上所示,IdentifySample在Draw对象上添加一个事件监听器,当绘图完成时,执行drawEndHandler()方法,在这个方法中,我们将继续绘图以后的工作。

在已经绘制了一个多边形以后,我们就需要执行IdentifyTask来进行要素识别了。先看一下代码:
private function drawEndHandler(event:DrawEvent):void
{
var geometry : Geometry = event.geometry;

var identifyParams : IdentifyParameters = new IdentifyParameters();
identifyParams.returnGeometry = true;
identifyParams.tolerance = 3;
identifyParams.width = 600;
identifyParams.height = 550;
identifyParams.geometry = geometry;
switch (layerOption.value)
{
case "top":
identifyParams.layerOption = IdentifyParameters.LAYER_OPTION_TOP;
break;
case "visible":
identifyParams.layerOption = IdentifyParameters.LAYER_OPTION_VISIBLE;
break;
case "all":
identifyParams.layerOption = IdentifyParameters.LAYER_OPTION_ALL;
break;
}
identifyParams.mapExtent = map.extent;

identifyTask.execute( identifyParams );
}

在DrawEvent对象中,我们可以获取刚才绘图的Geometry对象,这个Geometry对象用于Identify的参数设置中,如果你做过ArcEngine开发,你可以对比一下SpatialFilter。好,再设置了一下需要搜索的图层和范围以后,你就可以执行这个IdentifyTask了,看到execute是不是很兴奋?

然后呢?我们回头看看这个IdentifyTask的定义,其中注册了当Task完成时候执行的方法:identifyCompleteHandler()。
private function identifyCompleteHandler(event:IdentifyEvent):void
{
for each (var result:IdentifyResult in event.identifyResults)
{
myGraphicsLayer.add(result.feature);
}
}
看明白了么?这个方法就是在GraphicLayer上把这个Task的结果画出来。

通过这个流程,你应该明白了Task的作用和用法了吧。

上一节 下一节

1 条评论:

匿名 说...

你那么年轻啊,技术怎么那么强呢??