http://blog.csdn.net/gisshixisheng/article/details/40540601

距离和面积的测量时GIS常见的功能,在本节,讲述的是通过GeometryService实现测量面积和距离。先看看实现后的效果:

                                

距离                                                                                         面积

首先,进行配置:

[javascript] view plaincopy print?
  1. //identify proxy page to use if the toJson payload to the geometry service is greater than 2000 characters.
  2. //If this null or not available the project and lengths operation will not work.  Otherwise it will do a http post to the proxy.
  3. esriConfig.defaults.io.proxyUrl = "/proxy";
  4. esriConfig.defaults.io.alwaysUseProxy = false;

接着,定义GeometryService和绘图工具:

[javascript] view plaincopy print?
  1. var gsvc = new GeometryService("http://localhost:6080/arcgis/rest/services/Utilities/Geometry/GeometryServer");
[javascript] view plaincopy print?
  1. var measureToolbar = new esri.toolbars.Draw(map);

接下来,绘图结束后将所绘制图形添加到地图上面,并返回测量结果,那么增加measureToolbar的draw-end事件:

[javascript] view plaincopy print?
  1. measureToolbar.on("draw-end",showMeasureResults);
  2. /**
  3. * 显示测量结果
  4. * @param evt
  5. */
  6. var showPt=null;
  7. function showMeasureResults(evt){
  8. measureToolbar.deactivate();
  9. map.setMapCursor("default");
  10. var geometry = evt.geometry;
  11. switch (geometry.type) {
  12. case "polyline":{
  13. var length = geometry.paths[0].length;
  14. showPt = new Point(geometry.paths[0][length-1],map.spatialReference);
  15. var lengthParams = new LengthsParameters();
  16. lengthParams.lengthUnit = esri.tasks.GeometryService.UNIT_KILOMETER;
  17. lengthParams.polylines = [geometry];
  18. gsvc.lengths(lengthParams);
  19. break;
  20. }
  21. case "polygon":{
  22. showPt = new Point(geometry.rings[0][0],map.spatialReference);
  23. var areasAndLengthParams = new AreasAndLengthsParameters();
  24. areasAndLengthParams.lengthUnit = esri.tasks.GeometryService.UNIT_KILOMETER;
  25. areasAndLengthParams.areaUnit = esri.tasks.GeometryService.UNIT_SQUARE_KILOMETERS;
  26. gsvc.simplify([geometry], function(simplifiedGeometries) {
  27. areasAndLengthParams.polygons = simplifiedGeometries;
  28. gsvc.areasAndLengths(areasAndLengthParams);
  29. });
  30. break;
  31. }
  32. }
  33. var graphic = new Graphic(geometry, getGeometrySymbol(geometry.type));
  34. map.graphics.add(graphic);
  35. }

根据geometry的类型,增加GeometryService的lengths-complete或者areas-and-lengths-complete事件:

[javascript] view plaincopy print?
  1. gsvc.on("lengths-complete",outputLength);
  2. function outputLength(evtObj){
  3. var result = evtObj.result;
  4. showmeasureInfo(showPt, result.lengths[0].toFixed(3), "千米");
  5. };
  6. gsvc.on("areas-and-lengths-complete",outputAreaAndLength);
  7. function outputAreaAndLength(evtObj){
  8. var result = evtObj.result;
  9. showmeasureInfo(showPt, result.areas[0].toFixed(3), "平方千米");
  10. };

最后,将返回的结果显示在地图上:

[javascript] view plaincopy print?
  1. /**
  2. * 显示测量结果
  3. * @param showPnt
  4. * @param data
  5. * @param unit
  6. */
  7. function measureInfo(showPnt,data,unit){
  8. var measureDiv=$("#measure");
  9. var isShow = false;
  10. var screenPnt=map.toScreen(showPnt);
  11. measureDiv.css("left",screenPnt.x+"px");
  12. measureDiv.css("top",screenPnt.y+"px");
  13. measureDiv.css("position","absolute");
  14. measureDiv.css("height","20px");
  15. measureDiv.css("display","block");
  16. isShow = true;
  17. measureDiv.css("z-index","999");
  18. if(unit==="千米"){
  19. measureDiv.css("width","90px");
  20. }
  21. else{
  22. measureDiv.css("width","130px");
  23. }
  24. $("#result").html(data+unit);
  25. $("#infoclose").click(function(){
  26. map.graphics.clear();
  27. measureDiv.css("display","none");
  28. isShow = false;
  29. });
  30. map.on("pan-start", function(){
  31. measureDiv.css("display","none");
  32. });
  33. map.on("pan-end", function(panend){
  34. if(isShow == true){
  35. screenPnt=map.toScreen(showPnt);
  36. measureDiv.css("left",screenPnt.x+"px");
  37. measureDiv.css("top",screenPnt.y+"px");
  38. measureDiv.css("position","absolute");
  39. measureDiv.css("height","20px");
  40. measureDiv.css("display","block");
  41. }
  42. });
  43. map.on("zoom-start", function(){
  44. measureDiv.css("display","none");
  45. });
  46. map.on("zoom-end", function(){
  47. if(isShow == true){
  48. screenPnt=map.toScreen(showPnt);
  49. measureDiv.css("left",screenPnt.x+"px");
  50. measureDiv.css("top",screenPnt.y+"px");
  51. measureDiv.css("position","absolute");
  52. measureDiv.css("height","20px");
  53. measureDiv.css("display","block");
  54. }
  55. });
  56. };

