微信小程序地图绘制线段并且测量(实例代码)


Posted in Javascript onJanuary 02, 2020

上图:

微信小程序地图绘制线段并且测量(实例代码)

上代码:wxml

<map id="tb_map" longitude="{{longitude}}" latitude="{{latitude}}" scale="14" bindtap="clickMapTap" bindcontroltap="controltap" bindregiοnchange="regionchange" markers="{{marks}}" polygons="{{polygons}}" polyline="{{polyline}}" include-points="{{includePoints}}"
  bindmarkertap="markertap" show-compass="true" show-location="true" style="width: 100%; height:{{mapH}}rpx">
  <cover-image style="position: absolute;left:20px;top:100px;width:20px;height:20px" src="/images/qun.png" bindtap="getLocalImage">
  </cover-image>
  <cover-view class="draw" style="position: absolute;left:87%;top:20px">
 
   <cover-image class="map_buttons" style="width:30px;height:30px" bindtap="drawTap" src="/images/draw.png" />
   <cover-image class="map_buttons" style="width:30px;height:30px" bindtap="measureTap" src="/images/measure.png" />
   <cover-image class="map_buttons" style="width:30px;height:30px" bindtap="backTap" src="/images/back.png" />
   <cover-image class="map_buttons" style="width:30px;height:30px" bindtap="finishTap" src="/images/finish.png" />
  </cover-view>
 
 </map>

这里有很多按钮不要,cover-image不仅可以看到,并且能够点击,直接写image虽然也能看见貌似无法点击。记下这个坑

主要的事就点击map的单击事件, bindtap="clickMapTap",和数据的展示 polyline="{{polyline}}" 和markers="{{marks}}"

js:

measureTap是给地图添加状态用的,在page的data声明:mapstate(地图的状态);然后在measureTap修改mapstate的值即可

主要是点击事件,思路,点击地图获取经纬度,判断点的数量,来完成操作上代码

clickMapTap: function(e) { //单击地图事件
   var mark = new Object();//声明一个mark对象
   mark.id = this.data.marks.length;
   mark.longitude = e.detail.longitude; //经度
   mark.latitude = e.detail.latitude;
   mark.iconPath = "/images/point.png";
   mark.width = 10;
   mark.height = 12;
//在data中声明一个curPoints 来记录点击所有额点,在完成绘制的时候清空点。
   var length = this.data.curPoints.push({
    longitude: e.detail.longitude,
    latitude: e.detail.latitude
   })
    var length = this.data.curPoints.length;
    if (length > 1) { //添加线上的超过一个的点,每次吧距离叠加上去
 
     var p2 = this.data.curPoints[length-1]
     var p1 = this.data.curPoints[length-2]
     dis += util.distance(p1, p2);
     let datas = Number(dis); //转为字符串
     let datas2 = datas.toFixed(2) + "米";//保留两位小数
     var x = -(datas2.length * 1)//设置文字向左偏移
     mark.label = {
      fontSize: 14,
      anchorX: x,
      anchorY: 0,
      content: datas2,
      textAlign: 'center',
      color: '#000000',
     }
     this.data.marks.push(mark);
     // console.log(this.data.curPoints)
//这里地图上用的polyline是一个线集合对象,所以,如果只放一条线是无法看见的。
     var pl = [{
      points: this.data.curPoints,
      color: "#0066FF",
      width: 2,
      dottedLine: false,
     }];
    //更改界面数据
     this.setData({
      marks: this.data.marks,
      polyline:pl
     })
     
    } else { //添加线上的第一个点
     this.data.marks.push(mark);
     this.setData({
      marks: this.data.marks
 
     })
   }
  }
 },

工具类Util:

//给定的经度1,纬度1;经度2,纬度2. 计算2个经纬度之间的距离。
//<returns>距离 (单位:米)</returns>
//util的方法是通过读取类文件,然后通过映射获取的,所以需要在使用的page中加入
//var util = require('../../../utils/util.js');相当于一个导入的过程。
function distance(p1, p2) {
 //用haversine公式计算球面两点间的距离。
 //经纬度转换成弧度
 var lat1 = p1.latitude * Math.PI / 180;
 var lon1 = p1.longitude * Math.PI / 180;
 var lat2 = p2.latitude * Math.PI / 180;
 var lon2 = p2.longitude * Math.PI / 180;
 //差值
 var vLon = Math.abs(lon1 - lon2);
 var vLat = Math.abs(lat1 - lat2);
 //h is the great circle distance in radians, great circle就是一个球体上的切面,它的圆心即是球心的一个周长最大的圆。
 var v = Math.sin(vLat / 2);
 var v1 = Math.sin(vLon / 2);
 var h = v * v + Math.cos(lat1) * Math.cos(lat2) * v1 * v1;
 // 地球半径 平均值,米
 var distance = 2 * 6371000 * Math.asin(Math.sqrt(h));
 return distance;
}
module.exports = {//用于映射函数
 distance: distance,
}

注意点:

1.导入util的类文件

2.类文件中的方法模板的映射关系

3.ployline对象是一个数组,不是对象,所以注意层级关系。

总结

以上所述是小编给大家介绍的微信小程序地图绘制线段并且测量,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
DOMAssitant最新版 DOMAssistant 2.5发布
Dec 25 Javascript
Draggable Elements 元素拖拽功能实现代码
Mar 30 Javascript
解决json日期格式问题的3种方法
Feb 02 Javascript
父节点获取子节点的字符串示例代码
Feb 26 Javascript
详解AngularJS中自定义指令的使用
Jun 17 Javascript
vue源码入口文件分析(推荐)
Jan 30 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
May 18 Javascript
JavaScript笛卡尔积超简单实现算法示例
Jul 30 Javascript
vue+element-ui动态生成多级表头的方法
Aug 28 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
Dec 03 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
Jul 31 jQuery
vue实现设置载入动画和初始化页面动画效果
Oct 28 Javascript
Element-UI+Vue模式使用总结
Jan 02 #Javascript
JS代码触发事件代码实例
Jan 02 #Javascript
微信小程序使用自定义组件导航实现当前页面高亮
Jan 02 #Javascript
Vue 实现分页与输入框关键字筛选功能
Jan 02 #Javascript
jQuery实现的图片点击放大缩小功能案例
Jan 02 #jQuery
Vue 实现简易多行滚动&quot;弹幕&quot;效果
Jan 02 #Javascript
JS实现秒杀倒计时特效
Jan 02 #Javascript
You might like
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
accesskey 提交
2006/06/26 Javascript
splice slice区别
2006/10/09 Javascript
javascript 对象定义方法 简单易学
2009/03/22 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
js Form.elements[i]的使用实例
2011/11/13 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
2016/07/22 Javascript
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
2017/07/17 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
利用Node.js检测端口是否被占用的方法
2017/12/07 Javascript
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
使用vue重构资讯页面的实例代码解析
2019/11/26 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
[00:53]2015国际邀请赛 中国区预选赛一触即发
2015/05/14 DOTA
python实现dict版图遍历示例
2014/02/19 Python
Python中使用dom模块生成XML文件示例
2015/04/05 Python
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
Python中MySQL数据迁移到MongoDB脚本的方法
2016/04/28 Python
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
python3使用smtplib实现发送邮件功能
2018/05/22 Python
django如何连接已存在数据的数据库
2018/08/14 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
python实现3D地图可视化
2020/03/25 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
2020/07/07 Python
html5配合css3实现带提示文字的输入框(摆脱js)
2013/03/08 HTML / CSS
英国奢侈品网站:MatchesFashion
2016/12/16 全球购物
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
销售演讲稿范文
2014/01/08 职场文书
缓刑期间思想汇报范文
2014/10/10 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python
mysql5.6主从搭建以及不同步问题详解
2021/12/04 MySQL
Java字符缓冲流BufferedWriter
2022/04/09 Java/Android
Redis实现订单过期删除的方法步骤
2022/06/05 Redis
MySQL数据库之存储过程 procedure
2022/06/16 MySQL