2008年10月16日星期四

ArcGIS API for Flex入门 - 6.有多少Task可以重来

上一小节我们了解了Flex API中的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属性删除。让我们运行以后再点击查询,拖动一下地图,是不是看到只有原先视口中的要素被高亮了出来?这就是空间查询的结果,因为上面执行的查询是以当前地图范围为过滤条件的。


上一节 下一节

没有评论: