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入门 - 6.有多少Task可以重来

上一小节我们了解了FlexAPI中的Task用法,你可以把Task想象成一条命令,当你把命令发送到服务器的时候,服务器会执行并返回给你结果——当然,前提是要服务器提供这个服务。上一节的例子是IdentifyTask,其它的Task大抵也可以触类旁通。可是,API的Task包的命名因为不同Task的功能不同而并不很一致,有些Task的名称并不是以Task结尾,同时,并不是所有的Task都可以execute。所以,我们在这一小节重点讨论一下各种Task的作用和用法。

1.FindTask
这是一个很简洁的Task,它的功能主要是通过关键字来搜索要素的某些字段,如果符合则返回查找到的要素。你可以参考Sample的“FindTask.mxml”,下面是对Task定义的一些代码:
我们似乎已经可以摸到Task的一般套路,先生成一个参数对象,对这个Task需要完成的任务进行一些设定,然后将Task与这些参数联系起来,最后执行等待服务器返回处理结果。这个FindTask就是这样,简洁明了。

2.GeometryService
这是对几何对象进行处理的一个Task,可是它是以Service结尾,这代表它并不简单地给你execute一下的,它提供了处理多种任务的能力。比如缓冲(buffer)、量测(lengths)等等。让我们打开Sample的“BufferSample.mxml”看看,这是一个缓冲的例子。

我们可以看到,处理的过程和其它Task也没什么区别,只不过没有了execute(有你也不知道到底执行什么命令),取代它的是明确的任务名称,比如要进行缓冲,那就是用buffer方法:
myGeometryService.buffer( bufferParameters );

好,那么随之而来的一个问题就是执行完了怎么办,怎么区分不同命令返回的结果?事实上,你只要监听不同的时间好了,比如你执行buffer命令,那么你就监听BUFFER_COMPLETE事件(mxml中:bufferComplete="..."),好了,只要你的方法监听到这个事件,你就可以在buffer完成后进行后续的处理了。

3.Geoprocessor
这是GP服务对应的Task。GP服务很灵活,因此你在设置Geoprocessor任务参数(Object对象)的时候,需要给予更多的注意。在用法上它并没有很多新意,具体可以参考一下Sample的“GeoprocessorMessageInABottle.mxml”。

4.IdentifyTask
识别要素,老朋友了,具体参考上一节。

5.Locator
从地址获得要素或者从要素获得地址的Task。让我们打开Sample的“LocatorTask.mxml”看一下,下面是执行命令的代码:
locateTask.addressToLocations(addy, null, new AsyncResponder(onResult, onFault));

Locator主要提供两个命令:addressToLocations()和locationToAddress()。它的参数也是Object对象,因此提供了灵活的参数设置和更多出错的机会。

6.QueryTask
查询要素。FindTask是搜索某些字段文本的命令,而QueryTask则提供了文本查询和空间查询的能力。sample中的“QueryTaskOnMap.mxml”是一个文本查询的例子。让我们对它进行一些修改以进行空间查询:

执行查询的命令是queryTask.execute( query, new AsyncResponder( onResult, onFault ));
让我们在它之前加上:
                query.geometry = map.extent;
                query.spatialRelationship = Query.SPATIAL_REL_INTERSECTS;

上面的map是Map组件的id(自己添加),同时,把query原先定义的text属性删除。让我们运行以后再点击查询,拖动一下地图,是不是看到只有原先视口中的要素被高亮了出来?这就是空间查询的结果,因为上面执行的查询是以当前地图范围为过滤条件的。

上一页  [1] [2] [3] [4] [5] [6] [7] 下一页

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