日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ArcGIS.Server.9.3和ArcGIS API for Flex的GeometryService和buffer分析(十)

發(fā)布時(shí)間:2025/7/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ArcGIS.Server.9.3和ArcGIS API for Flex的GeometryService和buffer分析(十) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目的:
1.ArcGIS API for Flex用GeometryService實(shí)現(xiàn)點(diǎn)、線、面的buffer分析
準(zhǔn)備工作:
1.在ArcGIS.Server.9.3發(fā)布一個(gè)叫USA的Map Service
2.在ArcGIS.Server.9.3發(fā)布一個(gè)叫Geometry的Geometry Service,默認(rèn)設(shè)置就可以了。
完成后的效果圖:


開(kāi)始:
0.首先介紹一下Geometry ServiceGeometry Service是給程序提供幾何計(jì)算如?buffering, simplifying, calculating areas 、lengths,? projecting等功能,Geometry Service可以用來(lái)代替ArcObjects 或geoprocessing service等做的這些幾何計(jì)算,它是ArcGIS Server 9.3提供的新功能,本篇就是用它來(lái)實(shí)現(xiàn)buffer的分析。
1.啟動(dòng)Flex Builder3新建工程以及引入1.0正式版ArcGIS API for Flex library的開(kāi)發(fā)包
2.新建bufferTest.mxml頁(yè)面,添加Map、ArcGISDynamicMapServiceLayer、GraphicsLayer等。具體代碼如下:
1<mx:Canvas?width="490"?height="401"?borderStyle="solid"?borderThickness="3"?verticalCenter="16"?left="10">
2????<esri:Map?id="myMap"?crosshairVisible="true">
3????????<esri:ArcGISDynamicMapServiceLayer?url="http://jh-53a435fbc0e8/ArcGIS/rest/services/USA/MapServer"?/>
4????????<esri:GraphicsLayer?id="myGraphicsLayer"??/>
5????</esri:Map>
6????</mx:Canvas> 3. 然后在Map控件的右邊在添加一個(gè)Grid用來(lái)顯示buffer分析后的數(shù)據(jù),代碼如下: 1<mx:DataGrid?id="datalist"?height="398"?verticalCenter="14"?borderStyle="solid"?borderThickness="3"?left="508">
2????</mx:DataGrid> 4.這里既然是用Geometry Service實(shí)現(xiàn)buffer的當(dāng)然還需要添加esri:GeometryService控件,它的url屬性就是上面發(fā)布的叫Geometry的Geometry Service的地址,代碼如下: 1<esri:GeometryService?id="myGeometryService"?url="http://jh-53a435fbc0e8/ArcGIS/rest/services/Geometry/GeometryServer"/> 5.這里采用在地圖上畫(huà)點(diǎn)、線、面然后根據(jù)畫(huà)的幾何圖進(jìn)行buffer,所以還需要ToggleButtonBar按鈕組控件、Draw控件以及圖形顯示樣式的定義,具體代碼如下: ?1<esri:SimpleFillSymbol?id="sfs"?color="0xFF0000"?alpha="0.6">
?2????</esri:SimpleFillSymbol>
?3????<esri:Draw?id="drawToolbar"?map="{myMap}"?graphicsLayer="{myGraphicsLayer}"?drawEnd="drawEndHandler(event)"?/>
?4????<mx:ToggleButtonBar?verticalCenter="-203"??itemClick="itemClickHandler(event)"?toggleOnClick="true"?left="11">
?5????????<mx:dataProvider>
?6????????<mx:Array>
?7????????<mx:Object?icon="{point}"?/>
?8????????<mx:Object?icon="{polyline}"?/>
?9????????<mx:Object?icon="{polygon}"?/>
10????????</mx:Array>
11????????</mx:dataProvider>
12????</mx:ToggleButtonBar> 6.point、polyline、polygon的icon定義如下: ?1<mx:Script>
?2????????<![CDATA[
?3???????????????????
?4????????[Bindable]?
?5????????????[Embed(source="assets/point.gif")]
?6????????????public?var?point:Class;?
?7
?8????????????[Bindable]?
?9????????????[Embed(source="assets/polyline.gif")]
10????????????public?var?polyline:Class;?
11
12????????????[Bindable]?
13????????????[Embed(source="assets/polygon.gif")]
14????????????public?var?polygon:Class;?
15????????????????????
16????????????]]>
17????</mx:Script> 7.進(jìn)行buffer后得到的圖形然后用來(lái)查詢(xún)相關(guān)結(jié)果了所以還需要添加IdentifyTask控件,代碼如下: 1<esri:IdentifyTask?id="identifyTask"?identifyComplete="identifyCompleteHandler(event)"?url="http://jh-53a435fbc0e8/ArcGIS/rest/services/USA/MapServer"/> 8.接下來(lái)開(kāi)始編寫(xiě)功能代碼,過(guò)程首先是用Draw工具在GraphicsLayer上畫(huà)幾何圖形,然后用GeometryService對(duì)幾何圖形進(jìn)行buffer,然后用分析得到的結(jié)果圖形進(jìn)行IdentifyTask出結(jié)果顯示在DataGrid中。
9.按照上面的過(guò)程首先添加ToggleButtonBar的itemClick事件方法itemClickHandler(event),代碼如下: ?1private?function?itemClickHandler(event:ItemClickEvent):void
?2????????????{
?3????????????????switch(event.index)
?4????????????????{
?5????????????????????case?0:
?6????????????????????{
?7????????????????????????drawToolbar.activate(Draw.MAPPOINT);
?8????????????????????????break;
?9????????????????????}

10????????????????????case?1:
11????????????????????{
12????????????????????????drawToolbar.activate(Draw.POLYLINE);
13????????????????????????break;
14????????????????????}

15????????????????????case?2:
16????????????????????{
17????????????????????????drawToolbar.activate(Draw.POLYGON);
18????????????????????????break;
19????????????????????}

20????????????????}

21????????????}
10.接著是Draw控件的drawEnd時(shí)間方法drawEndHandler(event),代碼如下: ?1private?function?drawEndHandler(event:DrawEvent):void
?2????????????{
?3????????????????var?myGraphic:Graphic=event.graphic;
?4????????????????//設(shè)置buffer參數(shù)
?5????????????????var?bufferParameters?:?BufferParameters?=?new?BufferParameters();
?6????????????????bufferParameters.features=[myGraphic];
?7????????????????//buffer距離半徑
?8????????????????bufferParameters.distances?=?[100000];
?9????????????????//buffer單位
10????????????????bufferParameters.unit?=?BufferParameters.UNIT_METER;
11????????????????//buffer空間參照系,102113為WKID是REST?API定義好的空間參照系的id
12????????????????bufferParameters.bufferSpatialReference?=?new?SpatialReference(102113);??????????????????????????
13????????????????//添加BUFFER_COMPLETE監(jiān)聽(tīng)
14????????????????myGeometryService.addEventListener(GeometryServiceEvent.BUFFER_COMPLETE,?bufferCompleteHandler);??
15????????????????//進(jìn)行buffer分析
16????????????????myGeometryService.buffer(?bufferParameters?);
17????????????}
11.上面的代碼中用GeometryService進(jìn)行buffer已經(jīng)有詳細(xì)注釋了,執(zhí)行buffer方法后會(huì)執(zhí)行bufferCompleteHandler方法,代碼如下: ?1//buffer完成后調(diào)用方法
?2????????????private?function?bufferCompleteHandler(?event?:?GeometryServiceEvent?)?:?void
?3????????????{
?4????????????????myGraphicsLayer.clear();
?5????????????????//移除BUFFER_COMPLETE監(jiān)聽(tīng)
?6????????????????myGeometryService.removeEventListener(GeometryServiceEvent.BUFFER_COMPLETE,bufferCompleteHandler);
?7????????????????//獲取buffer結(jié)果Graphic
?8????????????????for?each?(var?graphic?:?Graphic?in?event.graphics?)
?9????????????????{
10????????????????????//設(shè)置顯示樣式
11????????????????????graphic.symbol?=?sfs;
12????????????????????//添加到GraphicsLayer進(jìn)行顯示
13????????????????????myGraphicsLayer.add(?graphic?);
14????????????????????
15????????????????????var?identifyParams:IdentifyParameters=new?IdentifyParameters();
16????????????????????//查詢(xún)結(jié)果需要返回Geometry
17????????????????????identifyParams.returnGeometry=true;
18????????????????????//查詢(xún)?nèi)哂喾秶?/span>
19????????????????????identifyParams.tolerance=1;
20????????????????????//
21????????????????????identifyParams.width?=?myMap.width;
22????????????????????//
23????????????????????identifyParams.height?=?myMap.height;
24????????????????????//設(shè)置查詢(xún)的Geometry
25????????????????????identifyParams.geometry=graphic.geometry;
26????????????????????//從ComboBox獲取選擇的圖層index設(shè)置要查詢(xún)的圖層
27????????????????????//查詢(xún)圖層id為2的圖層,就是States層
28????????????????????identifyParams.layerIds=[2];
29????????????????????//查詢(xún)可見(jiàn)圖層
30????????????????????//identifyParams.layerOption=IdentifyParameters.LAYER_OPTION_VISIBLE;
31????????????????????identifyParams.mapExtent=myMap.extent;
32????????????????????//進(jìn)行查詢(xún)
33????????????????????identifyTask.execute(identifyParams);
34????????????????}

35????????????}
12.上面的代碼中在最后執(zhí)行了IdentifyTask的execute方法進(jìn)行Identify查詢(xún),查詢(xún)結(jié)束后會(huì)調(diào)用identifyCompleteHandler方法把結(jié)果顯示在DataGrid中,代碼如下: ?1//查詢(xún)完成后執(zhí)行的事件
?2????????????private?function?identifyCompleteHandler(event:IdentifyEvent):void
?3????????????{
?4????????????????myNav.activate(Navigation.PAN);
?5????????????????var?datas:Array=new?Array();
?6????????????????//myGraphicsLayer.clear();
?7????????????????//遍歷查詢(xún)結(jié)果把查詢(xún)到的feature添加到GraphicsLayer進(jìn)行高亮顯示
?8????????????????//同時(shí)把查詢(xún)到的元素的名稱(chēng)添加到datas對(duì)象數(shù)組用來(lái)DataGrid顯示用
?9????????????????for?each?(var?result:IdentifyResult?in?event.identifyResults)
10????????????????{
11????????????????????myGraphicsLayer.add(result.feature);
12????????????????????//datas.push(result.feature.attributes);????
13????????????????????datas.push({"value":result.value});
14????????????????}

15????????????????//設(shè)置mx:DataGrid的數(shù)據(jù)源
16????????????????datalist.dataProvider=datas;
17????????????}
13.這樣就完成了buffer的功能,運(yùn)行測(cè)試效果。

轉(zhuǎn)載于:https://www.cnblogs.com/hll2008/archive/2008/10/28/1321595.html

總結(jié)

以上是生活随笔為你收集整理的ArcGIS.Server.9.3和ArcGIS API for Flex的GeometryService和buffer分析(十)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。