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

上一篇 / 下一篇  2008-10-16 09:17:37 / 个人分类:mushup

arcgis api for flex 开发入门(五)查询3sNews.Net——3S社区&资讯平台;v'L f-|!n S-yw
gis中,针对要素的查询是一个最基本的操作,也是最常用的操作之一。
h5]5a({x]CRH0下面我们介绍如何使用arcgis api for flex 来查询我们需要的东西。3sNews.Net——3S社区&资讯平台\"M K@K_(fr
要在arcgis api for flex中进行查询操作,首先需要定义一个查询任务面板。3sNews.Net——3S社区&资讯平台F m \/T-[M_$?
使用<esri:QueryTask>标签就可以了。
4K]&R"B)C^a].I0  <esri:QueryTask id="queryTask"

url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demogra

phics/ESRI_Census_USA/MapServer/5">3sNews.Net——3S社区&资讯平台\6` e] D4K
        <esri:Query id="query"
{&]9eI0h:K(|0            text="{qText.text}"
F {D mHWn u/m%|-z0            returnGeometry="true"
a,mB-t d0A z5q0            spatialRelationship="esriSpatialRelEnvelopeIntersects">3sNews.Net——3S社区&资讯平台*EA O/ql-h5_
            <esri:outFields>3sNews.Net——3S社区&资讯平台Rb^^l `i
                <mx:String>MED_AGE</mx:String>3sNews.Net——3S社区&资讯平台qWlL`*u/f6_|7rM
                <mx:String>POP2007</mx:String>3sNews.Net——3S社区&资讯平台/^8^9^D5]&W.j&z
            </esri:outFields>3sNews.Net——3S社区&资讯平台:}@2kSUF0c[Q:_m
        </esri:Query>
(\d$Z2?1d.G#|,B`0    </esri:QueryTask

id 唯一标识这个查询任务,url告诉查询面板去哪查。
V C1CVr F5{N1U0<esri:Query>定义一个查询,text是你需要查询的东西,<esri:outFields>子标

签告诉Query 查询的结果返回哪些字段的内容。
;U!T'bLU{^0H6W0QueryTask 定义好之后,我们还需要在界面上来调用这个QueryTask。因此我们定

义一个文本输入框和一个查询按钮
2x!W3V3s r.EDd0<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>3sNews.Net——3S社区&资讯平台:u c?+S n,E
文本输入框 用来输入你想要查询的内容,button 用来执行查询的动作。
Nvo\QuJu0那么这个doQuery()怎么实现呢?我们在mxml的标签中已经无法实现,这就需要引

入activescript脚本。我们需要在mxml中使用activescript脚本历来编写代码,

实现我们想要的功能。3sNews.Net——3S社区&资讯平台&HgI![ K8d
关于activescript的语法大家可以参考activescript的相关书籍。3sNews.Net——3S社区&资讯平台1hT#W7L%p5@ `d7s1A@ {
要在mxml文档中插入activescript,需要使用<mx:Script>标签3sNews.Net——3S社区&资讯平台 W`;I,@#DYG1g
 <mx:Script>
0s"s@0i7\ ^lOv0        <![CDATA[

        ]]>
R*s|8S8Oq&I7B0    </mx:Script>3sNews.Net——3S社区&资讯平台z e!|/X8IcCJ)l
activescript. 是一种类java 语言,它本身有一个AVM,把activescript编译成

java 的代码,然后再通过JVM转换成字节码执行。3sNews.Net——3S社区&资讯平台I'V\%F1wq&u6q1z,{
我们下面就开始实现doQuery();3sNews.Net——3S社区&资讯平台?xi&c A$d G^l
首先,我们要用import 指令引入我们需要的命名空间,和java基本一样3sNews.Net——3S社区&资讯平台3]8ov~/~4E%x
 <mx:Script>3sNews.Net——3S社区&资讯平台S:J#W ~h:R}!bH
        <![CDATA[3sNews.Net——3S社区&资讯平台8R_ } ml"W1qLl
            import com.esri.ags.Graphic;3sNews.Net——3S社区&资讯平台5f |,SYnRaU
            import com.esri.ags.tasks.FeatureSet;3sNews.Net——3S社区&资讯平台$x#w-L1jaY"}2R
            import com.esri.ags.tasks.Query;
3H.x/\ xp"[8y0            import mx.controls.Alert;
7[ j3cr5Ye_/E+K9DD5b0            import mx.rpc.AsyncResponder;3sNews.Net——3S社区&资讯平台0\E6|_@*noTO!K
        ]]>3sNews.Net——3S社区&资讯平台e.lyT7tJ
    </mx:Script>
i]VCp0然后我们定义doQuery()函数: 注意activescript代码 要放到<mx:Script>标签

3sNews.Net——3S社区&资讯平台5w U ]vD[nh
 private function doQuery() : void3sNews.Net——3S社区&资讯平台5O&Ol}.S,y
            {
^Q+{*WM1AXh0                queryTask.execute( query, new AsyncResponder( onResult,

onFault ));
s0H H0P(z0在doQuery()函数中直接调用了queryTask的execute方法,这是一个异步调用。3sNews.Net——3S社区&资讯平台5wq(_u;g#A xO{
成功响应onResult函数,失败则响应onFault函数。3sNews.Net——3S社区&资讯平台pS6Y5e%Mp;Qr
查询已经写好了,那么我们怎么得到查询的结果呢?得到结果肖恩么表现呢?
X.@K?/w$e}0这就需要我们在onResult函数中做一些事情了。3sNews.Net——3S社区&资讯平台J.B7}$Q @9qn ?
首先,定义onResult函数
$? e4m9W X,j%y Df0 function onResult( featureSet : FeatureSet, token : bject = null ) :

void3sNews.Net——3S社区&资讯平台*J [n+]`
                {  
]*v+U |,R3A/P0                    var displayFieldName : String =

featureSet.displayFieldName;
/RX.\p3YPm:w+s0                    for each ( var myGraphic : Graphic in

featureSet.features )3sNews.Net——3S社区&资讯平台:`]"R7}'R
                    {
}2J'T3l X*C;b0                        // ToolTip
mcN1sv+x!jH0                        myGraphic.toolTip = "The 2007 population of "
F)OO:mi3gO-A0                            + myGraphic.attributes[displayFieldName] +

" was "
;iu|KU'L0                            + myNumberFormatter.format

(myGraphic.attributes.POP2007)
8@ yV`V0                            + "\nMedian Age: " +

myGraphic.attributes.MED_AGE + ".";      3sNews.Net——3S社区&资讯平台G U!iF(Jyd m'c
                        // show on map
mm [RRJ+|0                        myGraphicsLayer.add( myGraphic );
vM5IqE8E0                    }3sNews.Net——3S社区&资讯平台`b)`6h?C
                }3sNews.Net——3S社区&资讯平台!T RL7p2k$]7h
查询结果返回一个 FeatureSet,我们现在遍历这个 FeatureSet,然后把每个

feature 绘制到GraphicLayer上。
Y a{5b#v3h[ o/HZ0如果查询失败了怎么办呢,我们是不是要弹个东西出来告诉用户呢?3sNews.Net——3S社区&资讯平台Ej*_5O5p:j5d(Ydq
这就需要我们在onFault函数中做一些工作3sNews.Net——3S社区&资讯平台$H(l+X TV]J$F/wx'X
function onFault( info : Object, token : bject = null ) : void
g7_?4B-h0c0                {3sNews.Net——3S社区&资讯平台TW { m#AtEF
                    Alert.show( info.toString() );
2}-h yNm WZs0                }                        3sNews.Net——3S社区&资讯平台~?#n5PE1OX-[6v
            }
6R[-DuK!f;r\;J0我们弹个对话框出来告诉用户,查找失败啦!
Y/Fs:q+?2O(I&h0ok 到此,一个简单的查询工具就做好了下面我们看看效果

3sNews.Net——3S社区&资讯平台G0E ?aws!u s Zr
Flash:demo
-O{Cu9x,\VE0

enjoy it!

源代码:3sNews.Net——3S社区&资讯平台 FZ!j&`w5r9J ZbbG
<?xml version="1.0" encoding="utf-8"?>
#Y!\-S ] f-@0<mx:Application
p#i+a;`x ["Vc^0    xmlns:mx="http://www.adobe.com/2006/mxml"3sNews.Net——3S社区&资讯平台|9KV!^SN*E~
    xmlns:esri="http://www.esri.com/2008/ags"
y.x;d5E*QBvb0    pageTitle="Query Task"3sNews.Net——3S社区&资讯平台G'P.Q| H o"p/~4v!ezW
    >   3sNews.Net——3S社区&资讯平台8T-C%~g Xh6B9v
    <mx:Script>3sNews.Net——3S社区&资讯平台!m;[ k }"QQb\"\
        <![CDATA[
aLCY!ir;G+lj-_0            import com.esri.ags.Graphic;3sNews.Net——3S社区&资讯平台Qk5Rv*]?DGN
            import com.esri.ags.tasks.FeatureSet;
qDF%{\d#e7x qR.l Q0            import com.esri.ags.tasks.Query;
f_g+P3k e(}!{5S/v~0            import mx.controls.Alert;3sNews.Net——3S社区&资讯平台V-T#X(jTE8Nc
            import mx.rpc.AsyncResponder;3sNews.Net——3S社区&资讯平台_y(q/~`TIG5V6uj
                       
^lE$g$N*s0            private function doQuery() : void
:ctU'P^0V0            {3sNews.Net——3S社区&资讯平台$tuBJP3@
                queryTask.execute( query, new AsyncResponder( onResult,

onFault ));3sNews.Net——3S社区&资讯平台3t;~M }4]`V#n%d
                function onResult( featureSet : FeatureSet, token :

Object = null ) : void
W(g%hExD `0                {  
~@iz{5Kq0                    var displayFieldName : String =

featureSet.displayFieldName;
0Yz3`x mv9H8}0                    for each ( var myGraphic : Graphic in

featureSet.features )3sNews.Net——3S社区&资讯平台b[^O!X gt
                    {3sNews.Net——3S社区&资讯平台 _q[|9h {9~ [
                        // ToolTip
r1O:n*PpJt$`0                        myGraphic.toolTip = "The 2007 population of "3sNews.Net——3S社区&资讯平台6X/x:Y6t5w q?
                            + myGraphic.attributes[displayFieldName] +

" was "
rQ0yk+h^9ui x5z0                            + myNumberFormatter.format

(myGraphic.attributes.POP2007)3sNews.Net——3S社区&资讯平台zpL ub8A$O
                            + "\nMedian Age: " +

myGraphic.attributes.MED_AGE + ".";      
? h D4_i z/P,u0                        // show on map3sNews.Net——3S社区&资讯平台PKHTv t+Q
                        myGraphicsLayer.add( myGraphic );3sNews.Net——3S社区&资讯平台d0|+V O@/F~9N]
                    }
AX!@k7Gt_u"A0                }
XMM V@0                function onFault( info : Object, token : bject = null

) : void
0_w"if+ypI0                {
r j;z'U4dh0                    Alert.show( info.toString() );
4[c,m-QQ2YFE6ggY0                }                        
\ P a.b/jj0            }
'QfO(x6G:s3I!c!X B0        ]]>
.O'g M3?!Z%bm0    </mx:Script>

    <mx:NumberFormatter id="myNumberFormatter"

useThousandsSeparator="true"/>

    <!-- Layer with US States -->
I-`Wr`.{ks|j0    <esri:QueryTask id="queryTask"

url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demogra

phics/ESRI_Census_USA/MapServer/5">3sNews.Net——3S社区&资讯平台-` Lf RY1{U4Tu/\8p
        <esri:Query id="query"3sNews.Net——3S社区&资讯平台3HX&uEk[Q[7~@m{
            text="{qText.text}"
u"Vyt X0            returnGeometry="true"
9L'C4^.FT*Cn0            spatialRelationship="esriSpatialRelEnvelopeIntersects">
5V}bT+JT5xS0            <esri:outFields>3sNews.Net——3S社区&资讯平台 _Y6t2@2x
                <mx:String>MED_AGE</mx:String>
7r\I8vF^0p;g[n0                <mx:String>POP2007</mx:String>
p!XOI:i\0            </esri:outFields>
*jnA!S8n;Wy0        </esri:Query>3sNews.Net——3S社区&资讯平台E HX2R5]\
    </esri:QueryTask>

    <mx:Panel title="Query a layer (search for a state)"

layout="horizontal" backgroundColor="0xB2BFC6" borderStyle="solid">
r%G~ ]&fK7{0        <mx:TextInput width="100%" id="qText" enter="doQuery()"

text="California"/>
*`f)\Fy jV0        <mx:Button label="Do Query" click="doQuery()"/>           
iIKt8l0    </mx:Panel>3sNews.Net——3S社区&资讯平台GD{ Y8R~u
    <esri:Map>3sNews.Net——3S社区&资讯平台2ZOH%D2bu L,Q
        <esri:extent>
.Yng \[t\)y7y0            <esri:Extent xmin="-170" ymin="15" xmax="-65" ymax="75"/>
d3P"D\!s7Z0        </esri:extent>3sNews.Net——3S社区&资讯平台)D_$T%mF)p
        <esri:ArcGISTiledMapServiceLayer3sNews.Net——3S社区&资讯平台rgm5FiVM
           

url="http://server.arcgisonline.com/ArcGIS/rest/services/NPS_Physical_W

orld_2D/MapServer" />3sNews.Net——3S社区&资讯平台4oX*r;l9z} IS
        <esri:GraphicsLayer id="myGraphicsLayer"/>
;D0c o)Ul0    </esri:Map>3sNews.Net——3S社区&资讯平台/h2xb0Ke.O;q(K
</mx:Application>
t+SD Y8N z~(p0 注: 这个arcgis api for flex samples里面的一个例子,可以在安装包的

samples 里面找到
sL(g6K)o0


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar