目的:
1.ArcGIS API for Flex用GeometryService实现点、线、面的buffer分析。
准备工作:
1.在ArcGIS.Server.9.3发布一个叫USA的Map Service。
2.在ArcGIS.Server.9.3发布一个叫Geometry的Geometry Service,默认设置就可以了。
完成后的效果图:

开始:
0.首先介绍一下Geometry Service,Geometry Service是给程序提供几何计算如 buffering, simplifying, calculating areas 、lengths,  projecting等功能,Geometry Service可以用来代替ArcObjects 或geoprocessing service等做的这些几何计算,它是ArcGIS Server 9.3提供的新功能,本篇就是用它来实现buffer的分析。
1.启动Flex Builder3新建工程以及引入1.0正式版的ArcGIS API for Flex library的开发包。
2.新建bufferTest.mxml页面,添加Map、ArcGISDynamicMapServiceLayer、GraphicsLayer等。具体代码如下:

1<mx:Canvaswidth="490"height="401"borderStyle="solid"borderThickness="3"verticalCenter="16"left="10">2<esri:Mapid="myMap"crosshairVisible="true">3<esri:ArcGISDynamicMapServiceLayerurl="http://jh-53a435fbc0e8/ArcGIS/rest/services/USA/MapServer"/>4<esri:GraphicsLayerid="myGraphicsLayer"/>5</esri:Map>6</mx:Canvas>

3. 然后在Map控件的右边在添加一个Grid用来显示buffer分析后的数据,代码如下:

1<mx:DataGridid="datalist"height="398"verticalCenter="14"borderStyle="solid"borderThickness="3"left="508">2</mx:DataGrid>

4.这里既然是用Geometry Service实现buffer的当然还需要添加esri:GeometryService控件,它的url属性就是上面发布的叫Geometry的Geometry Service的地址,代码如下:

1<esri:GeometryServiceid="myGeometryService"url="http://jh-53a435fbc0e8/ArcGIS/rest/services/Geometry/GeometryServer"/>

5.这里采用在地图上画点、线、面然后根据画的几何图进行buffer,所以还需要ToggleButtonBar按钮组控件、Draw控件以及图形显示样式的定义,具体代码如下:

1<esri:SimpleFillSymbolid="sfs"color="0xFF0000"alpha="0.6">2</esri:SimpleFillSymbol>3<esri:Drawid="drawToolbar"map="{myMap}"graphicsLayer="{myGraphicsLayer}"drawEnd="drawEndHandler(event)"/>4<mx:ToggleButtonBarverticalCenter="-203"itemClick="itemClickHandler(event)"toggleOnClick="true"left="11">5<mx:dataProvider>6<mx:Array>7<mx:Objecticon="{point}"/>8<mx:Objecticon="{polyline}"/>9<mx:Objecticon="{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            publicvarpoint:Class;78            [Bindable]9            [Embed(source="assets/polyline.gif")]10            publicvarpolyline:Class;1112            [Bindable]13            [Embed(source="assets/polygon.gif")]14            publicvarpolygon:Class;15            16            ]]>17</mx:Script>

7.进行buffer后得到的图形然后用来查询相关结果了所以还需要添加IdentifyTask控件,代码如下:

1<esri:IdentifyTaskid="identifyTask"identifyComplete="identifyCompleteHandler(event)"url="http://jh-53a435fbc0e8/ArcGIS/rest/services/USA/MapServer"/>

8.接下来开始编写功能代码,过程首先是用Draw工具在GraphicsLayer上画几何图形,然后用GeometryService对几何图形进行buffer,然后用分析得到的结果图形进行IdentifyTask出结果显示在DataGrid中。
9.按照上面的过程首先添加ToggleButtonBar的itemClick事件方法itemClickHandler(event),代码如下:

1privatefunctionitemClickHandler(event:ItemClickEvent):void2{3switch(event.index)4{5case0:6{7                        drawToolbar.activate(Draw.MAPPOINT);8break;9                    }10case1:11{12                        drawToolbar.activate(Draw.POLYLINE);13break;14                    }15case2:16{17                        drawToolbar.activate(Draw.POLYGON);18break;19                    }20                }21            }

10.接着是Draw控件的drawEnd时间方法drawEndHandler(event),代码如下:

1privatefunctiondrawEndHandler(event:DrawEvent):void2{3varmyGraphic:Graphic=event.graphic;4//设置buffer参数5varbufferParameters : BufferParameters=newBufferParameters();6                bufferParameters.features=[myGraphic];7//buffer距离半径8bufferParameters.distances=[100000];9//buffer单位10bufferParameters.unit=BufferParameters.UNIT_METER;11//buffer空间参照系,102113为WKID是REST API定义好的空间参照系的id12bufferParameters.bufferSpatialReference=newSpatialReference(102113);13//添加BUFFER_COMPLETE监听14myGeometryService.addEventListener(GeometryServiceEvent.BUFFER_COMPLETE, bufferCompleteHandler);15//进行buffer分析16myGeometryService.buffer( bufferParameters );17            }

11.上面的代码中用GeometryService进行buffer已经有详细注释了,执行buffer方法后会执行bufferCompleteHandler方法,代码如下:

1//buffer完成后调用方法2privatefunctionbufferCompleteHandler( event : GeometryServiceEvent ) :void3{4                myGraphicsLayer.clear();5//移除BUFFER_COMPLETE监听6myGeometryService.removeEventListener(GeometryServiceEvent.BUFFER_COMPLETE,bufferCompleteHandler);7//获取buffer结果Graphic8foreach (vargraphic : Graphicinevent.graphics )9{10//设置显示样式11graphic.symbol=sfs;12//添加到GraphicsLayer进行显示13myGraphicsLayer.add( graphic );1415varidentifyParams:IdentifyParameters=newIdentifyParameters();16//查询结果需要返回Geometry17identifyParams.returnGeometry=true;18//查询冗余范围19identifyParams.tolerance=1;20//21identifyParams.width=myMap.width;22//23identifyParams.height=myMap.height;24//设置查询的Geometry25identifyParams.geometry=graphic.geometry;26//从ComboBox获取选择的图层index设置要查询的图层27//查询图层id为2的图层,就是States层28identifyParams.layerIds=[2];29//查询可见图层30//identifyParams.layerOption=IdentifyParameters.LAYER_OPTION_VISIBLE;31identifyParams.mapExtent=myMap.extent;32//进行查询33identifyTask.execute(identifyParams);34                }35            }

12.上面的代码中在最后执行了IdentifyTask的execute方法进行Identify查询,查询结束后会调用identifyCompleteHandler方法把结果显示在DataGrid中,代码如下:

1//查询完成后执行的事件2privatefunctionidentifyCompleteHandler(event:IdentifyEvent):void3{4                myNav.activate(Navigation.PAN);5vardatas:Array=newArray();6//myGraphicsLayer.clear();7//遍历查询结果把查询到的feature添加到GraphicsLayer进行高亮显示8//同时把查询到的元素的名称添加到datas对象数组用来DataGrid显示用9foreach (varresult:IdentifyResultinevent.identifyResults)10{11                    myGraphicsLayer.add(result.feature);12//datas.push(result.feature.attributes);13datas.push({"value":result.value});14                }15//设置mx:DataGrid的数据源16datalist.dataProvider=datas;17            }

13.这样就完成了buffer的功能,运行测试效果。

转载于:https://www.cnblogs.com/hll2008/archive/2008/10/28/1321595.html

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

  1. ArcGIS.Server.9.3和ArcGIS API for JavaScript实现Identify功能(六)

    目的: 1.ArcGIS.Server.9.3和ArcGIS API for JavaScript实现Identify功能,鼠标点击后获取被点击对象的然后以infoWindow的方式显示点击对象的属性 ...

  2. [转]ArcGIS.Server.9.3和ArcGIS API for Flex实现Query查询定位中心功能(七)

    目的: 1.ArcGIS API for Flex实现Query查询定位中心功能,进行属性查图的功能,选择图层然后输入查询语句进行查询把查到的地理元素高亮显示同时在右边的Grid中显示查到的数据,然后 ...

  3. [转]ArcGIS.Server.9.3和ArcGIS API for Flex实现Toolbar功能(四)

    目的: 1.ArcGIS API for Flex实现Toolbar功能,包括ZoomIn.ZoomOut.Pan.PrevExtent.NextExtent.FullExtent功能.准备工作: 1 ...

  4. ArcGIS Server Java 9.3 REST API的中文查询问题的解决方案

    [2009.2.18补注]这个问题在SP1 for Linux中修复,SP1 for Windows下问题更加严重,如果打了SP1 for Windows,还想使用REST服务,就必须使用Linux或 ...

  5. 一、ArcGIS Server篇:利用ArcGIS Server发布动态地图服务

    写在前面的话:本篇博客参考 在WebGIS开发过程中,我们所需要的数据不仅仅来自于ArcGIS online,有时候我们需要发布自己的数据服务,在本篇博客中主要说明一下如何利用ArcGIS Serve ...

  6. 关于ARCGIS SERVER 9.3的ArcGIS Server Manager出现“/”应用程序中的服务器错误

    "/ArcGIS/Manager"应用程序中的服务器错误. ------------------------------------------------------------ ...

  7. C# 调用ArcGIS server admin api

    一.AGS server admin api 介绍 1.1什么是admin api AGS Server Admin api 官方的称呼是 AGS Server administrator api, ...

  8. 《精通ArcGIS Server 应用与开发》——第 1 章 ArcGIS 10简介1.1 ArcGIS 10体系结构1...

    本节书摘来自异步社区<精通ArcGIS Server 应用与开发>一书中的第1章,第1.1节,作者: 何正国 , 杜娟 , 毛海亚 更多章节内容可以访问云栖社区"异步社区&quo ...

  9. ArcGIS Server 开发系列(一)--编程框架总览

    ArcGIS Server是一个发布企业级GIS应用程序的综合平台,如果想对ArcGIS Server基础有更多的了解,可以先看看<ArcGIS Server 体系结构>.ESRI(中国) ...

最新文章

  1. 一文让你完全入门EM算法
  2. 曝光丨探访哈工大机器人的秘密基地(图)
  3. 拼多多面试真题:如何用 Redis 统计独立用户访问量!
  4. oracle最新scn补丁,更新:Oracle全面修正了关于DB Link和SCN补丁的公告
  5. golang java耗内存_分析golang内存占用情况
  6. vue js 反编译_学会了Vue,前端面试却没找到工作?
  7. 分布式系统设计理念为何这么难学?
  8. noip普及组2018T2 龙虎斗
  9. Asp.Net 4.0 SEO增强之 UrlRouting
  10. python按位与怎么算_基础的十进制按位运算总结与在Python中的计算示例
  11. dis的前缀单词有哪些_学好单词得靠词根词缀来帮忙
  12. 编译原理用C语言编写递归下降分析程序,编译原理递归下降分析器(C语言).pdf
  13. 3D打印在学生教育的有哪些应用?
  14. 南昌航空大学计算机控制实验,南昌航空大学关于实验教学的管理办法
  15. matlab pie 空隙,编码解决饼图(Pie)的标签重叠问题
  16. JavaScript基础及画布
  17. 论游戏中Buff的实现
  18. 手机Android存储性能优化架构分析
  19. PDF文件如何删除页面
  20. Win7系统不同程序无法同时播放声音是怎么回事?

热门文章

  1. Matlab调用Java类访问数据库
  2. 基于阿里的Node全栈之路(二)阿里负载均衡的HTTPS优化方案
  3. Centos 安装 NodeJS
  4. 网络优化正在从经验型优化向大数据关联分析优化转变
  5. spring事务管理 TransactionProxyFactoryBean源码分析
  6. Retrofit2.0+ .Net MVC4(WebApi) 上传多张图片
  7. shell中(字符串截取)
  8. DDos***种类,原理,简单预防
  9. 微信/QQ 中已停止访问该网页的处理办法
  10. android Merge标签