一、距离测量和面积测量是GIS必备的功能效果图如下:

二、量算函数(核心)

                //量算函数function mapClick(evt) {if(disFun){inputPoints.push(evt.mapPoint);var  textSymbol;if(inputPoints.length ===1){textSymbol = new TextSymbol("起点",startFont,new Color([204,102,51]));textSymbol.setOffset(0,-20);map.graphics.add(new Graphic(evt.mapPoint,textSymbol));}map.graphics.add(new Graphic(evt.mapPoint,makerSymbol));if(inputPoints.length >=2){//    设置距离测量的参数var  lengthParams = new LengthsParameters();lengthParams.distanceUnit = GeometryService.UNIT_METER;lengthParams.calculationType = "preserveShape";var p1 = inputPoints[inputPoints.length-2];var p2 = inputPoints[inputPoints.length-1];if(p1.x ===p2.x &&p1.y===p2.y){return;}//    z在两点之间划线将两点链接起来var polyline = new Polyline(map.spatialReference);polyline.addPath([p1,p2]);lengthParams.polylines=[polyline];// 根据参数,动态的计算长度geometryService.lengths(lengthParams,function(distance){var _distance = number.format(distance.lengths[0]/1000);totleDistance+=parseFloat(_distance);//计算总长度var beetwentDistances = _distance+"千米";var tdistance = new TextSymbol(beetwentDistances,startFont,new Color([204,102,51]));tdistance.setOffset(40,-3);map.graphics.add(new Graphic(p2,tdistance));if(totalGraphic){map.graphics.remove(totalGraphic);}var total=number.format(totleDistance,{pattern:"#.000"});//    设置总长度的显示样式,并添加到地图上var totalSymbol=new TextSymbol("总长度:"+total+"千米",startFont,new Color([204,102,51]));totalSymbol.setOffset(40,-15);totalGraphic= map.graphics.add(new Graphic(p2,totalSymbol));});}}}

三、注册事件

  //给按钮添加绑定事件$(".functionWrap").click(function () {var value=$(this).attr("name")switch (value) {case "平移":navToolbar.activate(Navigation.PAN);break;case "拉框缩小":navToolbar.activate(Navigation.ZOOM_OUT);break;case "拉框放大":navToolbar.activate(Navigation.ZOOM_IN);break;case "全图":map.centerAndZoom(([110, 38.5]), 5);break;case "距离测量":distanceMeasure();break;case "面积测量":areaMeasure();break;case "清除标记":clearAction();break;}});

四、添加图形函数

 // 添加图形函数function addToMap(evt) {if(disFun||areaFun){var geometry = evt.geometry;//绘制图形的geometry//将绘制的图形添加到地图上去var symbol = null;switch (geometry.type){case "point":symbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CIRCLE,10,new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color([255,0,0]),1),new Color([0,255,0,0.25]));break;case "polyline":symbol  = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color([255,0,0,0.8]),2);break;case "polygon":symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color([255,0,0]),2),new Color([255,255,0,0.25]));break;case "extent":symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color([255,0,0]),2),new Color([255,255,0,0.25]));break;}map.graphics.add(new Graphic(geometry,symbol));if(disFun){inputPoints.splice(0,inputPoints.length);//删除数组中的所有元素totleDistance =0.0;totalGraphic = null;}else if(areaFun){//设置面积和长度的参数var areasAndLengthsParameters =new AreasAndLengthsParameters();areasAndLengthsParameters.lengthUnit = GeometryService.UNIT_METER;//设置距离单位areasAndLengthsParameters.areaUnit = GeometryService.UNIT_SQUARE_KILOMETERS;//设置面积单位geometryService.simplify([geometry],function (simplifiedGeometries) {areasAndLengthsParameters.polygons = simplifiedGeometries;geometryService.areasAndLengths(areasAndLengthsParameters,function (result) {var font =new Font("16px",Font.STYLE_NORMAL,Font.VARIANT_NORMAL,Font.WEIGHT_BOLDER);var areaResult = new TextSymbol(number.format(result.areas[0],{pattern:'#.000'})+"平方公里",font,new Color([204,102,51]));var spoint = new Point(geometry.getExtent().getCenter().x,geometry.getExtent().getCenter().y,map.spatialReference);map.graphics.add(new Graphic(spoint,areaResult));//在地图上显示测量的面积});});}}}

五、点击下载完整代码

