[转]ArcGIS.Server.9.3和ArcGIS API for Flex的GeometryService和量算距离面积(十)


 6None.gif        <esri:ArcGISDynamicMapServiceLayer url="http://jh-53a435fbc0e8/ArcGIS/rest/services/USA/MapServer" />
 7None.gif        <esri:GraphicsLayer id="myGraphicsLayer" symbolFunction="mySymbolFunction"/>
 8None.gif    </esri:Map>
 9None.gif    </mx:Canvas>
10None.gif    <mx:Label verticalCenter="-176" left="98" id="minfo" fontSize="12"/>3.这样当然还需要Draw、ToggleButtonBar等,相应代码:

 1 None.gif < esri:SimpleLineSymbol  id ="sls"  style ="solid"  color ="0x00FF00"  width ="2"  alpha ="0.7" />
 2 None.gif     < esri:SimpleMarkerSymbol  id ="sms"  style ="diamond"  color ="0x00FF00"  size ="15"  alpha ="0.7" />
 3 None.gif     < esri:SimpleFillSymbol  id ="sfs"  color ="0x00FF00"  alpha ="0.7" >
 4 None.gif     < esri:SimpleLineSymbol  color ="0x000000" />
 5 None.gif     </ esri:SimpleFillSymbol >
 6 None.gif     < esri:Draw  id ="drawToolbar"  map ="{myMap}"  graphicsLayer ="{myGraphicsLayer}"  drawEnd ="drawEndHandler(event)"   />
 7 None.gif     < mx:ToggleButtonBar  verticalCenter ="-174"   itemClick ="itemClickHandler(event)"  toggleOnClick ="true"  left ="10" >
 8 None.gif         < mx:dataProvider >
 9 None.gif         < mx:Array >
10 None.gif         < mx:Object  icon ="{polyline}"   />
11 None.gif         < mx:Object  icon ="{polygon}"   />
12 None.gif         </ mx:Array >
13 None.gif         </ mx:dataProvider >
14 None.gif     </ mx:ToggleButtonBar >

4.最后还需要添加GeometryService,代码如下:

1 None.gif < esri:GeometryService  id ="geometryService"  url ="http://jh-53a435fbc0e8/ArcGIS/rest/services/Geometry/GeometryServer"  showBusyCursor ="true"  concurrency ="last" >
2 None.gif     </ esri:GeometryService >

5.这样界面以及控件都已经设置完毕了,开始编写代码首先是GraphicsLayer控件的symbolFunction,就设置GraphicsLayer控件中绘图的显示样式,这个前面几个例子已经用到过多次了就不做详细说明了,代码如下:

 1 None.gif private  function  mySymbolFunction(graphic:Graphic):Symbol
 2 ExpandedBlockStart.gifContractedBlock.gif             dot.gif {
 3InBlock.gif                var result:Symbol;
 4InBlock.gif                //根据元素的类型进行显示样式的设定
 5InBlock.gif                switch(graphic.geometry.type)
 6ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
 7InBlock.gif                    case Geometry.MAPPOINT:
 8ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{
 9InBlock.gif                        result=sms;
10InBlock.gif                        break;
11ExpandedSubBlockEnd.gif                    }

12InBlock.gif                    case Geometry.POLYLINE:
13ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{
14InBlock.gif                        result=sls;
15InBlock.gif                        break;
16ExpandedSubBlockEnd.gif                    }

17InBlock.gif                    case Geometry.POLYGON:
18ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{
19InBlock.gif                        result=sfs;
20InBlock.gif                        break;
21ExpandedSubBlockEnd.gif                    }

22ExpandedSubBlockEnd.gif                }

23InBlock.gif                return result;
24ExpandedBlockEnd.gif            }

6.接下来按照事件的执行顺序来说明代码,首先是执行ToggleButtonBar控件的itemClick的事件方法itemClickHandler(event):

 1 None.gif // ToggleButtonBar的按钮点击事件用设置drawToolbar操作类型
 2 None.gif             private  function  itemClickHandler(event:ItemClickEvent): void
 3 ExpandedBlockStart.gifContractedBlock.gif             dot.gif {
 4InBlock.gif                switch(event.index)
 5ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{                   
 6InBlock.gif                    case 0://画线
 7ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{
 8InBlock.gif                        drawToolbar.activate(Draw.POLYLINE);
 9InBlock.gif                        break;
10ExpandedSubBlockEnd.gif                    }

11InBlock.gif                    case 1://画面
12ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{
13InBlock.gif                        drawToolbar.activate(Draw.POLYGON);
14InBlock.gif                        break;
15ExpandedSubBlockEnd.gif                    }

16ExpandedSubBlockEnd.gif                }

17ExpandedBlockEnd.gif            }

7.接着是Draw控件的drawEnd事件方法drawEndHandler(event):

1 None.gif   // 画图操作完成后执行的事件
2 None.gif             private  function  drawEndHandler(event:DrawEvent): void
3 ExpandedBlockStart.gifContractedBlock.gif             dot.gif {
4InBlock.gif                //为GeometryService添加PROJECT_COMPLETE完成后监听事件
5InBlock.gif                geometryService.addEventListener(GeometryServiceEvent.PROJECT_COMPLETE,projectCompleteHandler);
6InBlock.gif                //进行project操作
7InBlock.gif                geometryService.project([event.graphic], new SpatialReference(32618));
8InBlock.gif                
9ExpandedBlockEnd.gif            }

8.上面的代码中是进行GeometryService的project操作,为GeometryService控件添加了PROJECT_COMPLETE的完成后监听事件,所接着是projectCompleteHandler方法:

 1 None.gif private  function  projectCompleteHandler(event:GeometryServiceEvent): void
 2 ExpandedBlockStart.gifContractedBlock.gif             dot.gif {
 3InBlock.gif                //去除GeometryService的PROJECT_COMPLETE完成后监听事件
 4InBlock.gif                geometryService.removeEventListener(GeometryServiceEvent.PROJECT_COMPLETE,projectCompleteHandler);
 5InBlock.gif                if(event.graphics[0].geometry.type=="esriGeometryPolygon")
 6ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
 7InBlock.gif                    //如果是面就为GeometryService添加SIMPLIFY_COMPLETE完成后监听事件
 8InBlock.gif                    geometryService.addEventListener(GeometryServiceEvent.SIMPLIFY_COMPLETE,simplifyCompleteHandler);
 9InBlock.gif                    //进行simplify操作
10InBlock.gif                    geometryService.simplify(event.graphics);
11ExpandedSubBlockEnd.gif                }

12InBlock.gif                else if(event.graphics[0].geometry.type=="esriGeometryPolyline")
13ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
14InBlock.gif                    //如果是线就为GeometryService添加LENGTHS_COMPLETE完成后监听事件
15InBlock.gif                    geometryService.addEventListener(GeometryServiceEvent.LENGTHS_COMPLETE,lengthsCompleteHandler);
16InBlock.gif                    //进行lengths操作
17InBlock.gif                    geometryService.lengths(event.graphics);
18ExpandedSubBlockEnd.gif                }

19ExpandedBlockEnd.gif            }

9.在上面的代码中判定是线还是面然后在分别执行不同的方法和添加监听事件,这里首先说面的情况下是进行simplify操作并且添加了SIMPLIFY_COMPLETE完成监听事件方法simplifyCompleteHandler:

1 None.gif // simplify完成后执行的事件调用areasAndLengths方法
2 None.gif             private  function  simplifyCompleteHandler(event : GeometryServiceEvent): void
3 ExpandedBlockStart.gifContractedBlock.gif             dot.gif {
4InBlock.gif                geometryService.removeEventListener(GeometryServiceEvent.SIMPLIFY_COMPLETE,simplifyCompleteHandler);
5InBlock.gif                geometryService.addEventListener(GeometryServiceEvent.AREA_LENGTHS_COMPLETE,areaslengthsCompleteHandler);
6InBlock.gif                var geometry:Geometry=event.graphics[0].geometry;
7InBlock.gif                var newGraphic:Graphic=new Graphic(geometry);
8InBlock.gif                geometryService.areasAndLengths([new Graphic(geometry)]);
9ExpandedBlockEnd.gif            }

10.上面的代码中是进行面的simplify操作并且完成后执行areasAndLengths并且添加完成后的监听事件areaslengthsCompleteHandler:

1 None.gif   // areasAndLengths完成后执行的事件显示把面积显示在Label上
2 None.gif             private  function  areaslengthsCompleteHandler(event : GeometryServiceEvent ) :  void
3 ExpandedBlockStart.gifContractedBlock.gif             dot.gif {
4InBlock.gif                geometryService.removeEventListener(GeometryServiceEvent.AREA_LENGTHS_COMPLETE,areaslengthsCompleteHandler);
5InBlock.gif                minfo.text="面积:"+event.arealengths.areas/1000000+"km2";
6ExpandedBlockEnd.gif            }

11.回到第9步,当为线的情况就不做simplify操作直接进行lengths操作并且添加完成后的监听方法lengthsCompleteHandler:

1 None.gif // lengths完成后执行的事件显示把线距离显示在Label上
2 None.gif             private  function  lengthsCompleteHandler(event : GeometryServiceEvent): void
3 ExpandedBlockStart.gifContractedBlock.gif             dot.gif {
4InBlock.gif                geometryService.removeEventListener(GeometryServiceEvent.LENGTHS_COMPLETE,lengthsCompleteHandler);
5InBlock.gif                minfo.text="距离:"+event.lengths[0]/1000+"km";
6ExpandedBlockEnd.gif            }

12.这样就完成了距离和面积的量算功能,这样要特别地图数据等情况进行project、simplify操作否则会得到不正确的结果。

转载于:https://www.cnblogs.com/xranycall/archive/2010/08/18/1802617.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值