ArcGIS.Server.9.3和ArcGIS API for Flex的GeometryService和buf
发布时间:2020-12-15 04:12:19 所属栏目:百科 来源:网络整理
导读:目的: 1.ArcGIS API for Flex 用GeometryService实现点、线、面的buffer分析 。 准备工作: 1. 在ArcGIS.Server.9.3发布一个叫USA的Map Service 。 2. 在ArcGIS.Server.9.3发布一个叫Geometry的Geometry Service,默认设置就可以了。 完成后的效果图: 开始
目的: 11.上面的代码中用GeometryService进行buffer已经有详细注释了,执行buffer方法后会执行bufferCompleteHandler方法,代码如下:
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
3. 然后在Map控件的右边在添加一个Grid用来显示buffer分析后的数据,代码如下:
2 mx:DataGrid?
="datalist"
="398"
="14"
="508"
mx:DataGrid
>
4.这里既然是用
Geometry Service实现buffer的当然还需要添加esri:GeometryService控件,它的url属性就是上面发布的
叫Geometry的Geometry Service的地址,代码如下:
esri:GeometryService?
="myGeometryService"
?url
="http://jh-53a435fbc0e8/ArcGIS/rest/services/Geometry/GeometryServer"
/>
5.这里采用在地图上画点、线、面然后根据画的几何图进行buffer,所以还需要ToggleButtonBar按钮组控件、Draw控件以及图形显示样式的定义,具体代码如下:
?1
6.point、polyline、polygon的icon定义如下:
<
mx:Script
>
<!
[CDATA[ 7.进行buffer后得到的图形然后用来查询相关结果了所以还需要添加IdentifyTask控件,代码如下:
assets/polyline.gif ?polyline:Class;? 13 assets/polygon.gif 14 ?polygon:Class;? 15 16 esri:IdentifyTask?
="identifyTask"
?identifyComplete
="identifyCompleteHandler(event)"
="http://jh-53a435fbc0e8/ArcGIS/rest/services/USA/MapServer"
/>
8.接下来开始编写功能代码,过程首先是用Draw工具在GraphicsLayer上画几何图形,然后用
GeometryService对几何图形进行buffer,然后用分析得到的结果图形进行IdentifyTask出结果显示在DataGrid中。
9.按照上面的过程首先添加ToggleButtonBar的itemClick事件方法itemClickHandler(event),代码如下: private?
function
?itemClickHandler(event:ItemClickEvent):
void
10.接着是Draw控件的drawEnd时间方法drawEndHandler(event),代码如下:
?3 ?4 ?6 ?8 ?9 10111 131415216 181920 ?drawEndHandler(event:DrawEvent):
//设置buffer参数 buffer距离半径????????????????bufferParameters.distances??[100000]; buffer单位????????????????bufferParameters.unit??BufferParameters.UNIT_METER; buffer空间参照系,102113为WKID是REST?API定义好的空间参照系的id????????????????bufferParameters.bufferSpatialReference??SpatialReference(102113);?????????????????????????? 添加BUFFER_COMPLETE监听????????????????myGeometryService.addEventListener(GeometryServiceEvent.BUFFER_COMPLETE,?bufferCompleteHandler);?? 进行buffer分析????????????????myGeometryService.buffer(?bufferParameters?); //
buffer完成后调用方法
12.上面的代码中在最后执行了IdentifyTask的execute方法进行
Identify查询,查询结束后会调用identifyCompleteHandler方法把结果显示在DataGrid中,代码如下:
移除BUFFER_COMPLETE监听????????????????myGeometryService.removeEventListener(GeometryServiceEvent.BUFFER_COMPLETE,bufferCompleteHandler); 获取buffer结果Graphicfor?each?(?graphic?:?Graphic?in?event.graphics?) 添加到GraphicsLayer进行显示????????????????????myGraphicsLayer.add(?graphic?); ?identifyParams:IdentifyParameters?IdentifyParameters(); 查询结果需要返回Geometry????????????????????identifyParams.returnGeometrytrue查询冗余范围????????????????????identifyParams.tolerance宽????????????????????identifyParams.width??myMap.width; 22高23????????????????????identifyParams.height??myMap.height; 24设置查询的Geometry25????????????????????identifyParams.geometrygraphic.geometry; 26从ComboBox获取选择的图层index设置要查询的图层27????????????????????查询图层id为2的图层,就是States层28????????????????????identifyParams.layerIds[29查询可见图层30identifyParams.layerOption=IdentifyParameters.LAYER_OPTION_VISIBLE;31????????????????????identifyParams.mapExtentmyMap.extent; 32进行查询33????????????????????identifyTask.execute(identifyParams); 3435 查询完成后执行的事件
?identifyCompleteHandler(event:IdentifyEvent):
13.这样就完成了buffer的功能,运行测试效果。
?datas:Array?Array(); myGraphicsLayer.clear();遍历查询结果把查询到的feature添加到GraphicsLayer进行高亮显示同时把查询到的元素的名称添加到datas对象数组用来DataGrid显示用?result:IdentifyResult??event.identifyResults) datas.push(result.feature.attributes);???? 设置mx:DataGrid的数据源????????????????datalist.dataProviderdatas; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |