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

前两天看了关于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>

 

 

转载于:https://www.cnblogs.com/GISForFlex/archive/2013/01/17/query.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值