arcgis api for flex 开发入门(五)查询

简介:
在gis中,针对要素的查询是一个最基本的操作,也是最常用的操作之一。
下面我们介绍如何使用arcgis api for flex 来查询我们需要的东西。
要在arcgis api for flex中进行查询操作,首先需要定义一个查询任务面板。
使用<esri ueryTask>标签就可以了。
  <esri ueryTask id="queryTask"
url=" http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demogra
phics/ESRI_Census_USA/MapServer/5">
        <esri uery id="query"
            text="{qText.text}"
            returnGeometry="true"
            spatialRelati>
            <esri utFields>
                <mx:String>MED_AGE</mx:String>
                <mx:String>POP2007</mx:String>
            </esri utFields>
        </esri uery>
    </esri ueryTask
id 唯一标识这个查询任务,url告诉查询面板去哪查。
<esri uery>定义一个查询,text是你需要查询的东西,<esri utFields>子标
签告诉Query 查询的结果返回哪些字段的内容。
QueryTask 定义好之后,我们还需要在界面上来调用这个QueryTask。因此我们定
义一个文本输入框和一个查询按钮
<mx anel title="Query a layer (search for a state)"
layout="horizontal" backgroundColor="0xB2BFC6" borderStyle="solid">     
   <mx:TextInput width="100%" id="qText" enter="doQuery()"
text="California"/>        <mx:Button label="Do Query" click="doQuery
()"/>                </mx anel>
文本输入框 用来输入你想要查询的内容,button 用来执行查询的动作。
那么这个doQuery()怎么实现呢?我们在mxml的标签中已经无法实现,这就需要引
入activescript脚本。我们需要在mxml中使用activescript脚本历来编写代码,
实现我们想要的功能。
关于activescript的语法大家可以参考activescript的相关书籍。
要在mxml文档中插入activescript,需要使用<mx:Script>标签
<mx:Script>
        <![CDATA[
        ]]>
    </mx:Script>
activescript 是一种类java 语言,它本身有一个AVM,把activescript编译成
java 的代码,然后再通过JVM转换成字节码执行。
我们下面就开始实现doQuery();
首先,我们要用import 指令引入我们需要的命名空间,和java基本一样
<mx:Script>
        <![CDATA[
            import com.esri.ags.Graphic;
            import com.esri.ags.tasks.FeatureSet;
            import com.esri.ags.tasks.Query;
            import mx.controls.Alert;
            import mx.rpc.AsyncResponder;
        ]]>
    </mx:Script>
然后我们定义doQuery()函数: 注意activescript代码 要放到<mx:Script>标签

private function doQuery() : void
            {
                queryTask.execute( query, new AsyncResponder( onResult,
onFault ));
在doQuery()函数中直接调用了queryTask的execute方法,这是一个异步调用。
成功响应onResult函数,失败则响应onFault函数。
查询已经写好了,那么我们怎么得到查询的结果呢?得到结果肖恩么表现呢?
这就需要我们在onResult函数中做一些事情了。
首先,定义onResult函数
function onResult( featureSet : FeatureSet, token : Object = null ) :
void
                {   
                    var displayFieldName : String =
featureSet.displayFieldName;
                    for each ( var myGraphic : Graphic in
featureSet.features )
                    {
                        // ToolTip
                        myGraphic.toolTip = "The 2007 population of "
                            + myGraphic.attributes[displayFieldName] +
" was "
                            + myNumberFormatter.format
(myGraphic.attributes.POP2007)
                            + "\nMedian Age: " +
myGraphic.attributes.MED_AGE + ".";      
                        // show on map
                        myGraphicsLayer.add( myGraphic );
                    }
                }
查询结果返回一个 FeatureSet,我们现在遍历这个 FeatureSet,然后把每个
feature 绘制到GraphicLayer上。
如果查询失败了怎么办呢,我们是不是要弹个东西出来告诉用户呢?
这就需要我们在onFault函数中做一些工作
function onFault( info : Object, token : Object = null ) : void
                {
                    Alert.show( info.toString() );
                }                        
            }
我们弹个对话框出来告诉用户,查找失败啦!