结果的显示我是通过一个div来显示的,并且做了缩放和地图移动的处理。

转载于:https://www.cnblogs.com/telwanggs/p/6973034.html

(转)Arcgis for Js之GeometryService实现测量距离和面积相关推荐

  1. 【ArcGIS微课1000例】0017:ArcGIS测量距离和面积工具的巧妙使用

    文章目录 1 交互式测量 2 测量要素 ArcGIS提供了快速测量距离和面积的工具,通过测量工具可对地图中的线和面进行测量. 工具条: 测量工具位于[工具]工具条上,如下图所示: 测量界面: 功能按钮 ...

  2. Openlayers测量距离与面积

    测量功能 距离的测量是根据鼠标在地图上绘制的点,实时计算出两点之间的实际距离,面积的测量是根据鼠标绘制的范围,通过地理坐标系的转换而计算出实际面积大小. 本博客参考:https://blog.csdn ...

  3. CAD图在线Web测量工具代码实现(测量距离、面积、角度等)

    CAD如今在各个领域均得到了普遍的应用并大大提高了工程技术人员的工作效率.在桌面端,AutoCAD测量工具已经非常强大:然后在Web端,如何准确.快速的对CAD图在Web进行测量呢? 功能 能Web在 ...

  4. (转)Arcgis for JS之对象捕捉

    http://blog.csdn.net/gisshixisheng/article/details/44098615 在web操作,如绘制或者测量的时候,为了精确,需要捕捉到某一图层的对象,在此,讲 ...

  5. ArcGis api配合vue开发入门系列(二)距离以及面积的测量

    正文 首先自定义个工具栏,包括测量距离与测量面积的工具以及地图漫游. 图标的话是用的iconfont.我是把这个工具单独写在一个组件里面,这个组件里面里面会用到一些操作地图的方法,我在map这个组件里 ...

  6. Arcgis for JS之对象捕捉

    在web操作,如绘制或者测量的时候,为了精确,需要捕捉到某一图层的对象,在此,讲解下如何在Arcgis for JS中实现捕捉对象. 首先,在地图中添加一个graphiclayer: gLayer = ...

  7. arcgis for js实现计算面积和周长

    1.arcgis for js中实现计算面积和周长需要两个服务地址,一个为地图切片资源地址,一个为计算面积和长度的工具服务地址,都可以在本地发布的arcgis server manager中拿到: 显 ...

  8. Arcgis for JS之Cluster聚类分析的实现

    原文:Arcgis for JS之Cluster聚类分析的实现 在做项目的时候,碰见了这样一个问题:给地图上标注点对象,数据是从数据库来 的,包含XY坐标信息的,通过graphic和graphicla ...

  9. control层alert弹出框乱码_【ArcGIS for JS】动态图层的属性查询(11)

    在真实需求中,我们不仅仅是将shp在地图中显示那么简单,我们往往要查询该图层的属性信息,我们在前面代码的基础上添加上属性查询. 1.1方法1(通过click直接获取) 1.1.1代码实现 给要素图层添 ...

最新文章

  1. 消灭 Java 代码的“坏味道”【转】
  2. 修改chrome的页面背景颜色
  3. P4语言编程快速开始 实践二
  4. stm8因为固定中断向量表地址引发的一系列问题及其处理
  5. 用Spring长轮询Tomcat
  6. 【H.264/AVC视频编解码技术】第一章【H264视频编码详细解析】
  7. .net与mysql,ASP.NET与MySql的连接
  8. python经典书籍推荐:Python面向对象编程指南 : Mastering Object-oriented
  9. ap 目标检测算法map_目标检测mAP怎么计算
  10. 将图像平移到画布中心python_python-如何用猕猴桃中的图像填充画布?
  11. SpringMVC 参数传递
  12. 190302每日一句
  13. IPy模块测试demo,打印C段ip列表
  14. 吴恩达 深度学习 2021版 作业
  15. 复杂网络-无标度网络BA模型
  16. wps文件没有保存怎么恢复,学这一招就够了!
  17. 标签条码打印软件如何创建连续数据变量
  18. office 2007 word空格消失的问题
  19. Xposed 模块开发入门
  20. kaldi 的安装和thchs30语音识别测试

热门文章

  1. (119)System Verilog 父类与子类对象复制(自定义函数)详解
  2. FPGA异步复位设计代码
  3. Verilog经验总结
  4. 12.FreerRTOS学习笔记-链表的使用
  5. C语言中static关键字详解
  6. Linux GPIO
  7. 详解-OTUS(大津法-最大类间方差)原理及C语言代码实现
  8. java excel相同的合并_java servlet导出EXCEL并合并EXCEL相同值的单元格(Apache POI技术)...
  9. 将整个表单设置为只读_如何将Git的界面语言设置为中文?
  10. 获取并编译linux源码,linux – 从源代码编译软件:如何收集依赖项列表?