版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《GIS綜合實(shí)習(xí)》實(shí)習(xí)報(bào)告XX綜合系統(tǒng)美工設(shè)計(jì)與實(shí)現(xiàn)PAGE1第17頁(yè)、《GIS綜合實(shí)習(xí)》實(shí)習(xí)報(bào)告XX綜合系統(tǒng)美工設(shè)計(jì)與實(shí)現(xiàn)Version1AllRightsReserved目錄TOC\o"1-2"\h\z145011.概述 132011.1選題的目的與任務(wù) 1270091.2國(guó)內(nèi)外現(xiàn)狀與水平 196591.3實(shí)習(xí)主要工作 283392.系統(tǒng)界面的設(shè)計(jì)與美化 3260872.1設(shè)計(jì)系統(tǒng)的布局 3263712.2利用CSS實(shí)現(xiàn)頁(yè)面美工 4226133.基于ArcGISAPIforFlex開(kāi)發(fā)的簡(jiǎn)單GIS系統(tǒng) 9119383.1發(fā)布ArcGISServer服務(wù) 9216023.2在Flex工程中加載ArcGIS組件 10130213.3添加ArcGIS控件 1028563.4加載發(fā)布的地圖文檔 11159373.5設(shè)置地圖漫游工具條 13275073.6添加圖層控制工具條 15248563.7Identify功能圖查屬性 17221233.8FindTask屬性查圖 19189133.9面積量算 21129573.10成果展示 22140144.ArcGISAPIforFlex學(xué)習(xí)經(jīng)驗(yàn)小結(jié) 2462194.1ArcGISAPIforFlex組件簡(jiǎn)介 25284214.2ArcGISAPIforFlex1.3在線幫助文檔的使用 26269164.3其他學(xué)習(xí)方法 26283065.結(jié)論 27304215.1主要成果 27308725.2存在問(wèn)題 27141015.3進(jìn)一步工作建議 2713822參考文獻(xiàn) 2714614實(shí)習(xí)報(bào)告評(píng)審表 29概述選題的目的與任務(wù)目的是系統(tǒng)界面的設(shè)計(jì)與美化以及初步掌握基于Flex、ArcGISServer的WebGIS開(kāi)發(fā)技術(shù),能夠獨(dú)立完成簡(jiǎn)單的地理信息系統(tǒng)基本功能的實(shí)現(xiàn)。系統(tǒng)界面的設(shè)計(jì)與美化:系統(tǒng)基礎(chǔ)管理模塊中用戶(hù)管理、角色管理、應(yīng)用程序管理、資源管理、日志管理等界面,基礎(chǔ)信息平臺(tái)模塊中污染源分布頁(yè)面的設(shè)計(jì)及美化?;贔lex、ArcGISServer的簡(jiǎn)單WebGIS的基本功能的實(shí)現(xiàn):地圖數(shù)據(jù)的加載;不同數(shù)據(jù)集和數(shù)據(jù)源的讀?。坏貓D的放大、縮小、漫游等功能;圖查屬性、屬性查圖;幾何圖元編輯;基本的空間分析;基本的空間數(shù)據(jù)管理。任務(wù)是更加熟練掌握網(wǎng)頁(yè)美工、CSS樣式的使用以及基本掌握基于Flex、ArcGISServer的WebGIS開(kāi)發(fā)技術(shù),開(kāi)發(fā)出一個(gè)簡(jiǎn)單的WebGIS系統(tǒng)。進(jìn)一步學(xué)習(xí)CSS樣式調(diào)整;了解Flex開(kāi)發(fā)方法;學(xué)習(xí)基于Flex、ArcGISServer的WebGIS開(kāi)發(fā)的基本技術(shù);開(kāi)發(fā)出一個(gè)簡(jiǎn)單的GIS系統(tǒng)。國(guó)內(nèi)外現(xiàn)狀與水平Flex是一項(xiàng)由FlashPlayer9或者AdobeAIR提供的客戶(hù)端技術(shù)。這就意味著應(yīng)用程序的開(kāi)發(fā)人員現(xiàn)在可以將使用ArcGISServer開(kāi)發(fā)的基于地理信息系統(tǒng)的網(wǎng)絡(luò)服務(wù)同其它網(wǎng)絡(luò)內(nèi)容進(jìn)行聯(lián)合,而且顯示速度更快、視覺(jué)表達(dá)更豐富的地圖發(fā)布應(yīng)用程序可以在網(wǎng)絡(luò)或者桌面版上發(fā)布。ArcGISFlex應(yīng)用程序接口充分利用了ArcGIS服務(wù)中的強(qiáng)大的制圖、地理編碼和地理處理功能。應(yīng)用程序的最終用戶(hù)只要點(diǎn)擊程序中的一個(gè)按鈕,就可以實(shí)現(xiàn)如在交互式地圖中發(fā)布本地?cái)?shù)據(jù)、搜索和顯示GIS數(shù)據(jù)的要素和屬性、定位、識(shí)別要素以及執(zhí)行復(fù)雜的空間分析等功能。開(kāi)發(fā)人員不必在機(jī)器上安裝ArcGISServer,只要通過(guò)URL訪問(wèn)到ArcGISServer就使用ArcGISFlex應(yīng)用程序接口來(lái)編程。因?yàn)檫@個(gè)應(yīng)用程序接口是基于AdobeFlex架構(gòu)的,開(kāi)發(fā)人員可以將Flex的組件,比如數(shù)據(jù)網(wǎng)格、目錄結(jié)構(gòu)、面板、圖表等,整合進(jìn)自定義的應(yīng)用程序當(dāng)中。ArcGISFlex應(yīng)用程序接口和ArcGISServer的一個(gè)早期使用者是馬薩諸塞州的波士頓市。他們最近剛剛發(fā)布了名為“光能波士頓”的應(yīng)用程序。這是一個(gè)面向公眾的網(wǎng)絡(luò)地圖發(fā)布程序,用于顯示可持續(xù)更新的能源設(shè)施。該程序允許用戶(hù)通過(guò)屋頂?shù)拿娣e和周?chē)ㄖ恼趽跚闆r,來(lái)計(jì)算屋頂上潛在的光電能量??梢?jiàn),ArcGISFlex在國(guó)外的發(fā)展相對(duì)于我國(guó)而言已經(jīng)達(dá)到一個(gè)比較成熟的階段。實(shí)習(xí)主要工作工作內(nèi)容繼續(xù)學(xué)習(xí)網(wǎng)頁(yè)美工、CSS語(yǔ)言與網(wǎng)頁(yè)布局;學(xué)習(xí)基于FlexForGIS二次開(kāi)發(fā)的基本技術(shù)開(kāi)發(fā)一個(gè)簡(jiǎn)單GIS系統(tǒng)。工作方法主要通過(guò)閱讀相關(guān)資料,自主學(xué)習(xí)C#、Flex以及ArcGISServer的相關(guān)內(nèi)容,必要時(shí)請(qǐng)教老師和同學(xué)。工作過(guò)程在本次實(shí)習(xí)中,我的工作過(guò)程主要分為以下幾個(gè)階段:1.選題階段:綜合分析,選定題目;2.資料搜集階段:繼續(xù)進(jìn)行學(xué)習(xí)資料的搜集與整理工作;3.系統(tǒng)頁(yè)面設(shè)計(jì)與實(shí)現(xiàn)階段:設(shè)計(jì)湘江流域水環(huán)境重金屬污染監(jiān)測(cè)系統(tǒng)頁(yè)面的設(shè)計(jì)與實(shí)現(xiàn);3.模仿學(xué)習(xí)階段:根據(jù)學(xué)習(xí)資料上面提供的方法,使用Flex技術(shù)建立簡(jiǎn)單的WebGIS系統(tǒng);4.理論學(xué)習(xí)階段:學(xué)習(xí)WebGIS開(kāi)發(fā)的一些理論基礎(chǔ);5.整合學(xué)習(xí)成果階段:把已學(xué)習(xí)到的功能,在一個(gè)小型的GIS系統(tǒng)中實(shí)現(xiàn);6.實(shí)習(xí)報(bào)告撰寫(xiě)階段:整理在實(shí)習(xí)階段完成的代碼,完成實(shí)習(xí)報(bào)告的書(shū)寫(xiě)。工作量與成果在本次實(shí)習(xí)中,只要完成XX系統(tǒng)頁(yè)面設(shè)計(jì)與美工,使用CSS語(yǔ)言對(duì)網(wǎng)頁(yè)進(jìn)行布局與美化。學(xué)習(xí)基于FlexForGIS二次開(kāi)發(fā)的基本技術(shù)、根據(jù)自己學(xué)到的東西開(kāi)發(fā)一個(gè)簡(jiǎn)單GIS系統(tǒng)。系統(tǒng)界面的設(shè)計(jì)與美化針對(duì)XX相關(guān)系統(tǒng)需求,對(duì)系統(tǒng)基礎(chǔ)管理模塊中用戶(hù)管理、角色管理、應(yīng)用程序管理、資源管理、日志管理等界面,基礎(chǔ)信息平臺(tái)模塊中污染源分布頁(yè)面的設(shè)計(jì)及美化。設(shè)計(jì)系統(tǒng)的布局根據(jù)系統(tǒng)的需求,設(shè)計(jì)了一個(gè)初步的布局方案頁(yè)腳(960px*30px)子菜單欄(樹(shù)型結(jié)構(gòu))(200px*500px)菜單欄(960px*30px)網(wǎng)頁(yè)頁(yè)眉(960px*60px)收縮欄子菜單中對(duì)應(yīng)的信息(表格或地圖)(740px*500px)頁(yè)腳(960px*30px)子菜單欄(樹(shù)型結(jié)構(gòu))(200px*500px)菜單欄(960px*30px)網(wǎng)頁(yè)頁(yè)眉(960px*60px)收縮欄子菜單中對(duì)應(yīng)的信息(表格或地圖)(740px*500px)圖2.1.1系統(tǒng)頁(yè)面布局利用CSS實(shí)現(xiàn)頁(yè)面美工在網(wǎng)頁(yè)頁(yè)面中,利用設(shè)置每個(gè)控件、div、table的樣式,將設(shè)置好的樣式存儲(chǔ)在css文件中,通過(guò)他們各自的id可以設(shè)置不同風(fēng)格的樣式?;贏rcGISAPIforFlex開(kāi)發(fā)的簡(jiǎn)單GIS系統(tǒng)發(fā)布ArcGISServer服務(wù)在為應(yīng)用程序編寫(xiě)代碼之前,先在ArcGISServer中將需要使用的圖層數(shù)據(jù)changsha地圖文檔以mxd格式發(fā)布服務(wù),使得自動(dòng)形成一個(gè)虛擬網(wǎng)址,以便在Flex開(kāi)發(fā)中應(yīng)用。在Flex工程中加載ArcGIS組件打開(kāi)FlexBuilder,創(chuàng)建一個(gè)Flex工程,將ArcGISAPIforFlexlibrary的開(kāi)發(fā)包中agslib-1.2-2009-05-15.Swc程序包加載到建立的工程中,這樣就可以對(duì)FlexforGIS進(jìn)行二次開(kāi)發(fā)。添加ArcGIS控件在你能夠訪問(wèn)每個(gè)控件的事件、屬性和方法之前,需要將控件嵌入到MXML中。一旦將控件嵌入頁(yè)面內(nèi),它們將圖形化應(yīng)用程序的用戶(hù)界面。1.在設(shè)計(jì)模式下打開(kāi)頁(yè)面;2.將工具箱標(biāo)簽欄中的Map地圖控件、GraphicsLayer繪圖控件、QueryTask查詢(xún)控件和FindTask查找控件添加到頁(yè)面中;3.在頁(yè)面上添加ActionScript腳本語(yǔ)言,引用命名空間: importcom.esri.ags.geometry.Polygon; importcom.esri.ags.geometry.Polyline; importcom.esri.ags.geometry.MapPoint; importcom.esri.ags.tasks.FeatureSet; importmx.rpc.AsyncResponder; importcom.esri.ags.Graphic; importcom.esri.ags.symbol.Symbol; importcom.esri.ags.geometry.Geometry; importmx.events.ListEvent; importcom.esri.ags.tasks.QueryTask; importcom.esri.ags.tasks.Query; importmx.controls.Alert;加載發(fā)布的地圖文檔地圖(Map)在ArcGISAPIforFlex中負(fù)責(zé)對(duì)layer進(jìn)行組織,在邏輯上Map可以包含任意多個(gè)layer。在ArcGISAPIforFlex中,主要包括以下幾種layer:ArcGISDynamicMapServiceLayer:用戶(hù)通過(guò)ArcGISServerRESTAPI以動(dòng)態(tài)地圖服務(wù)的形式對(duì)數(shù)據(jù)進(jìn)行訪問(wèn)。ArcGISImageServiceLayer:用戶(hù)通過(guò)ArcGISServerRESTAPI以影像服務(wù)的形式對(duì)數(shù)據(jù)進(jìn)行訪問(wèn)。ArcGISTiledMapServiceLayer:用戶(hù)通過(guò)ArcGISServerRESTAPI以影像服務(wù)的形式對(duì)數(shù)據(jù)進(jìn)行訪問(wèn)。ArcIMSMapServiceLayer:用戶(hù)可以訪問(wèn)ArcIMSimageservice提供的數(shù)據(jù)。GraphicsLayer:用于顯示用戶(hù)在客戶(hù)端繪制的圖形要素的圖層,該圖層可以包含一個(gè)或多個(gè)圖形要素。ArcGISDynamicMapServiceLayer圖層是平常發(fā)布的一般動(dòng)態(tài)地圖,ArcGISTiledMapServiceLayer圖層是特殊的需要制作的切片式地圖,切片式地圖可以在ArcGISServer中自動(dòng)形成,具體方法如下所示:圖3.4.1在ArcGISServer中創(chuàng)建切片式地圖形成的切片式地圖,其實(shí)是將各個(gè)不同比例尺的地圖數(shù)據(jù)切成幾塊以圖片格式如PNG、JPEG形式存儲(chǔ)在緩存中,切片式地圖不能隨著原來(lái)地圖的改變而改變。在MXML中將命名空間設(shè)為xmlns:esri="/2008/ags",添加Map控件,在Map標(biāo)簽中定義對(duì)象,并設(shè)置Map相關(guān)屬性、Map的消息以及消息響應(yīng)函數(shù)。<esri:Mapwidth="100%"height="50%"id="EsriMap"resize="EsriMapResize(event);"extentChange="ESRIMapExtentChange(event);"mouseMove="OnDrawMouseMove(event)"/>Map創(chuàng)建好之后,使用layer把需要訪問(wèn)的數(shù)據(jù)加載到map上,在<esri:Map>標(biāo)簽下面創(chuàng)建<esri:ArcGISTiledMapServiceLayer>子標(biāo)簽。<esri:ArcGISTiledMapServiceLayer>標(biāo)簽定義一個(gè)layer對(duì)象,如下:<esri:ArcGISTiledMapServiceLayerurl="http://XXX/ArcGIS/rest/services/XXX/MapServer"/>同時(shí),對(duì)于Map控件中還能控制地圖顯示加載時(shí)顯示的范圍,在<esri:Map>標(biāo)簽下創(chuàng)建<esri:extent>標(biāo)簽即可。使用<esri:extent>標(biāo)簽來(lái)定義一個(gè)范圍對(duì)象:<esri:extent><esri:Extentxmin="-126"ymin="24"xmax="-67"ymax="50"><esri:SpatialReferencewkid="4326"/></esri:Extent></esri:extent>設(shè)置地圖漫游工具條在ArcGISAPIforFlex中提供了地圖瀏覽的工具,通過(guò)簡(jiǎn)單的調(diào)用,就能夠?qū)崿F(xiàn)放大、縮小、平移、復(fù)位等地圖瀏覽操作。使用<esri:Navigation>標(biāo)簽定義地圖瀏覽控件:<esri:Navigationid="navToolbar"map="{myMap}"/>map屬性綁定需要進(jìn)行瀏覽操作的地圖。Navigation對(duì)象創(chuàng)建后,使用Navigation的activate方法來(lái)激活需要的工具進(jìn)行瀏覽。例如放大操作:activate(Navigation.ZOOM_IN);釋放瀏覽工具,調(diào)用Navigation對(duì)象的deactivate()函數(shù)即可。<esri:Navigationid="navToolbar"map="{myMap}"/><mx:ToggleButtonBarid="toolbar1"creationComplete="initToolbar1()"itemClick="itemClickHandler(event)"iconField="icon"horizontalCenter="-163"verticalCenter="-151"> <mx:dataProvider> <mx:Array> <mx:Objecticon="{ZoomIn}"/> <mx:Objecticon="{ZoomOut}"/> <mx:Objecticon="{Pan}"/> </mx:Array> </mx:dataProvider> </mx:ToggleButtonBar> <mx:Buttonicon="{Back}"click="navToolbarExtent('Prev')"enabled="{!navToolbar.isFirstExtent}"horizontalCenter="-70"verticalCenter="-151"/> <mx:Buttonicon="{Forward}"click="navToolbarExtent('Next')"enabled="{!navToolbar.isLastExtent}"horizontalCenter="-21"verticalCenter="-151"/><mx:Buttonicon="{FullExt}"click="navToolbarExtent('Full')"horizontalCenter="25"verticalCenter="-151"/>ActionScript腳本: privatefunctionitemClickHandler(event:ItemClickEvent):void { switch(event.index) { case0://選擇為ZoomIn { //激活navToolbar的ZOOM_IN navToolbar.activate(Navigation.ZOOM_IN); break; } case1://選擇為ZoomOut { //激活navToolbar的ZOOM_OUT navToolbar.activate(Navigation.ZOOM_OUT); break; } case2://選擇為Pan { //激活navToolbar的PAN navToolbar.deactivate(); break; } } }添加圖層控制工具條ArcGISAPIforFlex組件中沒(méi)有提供現(xiàn)成的圖層控制TOC控件,但是圖層控制TOC控件實(shí)際上和樹(shù)控件類(lèi)似,因此可以在Flex提供的Tree控件的基礎(chǔ)上實(shí)現(xiàn)圖層控制。在src目錄下新添加一個(gè)叫uc的目錄,然后在uc下新建TreeToc.mxml文件用來(lái)實(shí)現(xiàn)Toc功能的。Toc控件這里是用Flex提供的Tree控件的基礎(chǔ)上實(shí)現(xiàn)的。這個(gè)Tree控件獲取Layers數(shù)據(jù)作為數(shù)據(jù)源進(jìn)行綁定顯示,同時(shí)提供了顯示圖層隱藏圖層等方法。最后這個(gè)Tree添加了一個(gè)叫uc.TreeRenderer的itemRenderer(項(xiàng)渲染器),也就是說(shuō)Tree的每一個(gè)節(jié)點(diǎn)都是由這個(gè)itemRenderer來(lái)負(fù)責(zé)顯示。在uc目錄下新增加TreeRenderer.mxml的文件,這個(gè)因?yàn)槭莍temRenderer所以需implements="mx.controls.listClasses.IDropInListItemRenderer"。在uc.TreeToc中引用命名空間: importmx.collections.ArrayCollection; importcom.esri.ags.layers.ArcIMSMapServiceLayer; importcom.esri.ags.layers.ArcGISDynamicMapServiceLayer; importcom.esri.ags.events.LayerEvent; importcom.esri.ags.layers.Layer; importcom.esri.ags.layers.LayerInfo; importmx.utils.ObjectUtil;將Tree控件綁定數(shù)據(jù)源:privatefunctionsetDataProvider():void{if(layerisArcGISDynamicMapServiceLayer){layerInfos=ArcGISDynamicMapServiceLayer(layer).layerInfos;}elseif(layerisArcIMSMapServiceLayer){layerInfos=ArcIMSMapServiceLayer(layer).layerInfos;}registerClassAlias("com.esri.ags.layers.LayerInfo",LayerInfo);//ObjectUtil.copy方法接受一個(gè)對(duì)象作為參數(shù)而返回一個(gè)在內(nèi)存的新位置的此對(duì)象的深度拷貝,類(lèi)似克隆layerInfos=ObjectUtil.copy(layerInfos)asArray;dataProvider=layerInfos;}設(shè)置顯示圖層與隱藏圖層方法,在uc.uc.TreeRenderer中實(shí)現(xiàn)checkbox的響應(yīng)事件:privatefunctionclickHandler(event:MouseEvent):void{varlayerInfo:LayerInfo=LayerInfo(data);if(cb.selected){layerInfo.defaultVisibility=true;//調(diào)用TreeTOC顯示圖層方法TreeTOC(listData.owner).showLayer(layerInfo);}else{layerInfo.defaultVisibility=false;//調(diào)用TreeTOC隱藏圖層方法TreeTOC(listData.owner).hideLayer(layerInfo);}}在主頁(yè)面中加載自制控件TreeTOC <uc1:TreeTOClayer="{myDynamicService}"height="300"width="300"borderThickness="3"verticalCenter="19"horizontalCenter="400"/>Identify功能圖查屬性在ArcGISAPIforFlex中,使用IdentifyTask來(lái)實(shí)現(xiàn)Identify的功能。使用<esri:IdentifyTask>標(biāo)簽來(lái)定義一個(gè)IdentifyTask對(duì)象,如下面代碼:<esri:IdentifyTaskid="identifyTask"identifyComplete="identifyCompleteHandler(event)"url="http://XXX/ArcGIS/rest/services/XXX/MapServer"/>執(zhí)行Identify,需要定義一個(gè)IdentifyParameters對(duì)象。在界面上使用鼠標(biāo)交互來(lái)完成Identify:首先,定義一個(gè)draw控件:<esri:Drawid="drawToolbar"map="{map}"graphicsLayer="{myGraphicsLayer}"drawEnd="drawEndHandler(event)">drawEnd事件綁定到drawEndHandler(event)函數(shù),這個(gè)事件會(huì)在繪制完成后觸發(fā)。使用ActionScript腳本實(shí)現(xiàn)drawEndHandler和identifyCompleteHandler函數(shù):首先,引入命名空間:importcom.esri.ags.Graphic;importcom.esri.ags.events.DrawEvent;importcom.esri.ags.events.IdentifyEvent;importcom.esri.ags.geometry.Geometry;importcom.esri.ags.symbol.Symbol;importcom.esri.ags.tasks.IdentifyParameters;importcom.esri.ags.tasks.IdentifyResult;importcom.esri.ags.toolbars.Draw;其次,定義并實(shí)現(xiàn)drawEndHandler()函數(shù):privatefunctiondrawEndHandler(event:DrawEvent):void{vargeometry:Geometry=event.geometry;varidentifyParams:IdentifyParameters=newIdentifyParameters();identifyParams.returnGeometry=true;identifyParams.tolerance=3;identifyParams.width=600;identifyParams.height=550;identifyParams.geometry=geometry;identifyParams.layerOption=IdentifyParameters.LAYER_OPTION_ALL;identifyParams.mapExtent=map.extent;identifyTask.execute(identifyParams);}在drawEndHandler()函數(shù)中定義了一個(gè)identifyParams,每次調(diào)用drawEndHandler的時(shí)候,identifyTask都會(huì)把identifyParams作為傳入?yún)?shù)調(diào)用execute方法去執(zhí)行。執(zhí)行完成后會(huì)響應(yīng)identifyCompleteHandler()函數(shù)。定義并實(shí)現(xiàn)identifyCompleteHandler()函數(shù):privatefunctionidentifyCompleteHandler(event:IdentifyEvent):void{foreach(varresult:IdentifyResultinevent.identifyResults){myGraphicsLayer.add(result.feature);switch(result.feature.geometry.type){caseGeometry.MAPPOINT:{varmp:MapPoint=result.feature.geometryasMapPoint;vartxt:Text=newText();txt.text="Point";myMWindow.content=txt;myMWindow.show(mp);break;}caseGeometry.POLYLINE:{varlin:Polyline=result.feature.geometryasPolyline;vartxt:Text=newText();txt.text="Line";myMWindow.content=txt;myMWindow.show(lin.extent.center);break;}caseGeometry.POLYGON:{varpgn:Polygon=result.feature.geometryasPolygon;vartxt:Text=newText();txt.text="polygon";myMWindow.content=txt;myMWindow.show(pgn.extent.center);break;}}}}在identifyCompleteHandler()函數(shù)中,遍歷identifyResults,將identifyResults添加到GraphicsLayer上。、FindTask屬性查圖在ArcGISAPIforFlex中執(zhí)行Find任務(wù),需要使用FindTask。使用<esri:FindTask>標(biāo)簽定義一個(gè)FindTask對(duì)象,如下面的代碼:<esri:FindTaskid="findTask"executeComplete="executeCompleteHandler(event)"url="http://XXX/ArcGIS/rest/services/XXX/MapServer/find"/>使用FindTask,還需要一個(gè)FindParameters對(duì)象來(lái)指定查找的參數(shù)。<esri:FindParametersid="myFindParams"returnGeometry="true"contains="true"searchText="{fText.text}"layerIds="[2]"searchFields="['STATE_ABBR','STATE_NAME']"/>定義好FindTask和FindParameters之后,在界面上定義一個(gè)文本輸入框和一個(gè)button來(lái)完成Find功能的調(diào)用工作。<mx:HBoxwidth="100%"height="40"backgroundColor="0xDDDDFF"paddingTop="10"horizontalAlign="center"><mx:Texttext="SearchfornamesofStates"/><mx:TextInputmaxWidth="400"id="fText"enter="doFind()"text="NEW"/><mx:Buttonlabel="Find"click="doFind()"/></mx:HBox>文本輸入框用來(lái)輸入查找的內(nèi)容,button用來(lái)執(zhí)行查詢(xún)的動(dòng)作。實(shí)現(xiàn)Find功能:首先,使用import指令引入需要的命名空間:importcom.esri.ags.events.FindEvent;其次,定義doFind()函數(shù):PrivatefunctiondoFind():void{findTask.execute(myFindParams);}在doFind()函數(shù)中FindTask對(duì)象直接調(diào)用了execute方法,并把FindParameters對(duì)象做為傳入?yún)?shù)。下面實(shí)現(xiàn)executeCompleteHandler()函數(shù),這個(gè)函數(shù)在定義FindTask的時(shí)候被指定為響應(yīng)executeComplete事件的函數(shù),即當(dāng)Find任務(wù)完成的時(shí)候會(huì)響應(yīng)executeCompleteHandler()函數(shù),F(xiàn)ind得到的結(jié)果將在這個(gè)函數(shù)里進(jìn)行處理。privatefunctionexecuteCompleteHandler(event:FindEvent):void{myGraphicsLayer.clear();vargraphic:Graphic;resultSummary.text="Found"+event.findResults.length+"results.";for(vari:Number=0;i<event.findResults.length;i++){graphic=event.findResults[i].feature;graphic.toolTip=event.findResults[i].foundFieldName+":"+event.findResults[i].value;myGraphicsLayer.add(graphic);}}在executeCompleteHandler函數(shù)中遍歷Find的結(jié)果,給每一個(gè)graphic添加一個(gè)toolTip,顯示該結(jié)果對(duì)應(yīng)的字段名和字段值。同時(shí)把查詢(xún)到的結(jié)果顯示到DataGrid中:<mx:DataGriddataProvider="{findTask.executeLastResult}"scroll="true"width="100%"height="40%"><mx:columns><mx:DataGridColumndataField="layerId"headerText="LayerID"width="70"/><mx:DataGridColumndataField="layerName"headerText="LayerName"/><mx:DataGridColumndataField="foundFieldName"headerText="FoundFieldName"/><mx:DataGridColumndataField="value"headerText="FoundFieldValue"/></mx:columns></mx:DataGrid>最后只要把DataGrid的dataProvider綁定到findTask.executeLastResult就可以了。面積量算地圖數(shù)據(jù)是采用GeographicCoordinateSystems(地理坐標(biāo)系)所以在距離和面積的量算之間需要進(jìn)行地圖投影也就是project操作,對(duì)于面積的量算還需要先進(jìn)行simplify操作。由于涉及到地圖投影,所以在加入Map控件時(shí),需要設(shè)置投影屬性:<esri:Mapid="myMap"extent="{newExtent(575803.655454411,3079499.42312319,830790.103001739,3178635.28608872,newSpatialReference(102113))}"load="drawToolbar.activate(Draw.POLYGON)">面積量算設(shè)計(jì)到地圖投影,首先進(jìn)行GeometryService的project操作,為GeometryService控件添加了PROJECT_COMPLETE的完成后監(jiān)聽(tīng)事件,然后實(shí)現(xiàn)projectCompleteHandler方法,然后進(jìn)行simplify操作并且添加了SIMPLIFY_COMPLETE完成監(jiān)聽(tīng)事件方法simplifyCompleteHandler,之后對(duì)所選中的區(qū)域進(jìn)行面積量算。privatefunctionsimplifyCompleteHandler(event:GeometryServiceEvent):void{vargeometry:Geometry=event.graphics[0].geometry;//weonlydrawoneareatatimevarnewGraphic:Graphic=newGraphic(geometry);newGraphic.addEventListener(MouseEvent.CLICK,graphicClicked);geometryService.areasAndLengths([newGraphic(geometry)]);}privatefunctionareaslengthsCompleteHandler(event:GeometryServiceEvent):void{result.text="Thisareais"+myNumberFormatter.format(event.arealengths.areas/1000000)+"km2.\n";}成果展示將所有的功能整合在一起,效果圖如下:圖3.10.1最終成果效果圖一(在瀏覽器中)圖3.10.2最終成果效果圖二(在FlashPlayer)圖3.10.3通過(guò)圖查屬性圖3.10.4通過(guò)屬性查圖ArcGISAPIforFlex學(xué)習(xí)經(jīng)驗(yàn)小結(jié)由于基礎(chǔ)、學(xué)習(xí)能力以及學(xué)習(xí)條件的限制,在本次學(xué)習(xí)中我遇到了很多困難,但是同時(shí)也總結(jié)了一些經(jīng)驗(yàn)。本實(shí)習(xí)報(bào)告書(shū)寫(xiě)的順序,其實(shí)也大致是我的學(xué)習(xí)過(guò)程,先是簡(jiǎn)單的在Flex中加載地圖,使得地圖在瀏覽器中顯示,然后接著實(shí)現(xiàn)地圖漫游、圖層控制、簡(jiǎn)單的地圖圖文互查等功能,這樣我對(duì)基于ArcGISAPIforFlex的二次開(kāi)發(fā)基礎(chǔ)便有了一個(gè)初步的感性認(rèn)識(shí),之后我閱讀了一些介紹ArcGISAPIforFlex二次開(kāi)發(fā)的書(shū)籍以及相關(guān)網(wǎng)站,對(duì)其有了更進(jìn)一步的理性認(rèn)識(shí),本部分內(nèi)容主要介紹在學(xué)習(xí)ArcGISAPIforFlex過(guò)程中,我認(rèn)為比較重要的理論知識(shí)和一些學(xué)習(xí)方法與資料。ArcGISAPIforFlex組件簡(jiǎn)介Map組件:Map組件是ArcGISFlexAPI中唯一的可視化組件,ArcGISFlexAPI中所有的操作和功能都會(huì)在Map中進(jìn)行,Map中的Layer有兩種,一種是對(duì)應(yīng)某個(gè)地圖服務(wù)的MapServiceLayer、一種是用以繪制自定義要素的GraphicLayer。Map有很靈活的可配置性,各種元素的外觀也很容易定制,如果有特殊的需要,Map也可以通過(guò)隱藏所有元素,同時(shí)可以在此基礎(chǔ)上加上自己的內(nèi)容。Navigation工具:提供了對(duì)Map進(jìn)行導(dǎo)航的諸多功能,可以實(shí)現(xiàn)漫游、拉框放大、拉框縮小等類(lèi)似ADF中Tool的功能和前一視圖、后一視圖、全圖等類(lèi)似ADF中Command的功能,它并不是一個(gè)工具條,而是提供了一些功能,可以把Flex組件綁定到Navigation的功能上。Navigation中漫游、拉框放大、拉框縮小等功能和工具條按鈕的綁定,同時(shí)借助Flex中的ToggleButtonBar作為這些功能的宿主。Draw工具:Draw工具提供了在客戶(hù)端繪制各種幾何對(duì)象的功能,用一個(gè)ToggleButtonBar去綁定Draw工具的功能。InfoWindow窗口:InfoWindow窗口主要提供在Map上彈出信息提示的功能,定義一個(gè)Map的時(shí)候,Map會(huì)生成一個(gè)自帶的InfoWindow并放置在自己的infoWindow屬性中。InfoWindow使用的重點(diǎn)在于其content屬性,它是InfoWindow窗口中的信息內(nèi)容,它對(duì)應(yīng)一個(gè)DisplayObject的對(duì)象,任何Flex中的可視組件都可以放置于其中。QueryTask:QueryTask是一個(gè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工裝油漆施工合同范例
- 場(chǎng)地贈(zèng)送合同范例
- 八年級(jí)物理上冊(cè) 4.4光的折射備課教學(xué)實(shí)錄 (新版)新人教版
- 燈頭廠家采購(gòu)合同范例
- 棉花秸稈買(mǎi)賣(mài)合同范例
- 2025年那曲駕??荚嚳拓涍\(yùn)從業(yè)資格證考試題庫(kù)
- 仲裁機(jī)構(gòu)合同范例
- 2025年衡陽(yáng)貨運(yùn)從業(yè)資格證考試模擬
- 布置結(jié)婚酒店合同范例
- 景區(qū)開(kāi)發(fā)合同范例
- 學(xué)優(yōu)生學(xué)情分析及措施
- 2024糖尿病酮癥酸中毒診斷和治療課件
- 2024-淘寶商城入駐協(xié)議標(biāo)準(zhǔn)版
- 2024年遂寧廣利工業(yè)發(fā)展有限公司招聘筆試沖刺題(帶答案解析)
- 中國(guó)石油天然氣集團(tuán)有限公司投標(biāo)人失信行為管理辦法(試行)
- 縫合線材料的可吸收性研究
- GB/T 43700-2024滑雪場(chǎng)所的運(yùn)行和管理規(guī)范
- 《3-6歲兒童學(xué)習(xí)與發(fā)展指南》知識(shí)競(jìng)賽參考題庫(kù)500題(含答案)
- 水電站廠房設(shè)計(jì)-畢業(yè)設(shè)計(jì)
- 幼兒園園長(zhǎng)的園里園外融合教育
- 綜合金融服務(wù)方案課件
評(píng)論
0/150
提交評(píng)論