您的位置:首页 > 其它

关于ArcGIS For Flex查询并返回结果

2013-01-17 22:30 330 查看

前两天看了关于ArcGIS For Flex的资料,今天学着esri中的例子做了一个查看属性并缩放至结果的例子。

先建立一个地图和缩放的范围,然后添加控件,这里一个label,一个button还有一个textInput用于输入查询的条件,这些准备工作做好之后。

我们需要在Declarations中声明一个QueryTask,url就是服务的地址,最后的/5表示查找的图层。接下来还需要声明一个query,其中有几个参数需要注意一些,text就是查询的条件,也就是查询textInput的值,returnGeometry指是否返回图形,而outFields指的就是返回结果的属性字段,outSpatialReference则表示返回结果的地理参考。下来就是需要在ActionScript中加入代码,首先需要添加一个doQuery函数,querytask.execute(query,new AsyncResponder(onResult,faultResult))表示查询任务执行中需要的几个参数,第一个就是之前声明的查询条件,第二个表示查询同步相应的一个类,它有两个参数,它们都是函数:一个resulthandler,一个 faulthandler。即正常响应函数,另一个就是错误响应函数。在正常响应函数中我先是声明一个extent来取得当前的一个显示范围,可以将这个范围赋给map,从而缩放至结果。另一方面,需要将查询到的图形在数据集中遍历,并添加至graphicslayer中,这是客户端的一个图层,将服务器返回的结果加载到上边。onResult函数写好之后需要完成fault函数,这里写的很简单,就是讲错误字符串显示。这些完成后,需要在button中添加click事件,响应函数就是之前的doQuery函数。我还将查询到属性放到了一个datagrid中,其dataProvider="{querytask.executeLastResult.attributes}",这里需要注意的是querytask.executeLastResult下边可以选择attributes,在查询中同样可以得到features。完整代码如下:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:esri="http://www.esri.com/2008/ags">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
<esri:QueryTask id="querytask" url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/5" />
<esri:Query id="query" text="{qtext.text}" returnGeometry="true"  outFields="[STATE_NAME,POP2007]" outSpatialReference="{spatialreference}"/>
</fx:Declarations>
<fx:Script>
<![CDATA[
import com.esri.ags.FeatureSet;
import com.esri.ags.Graphic;
import com.esri.ags.geometry.Extent;
import com.esri.ags.utils.GraphicUtil;

import mx.controls.Alert;
import mx.rpc.AsyncResponder;
private  function doQuery():void
{
querytask.execute(query,new AsyncResponder(onResult,faultResult));
}
private function onResult(featureset:FeatureSet,toke:Object=null):void
{
var graphicextent:Extent=GraphicUtil.getGraphicsExtent(featureset.features);
for each(var graphic:Graphic in featureset.features)
{
graphicslayer.add(graphic);
mymap.extent=graphicextent;
}
}
private function faultResult(info:Object,token:Object=null):void
{
Alert.show(info.toString());
}
]]>
</fx:Script>
<esri:Map id="mymap" >
<esri:extent>
<esri:Extent xmin="-14298000" ymin="2748000" xmax="-6815000" ymax="7117000">
<esri:SpatialReference id="spatialreference" wkid="102100"/>
</esri:Extent>
</esri:extent>
<esri:ArcGISTiledMapServiceLayer  url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Physical_Map/MapServer"/>
<esri:GraphicsLayer id="graphicslayer" />
</esri:Map>
<mx:Label x="393" y="10" text="输入要查询条件"/>
<mx:TextInput id="qtext" x="358" y="37" width="106" height="20"/>
<mx:Button id="Query" label="查询" x="494" y="37" height="20" click="doQuery()"/>
<mx:DataGrid x="667" y="34" dataProvider="{querytask.executeLastResult.attributes}"/>
</s:Application>

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: