http://www.gissky.net- GIS空间站

我要投稿 投稿指南 RSS订阅 网站资讯通告:
搜索: 您现在的位置: GIS空间站 >> 技术专栏 >> ArcGIS >> ArcGIS Server >> 正文

ArcGIS API for Flex入门

作者:warrenwy…    文章来源:warrenwyf    点击数:    更新时间:2009-12-21
摘要:ArcGIS最新推出了Flex API,主要面向基于ArcGIS Server 的RIA开发。RIA近来越来越火热,Flex/Flash在RIA领域又是绝对的翘楚,ArcGIS在这个时候推出Flex API实在是太理所当然了。如果你还不太了解Flex,那么你可能会知道Adobe公司的Flash。作为现在主要浏览器均支持的一个必备插件,Flash占据了Web浏览98%的市场份额。Flash可以整合图片、音频、视频、矢量图画、动画等各种资源,并提供良好的交互,因此在浏览器上可以提供给用户非常良好的体验。这就是Flash流行的原因。



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 rawEvent):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] [2] [3] [4] [5] [6] [7] 下一页

Tags:ArcGIS,API,Flex  
责任编辑:gissky
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 中国地图