完整代码:

ContractedBlock.gif ExpandedBlockStart.gif Code
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
    
xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns:esri
="http://www.esri.com/2008/ags"
    pageTitle
="Query Task"
    
>    
    
<mx:Script>
        
<![CDATA[
            import com.esri.ags.Graphic;
            import com.esri.ags.tasks.FeatureSet;
            import com.esri.ags.tasks.Query;
            import mx.controls.Alert;
            import mx.rpc.AsyncResponder;
                        
            private function doQuery() : void
            {
                queryTask.execute( query, new AsyncResponder( onResult, 
onFault ));
                function onResult( featureSet : FeatureSet, token : 
Object = null ) : void
                {   
                    var displayFieldName : String = 
featureSet.displayFieldName;
                    for each ( var myGraphic : Graphic in 
featureSet.features )
                    {
                        // ToolTip
                        myGraphic.toolTip = "The 2007 population of " 
                            + myGraphic.attributes[displayFieldName] + 
" was " 
                            + myNumberFormatter.format
(myGraphic.attributes.POP2007)
                            + "\nMedian Age: " + 
myGraphic.attributes.MED_AGE + ".";       
                        // show on map
                        myGraphicsLayer.add( myGraphic ); 
                    }
                }
                function onFault( info : Object, token : Object = null 
) : void
                {
                    Alert.show( info.toString() );
                }                         
            }
        
]]>
    
</mx:Script>
    
<mx:NumberFormatter id="myNumberFormatter" 
useThousandsSeparator
="true"/>
    
<!-- Layer with US States -->
    
<esri:QueryTask id="queryTask" 
url
="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demogra
phics/ESRI_Census_USA/MapServer/5"
>
        
<esri:Query id="query" 
            text
="{qText.text}"
            returnGeometry
="true"
            spatialRelationship
="esriSpatialRelEnvelopeIntersects">
            
<esri:outFields>
                
<mx:String>MED_AGE</mx:String>
                
<mx:String>POP2007</mx:String>
            
</esri:outFields>
        
</esri:Query>
    
</esri:QueryTask>
    
<mx:Panel title="Query a layer (search for a state)" 
layout
="horizontal" backgroundColor="0xB2BFC6" borderStyle="solid">
        
<mx:TextInput width="100%" id="qText" enter="doQuery()" 
text
="California"/>
        
<mx:Button label="Do Query" click="doQuery()"/>            
    
</mx:Panel>
    
<esri:Map>
        
<esri:extent>
            
<esri:Extent xmin="-170" ymin="15" xmax="-65" ymax="75"/>
        
</esri:extent>
        
<esri:ArcGISTiledMapServiceLayer
            
url="http://server.arcgisonline.com/ArcGIS/rest/services/NPS_Physical_W
orld_2D/MapServer"
 />
        
<esri:GraphicsLayer id="myGraphicsLayer"/>
    
</esri:Map>
</mx:Application>

原文地址:http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=35621&extra=page%3D4%26amp%3Borderby%3Ddateline



本文转自温景良(Jason)博客园博客,原文链接:http://www.cnblogs.com/wenjl520/archive/2009/06/02/1494549.html,如需转载请自行联系原作者

相关文章
|
1天前
|
存储 安全 API
后端开发中的API设计艺术
在数字化时代的浪潮下,后端开发不仅仅是代码的堆砌,更是一种艺术的体现。API设计作为后端开发的精髓,它的优雅与否直接关系到软件产品的性能与用户体验。本文将通过深入浅出的方式,带领读者领略API设计的魅力所在,从基本原则到实用技巧,再到安全性考量,全方位剖析如何打造一个既高效又安全的API。无论你是初学者还是资深开发者,这篇文章都将为你的后端开发之路提供宝贵的启示。
|
2天前
|
安全 API 数据处理
后端开发中的API设计哲学:简洁、高效与安全
【8月更文挑战第29天】 在后端开发的广阔天地中,API(应用程序编程接口)的设计如同编织一张无形的网,连接着数据的海洋与应用的大陆。本文将深入探讨如何打造一个既简洁又高效的API,同时不忘筑牢安全的防线。我们将从API设计的基本原则出发,逐步剖析如何通过合理的结构设计、有效的数据处理和严格的安全措施来提升API的性能和用户体验。无论你是初学者还是资深开发者,这篇文章都将为你提供宝贵的视角和实用的技巧,帮助你构建出更优秀的后端服务。
|
2天前
|
前端开发 API 网络架构
深入理解后端开发中的RESTful API设计
【8月更文挑战第29天】在数字化时代,后端开发是构建强大、高效软件系统不可或缺的一环。RESTful API作为后端与前端交互的桥梁,其设计直接影响到应用程序的性能和用户体验。本文将深入浅出地探讨如何设计符合REST原则的API,并通过实际代码示例来展示最佳实践。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧,帮助你提升后端开发技能。
|
2天前
|
存储 设计模式 API
深入浅出后端开发:从零到一构建RESTful API
【8月更文挑战第29天】本文旨在引导读者理解后端开发的精髓,并通过实际代码示例,展示如何从无到有构建一个RESTful API。文章首先解释后端开发的基本概念,然后逐步深入到API设计的原则和最佳实践,最后通过一个具体的代码示例,让读者能够动手实践,体验后端开发的乐趣。
|
3天前
|
缓存 API 数据库
探索后端开发:构建高效API的艺术
【8月更文挑战第28天】在数字化时代的浪潮中,后端开发扮演着不可或缺的角色。本文通过深入浅出的方式,带领读者理解后端开发的精髓,并重点介绍如何构建高效的API。我们将从基础概念出发,逐步深入到设计原则、最佳实践以及性能优化策略。文章旨在为初学者提供清晰的指导,同时给予经验丰富的开发者新的启示和思考。
|
2天前
|
缓存 监控 测试技术
探索后端开发之巅:构建高效、可扩展的API服务
【8月更文挑战第29天】在数字化时代的浪潮中,后端开发如同搭建一座桥梁,连接用户与数据的无限可能。本文将引导你理解后端开发的精髓,从基础架构到高级优化技巧,一步步揭示如何构建一个既高效又可扩展的API服务。通过深入浅出的方式,我们将一起探索后端世界的奥秘,让你的开发之路更加顺畅。
|
2天前
|
前端开发 安全 API
深入理解后端开发中的RESTful API设计
【8月更文挑战第29天】在数字化时代的浪潮中,后端开发作为技术大厦的坚实基础,承载着数据与服务的核心交互。本文将深入浅出地探讨RESTful API设计的核心原则和实践技巧,通过生动的案例分析,揭示如何构建高效、可扩展且易于维护的后端服务接口。无论你是初探后端世界的新手,还是寻求进阶的开发者,这篇文章都将为你打开一扇通往高质量API设计的大门。
|
JavaScript API 网络架构
关于ArcGIS Rest API
ArcGIS Rest API:     9.3版本: http://resources.esri.com/help/9.3/arcgisserver/apis/rest/index.html     10版本:http://help.arcgis.com/en/arcgisserver/10.0/apis/rest/index.html ArcGIS Rest API 相当于对ArcGIS SOAP API的加上一层封装,即Rest Services是基于SOAP Services的,一般粗略的可以理解为SOAP Services 就是Web Services。
994 0
|
16天前
|
机器人 API Python
智能对话机器人(通义版)会话接口API使用Quick Start
本文主要演示了如何使用python脚本快速调用智能对话机器人API接口,在参数获取的部分给出了具体的获取位置截图,这部分容易出错,第一次使用务必仔细参考接入参数获取的位置。
|
1天前
|
存储 JSON API
淘系API接口(解析返回的json数据)商品详情数据解析助力开发者
——在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦! 淘宝API接口(如淘宝开放平台提供的API)允许开发者获取淘宝商品的各种信息,包括商品详情。然而,需要注意的是,直接访问淘宝的商品数据API通常需要商家身份或开发者权限,并且需要遵循淘宝的API使用协议。
淘系API接口(解析返回的json数据)商品详情数据解析助力开发者
下一篇
云函数