arcgis api for js实现距离测量和面积测量(完整版本)相关推荐

  1. arcgis api for js共享干货系列之一自写算法实现地图量算工具

    众所周知,使用arcgis api for js实现地图的量算工具功能,无非是调用arcgisserver的Geometry服务(http://localhost:6080/arcgis/rest/s ...

  2. arcgis api for js共享干货系列之二自定义Navigation控件样式风格

    arcgis api for js默认的Navigation控件样式风格如下图: 这样的风格不能说不好,各有各的爱好,审美观,这里也不是重点,这里的重点是如何自定义一套自己喜欢的样式风格呢:自己自定义 ...

  3. arcgis api for js之echarts开源js库实现地图统计图分析

    前面写过一篇关于arcgis api for js实现地图统计图的,具体见:http://www.cnblogs.com/giserhome/p/6727593.html 那是基于dojo组件来实现图 ...

  4. Arcgis API For js 的离线部署

    之前,因为所做的项目不大,一直用的都是在线的Arcgis API For js,后来意识到了搞开发,离线部署是必须要掌握的,在线资源属于不可控范畴,能够避免的尽量避免.所以有了这次记录,以防以后忘记. ...

  5. 【完整的WebGIS教程】7.1 ArcGIS API for JS行政区划导航(上)

    前一节回顾 在[完整的WebGIS教程]6.1 使用ArcGIS Server发布要素服务中,我们发布了三个要素服务,分别是省.市.区县的行政区划边界,其属性表中包含了Code(地区编码)和Name( ...

  6. GIS开发之二维地下管线综合管理系统(Arcgis)第四节 使用arcgis api for js 加载天地图

    GIS开发之二维地下管线综合管理系统(Arcgis)第四节 使用arcgis api for js 加载天地图 核心js文件 调用方式 调用结果 核心js文件 #通过定义加载天地图js文件,引用并组织 ...

  7. ArcGIS API for JS 4.x + Vue 【1】—— 显示地图和添加点线面

    系列文章目录 [1] ArcGIS API for JS 4.x + Vue 之 显示地图和添加点线面 文章目录 系列文章目录 前言 一.显示地图 安装依赖 1. 添加模块 2. 引入CSS样式 3. ...

  8. arcgis api for js入门开发系列三地图工具栏(含源代码)

    上一篇实现了demo的地图加载展示,在上篇实现的基础上,新增了地图工具栏以及通用地图控件功能,比如地图框选缩放.地图漫游.清空.量算工具.地图导航控件.地图比例尺控件.地图鹰眼图等等,总共分为5个部分 ...

  9. 使用HTML5定位的经纬度来实现ArcGIS API for js 中的定位

    文章目录 前言 一.arcgis api定位 二.HTML5+Arcgis JS实现定位 2.1 利用HTML5获取当前位置的经纬度 2.2 点击按钮执行定位 2.3 全部代码 总结 前言 定位功能的 ...

最新文章

  1. 数据库为何不建议部署在Docker容器内
  2. 13.QT信号槽的连接方式
  3. 线性代数的问题:是否存在这样的矩阵,它满足正交对角化的条件,但它不是实对称矩阵呢?
  4. Visual C++中 #include stdafx.h 头文件的用法
  5. MySQL数据查询新人须知
  6. 一文讲清,MySQL数据库一行数据在磁盘上是怎么存储的?
  7. element-UI响应式(布局原理)讲解 - 贴文篇
  8. 怎么禁用域控下的计算机配置,怎样从Windows域环境下禁用USB口设备
  9. 使用setTimeout 来实现setInterval的效果
  10. html加图形验证码,canvas基础之图形验证码的示例
  11. 李佳琦618直播清单都在这张思维导图上了
  12. 前端协商缓存强缓存如何使用_强制缓存(200)和协商缓存(304)
  13. Shapefile属性操作之删
  14. 通常我们将python语言程序保存在一个后缀_c 语言程序设计 沈显君课后答案
  15. 左飞老师——凝聚人生智慧的6句话
  16. AltiumDesigner快捷键——SCH和SCHLIB编辑快捷键
  17. ESP8266 PMW介绍
  18. pytorch局部范围内禁用梯度计算,no_grad、enable_grad、set_grad_enabled使用举例
  19. 鼠标光标变成横线了!
  20. flappybird原理解析 JQuery版本

热门文章

  1. 《A1 A Distributed In-Memory Graph Database》论文阅读
  2. 【cofface作品】中兴U880 recovery 5.0.2.8中文版
  3. 让老人用Windows Vista更方便:讲述人和放大镜
  4. Oracle bulk 示例
  5. oracle数据库监听问题,Oracle数据库监听器的问题
  6. flyme Android7.0 root,手把手教你如何免ROOT卸载Flyme7系统自带APP
  7. [笔记摘录]影视美学通论_2023-1-31
  8. Vertica 向 GBase8a 迁移指南之DECIMAL(P,S),NUMERIC(P,S)
  9. IOS ATS 配置
  10. Go web 开发数据库管理平台,利用远程过程调用(RPC)实现对MySQL数据库的管理和使用