ArcGis_for_Flex_详细开发文档

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Flex+ArcGis的开发Flex本身是一项非常容易上手的技术,他主要是由描述应用程序界面的XML语言(MXML)和脚本语言AS以及基础类库组成的。Flex最大的一个特性之一就是可以很方便的和多种服务器端进行交互。ArcGISServerforFlex实际上就是利用一个封装好的类库来开发应用程序,这就极大的方便了初学者,因为有太多太多的AO接口你是不用接触的,你只需要调用ArcGis提供的方法接口就能实现大部分的功能。尤其是在ArcGIs10推出后,REST接口变得越发强大了。首先我们先来了解下Map。Map是WebGIS中最核心的控件了,基本上所有的操作都要围绕着他来实现。map首先是由数个layer组成的。每个图层又是由多个图形组成的,而每个图形里又包含很多属性等等。具体的分级是这样的:MAP→layers→Graphic→attributes→filed→name+value地图→图层→图形→属性→字段→字段名和字段值所以只有把Map这个概念细化了,我们才能真正的了解如何开发他。那么,我们把map的概念闹懂了,就可以来开发各种功能了。首先我们第一步要做的,那就是把我们的地图展现在用户眼前。那么我们就需要esri:map这个控件了。这个控件的作用很强大,稍后我们会详细的讲的。既然有了展示的控件,那么没有内容也不行啊,这里我们用到了ArcGisServier发布的服务了。我们把需要的地图.mxd文件发布到ArcGisServier中,那么我们怎么从Flex得到呢?实际上ArcGisServier发布的地图服务他很像一种WebService你只需要知道服务地址就能用他的服务了。所以我们就给MAP控件提供一个URL,他就表示我们使用了这个地图服务。当然了你也可以直接在浏览器中输入这个URL,你会发现几乎所有的地图信息都可以在这里边看到。好了,到这里我们的地图就显示出来了,下一步我们就可以开始根据这个显示的地图开发功能了。这时候你就会发现了,MAP不单单只显示了一个地图,还实现了很多常用的操作呢,比如放大缩小、漫游等等,当然MAP的功能还不止这么多。这就是MAP的强大之处了,当然你也可以不用他自带的功能,下面我们就自己开发一个导航栏。esri:Mapid=maplogoVisible=falsewidth=100%height=100%doubleClickZoomEnabled=falsemapClick=mapClickHandler(event)scrollWheelZoomEnabled=truezoomSliderVisible=falseopenHandCursorVisible=falsex=0y=0chromeColor=#4F5052!--以动态的形式显示控件--esri:ArcGISDynamicMapServiceLayerid=myDynamicServiceurl=!--显示一个图形层--esri:GraphicsLayerid=graphicslayer/!--点查图层--esri:GraphicsLayerid=czgraphicProvider={lastIdentifyResultGraphic}/!—显示坐标范围--esri:extentesri:Extentid=esriMapExtentxmin=742129.057916247ymin=4051870.44849716xmax=748908.010594068ymax=4057015.83891994//esri:extent/esri:Map我们要实现的功能很简单,就是放大缩小,上下左右漫游。首先我们先把MAP自带的放大缩小按钮禁用了。Map有很多属性,其中有一个ScaleBarVisible就是是否显示放大缩小功能条的,给他一个False值就可以了。那么我们先把用到的按钮显示在界面上,然后编辑他们的click事件,其实自己开发这些功能还是很简单,因为arcGisforFlex的API实在是很“傻瓜”,比如我们要实现放大,那么我们直接用map.zoom()方法就行了,再比如我们实现向下漫游,就用map.panDown()实现。所以你根本就不用关心他是如何实现的,只需要调用就行了。!—漫游按钮--s:Buttonid=sButtonx=18y=43click=map.panDown()skinClass=widgets.Navigation.sButtonSkintoolTip={pandownItem.toolName}/s:Buttonid=neButtonx=35y=2click=map.panUpperRight()skinClass=widgets.Navigation.neButtonSkinwidth=26height=25/!--放大缩小--esri:Navigationmap={map}left=18top=73/esri:Navigation基本的操作功能已经实现了,下面我们要实现一个比较复杂也是比较重要的功能---查询。查询需要用到的控件呢除了map还需要一个GraphicsLayer,这个控件呢是包含在map里的他的主要功能呢是显示客户端绘制的图形要素,我们需要他是为了突出显示查询到的要素。还有一个很重要的QueryTask控件和Query控件,他们都是属于非显示控件。其主要功能分是在图层中定义查询任务和根据输入的值进行查询。然后我们还需要一个文本框和一个按钮给用户操作。这些控件定义好后,我们开始写查询的方法了。首先我们先得给定义的QueryTask定义一个查询的URL,这URL实际上就是把map的URL详细到了层。然后我们需要给Query一个查询的条件。这里的条件跟SQL里的WHERE很像,直接把输入的值按照应该的格式写好就行了。然后我们就可以进行查询了,QueryTask.execute()方法就是执行查询语句的方法。它主要带有两个参数,一个就是Query,另一个则是数据和处理函数构造responder实例,他是一个回调函数,主要的功能就是获取查询结果和查询是否正确。如果正确的话我们可以获取到查询到的值,将他显示在datagrid中并突出显示了。!--在管线图层中,定义查询任务--esri:QueryTaskid=queryTaskuseAMF=false/!--根据输入值进行查询--esri:Queryid=queryoutSpatialReference={map.spatialReference}returnGeometry=true/esri:Query//查询方法privatefunctiondoQuery(oid:String):void{//清除图层graphicslayer.clear();if(fieldsList.value==null){Alert.show(没有需要查询的字段,请重新选择.);return;}queryTask.url=(oid==null){query.where=fieldsList.value+like'%+fText.text+%';}else{query.where=OBJECTIDlike'+oid+';}//query.where=fieldsList.value+='+fText.text+';//Alert.show(fieldsList.value+='+fText.text+');varfiels:Array=newArray();fiels.push(fieldsList.value);fiels.push(OBJECTID);query.outFields=fiels;//调用查询queryTask.execute(query,newAsyncResponder(onResult,onFault));//查询正确functiononResult(featureSet:FeatureSet,token:Object=null):void{varresultlist:Array=newArray();if(featureSet.features.length==0){Alert.show(对不起~没有找到您想查找的地点!);}else{if(layerList.value==0&&featureSet.features.length==1){foreach(vargriphics:GraphicinfeatureSet.features){graphicslayer.add(griphics);resultlist.push(griphics.attributes);vargeo:Geometry=griphics.geometry;if(geo.type==Geometry.MAPPOINT){varpnt:MapPoint=geoasMapPoint;//定位中心map.centerAt(pnt);}}lists.dataProvider=resultlist;to2.play();to3.play();}else{//对查询结果进行定位vargraphicsExtent:Extent=GraphicUtil.getGraphicsExtent(featureSet.features);if(graphicsExtent){foreach(vargriphic:GraphicinfeatureSet.features){resultlist.push(griphic.attributes);}//Grid设置数据源进行查询结果显示lists.dataProvider=resultlist;map.extent=graphicsExtent;graphicslayer.graphicProvider=queryTask.executeLastResult.features;//调用特效to2.play();to3.play();}}}}//查询出错functiononFault(info:Object,token:Object=null):void{Alert.show(错误:+info.toString());}}那么基本的查询功就实现了,我们现在可以实现图层管理功能了。其实呢图层管理也是很简单的,首先我们先通过Map中显示地图的图层获取到map的所有图层,直接通过图层.layerInfos就可以得到,然后将获取到的图层集存到Araay中,再将他显示在DataGrid中就可以了。然后我们还需要实现显示和隐藏图层的功能,主要就是获取当前可见图层的列表layer.visibleLayers,然后在当前可见图层列表中加入要显示的图层visibleLayers.addItem(图层ID),就能实现显示图层了,隐藏图层也差不多visibleLayers.removeItemAt(图层ID)就行了。//图层privatevar_layer:Layer;//图层是否更新标识privatevar_layerChanged:Boolean;//获取图层publicfunctiongetlayer():Layer{return_layer;}//设置图层publicfunctionsetlayer(value:Layer):void{_layer=value;_layerChanged=true;invalidateProperties();}//设置组件属性overrideprotectedfunctioncommitProperties():void{if(_layerChanged)

1 / 31
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功