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


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 相关文章推荐
用js判断用户浏览器是否是XP SP2的IE6
Mar 08 Javascript
8个超棒的学习 jQuery 的网站 推荐收藏
Apr 02 Javascript
{}与function(){}选用空对象{}来存放keyValue
May 23 Javascript
js实现网页随机切换背景图片的方法
Nov 01 Javascript
jQuery实现防止提交按钮被双击的方法
Mar 24 Javascript
Bootstrap页面缩小变形的快速解决办法
Feb 03 Javascript
干货!教大家如何选择Vue和React
Mar 13 Javascript
Angular弹出模态框的两种方式
Oct 19 Javascript
JavaScript实现求最大公共子串的方法
Feb 03 Javascript
优雅地使用loading(推荐)
Apr 20 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
Sep 09 Javascript
详解利用eventemitter2实现Vue组件通信
Nov 04 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
PHP面向对象编程快速入门
2006/12/14 PHP
php生成excel列序号代码实例
2013/12/24 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
php读取文件内容到数组的方法
2015/03/16 PHP
如何判断php mysqli扩展类是否开启
2016/12/24 PHP
Ajax+Jpgraph实现的动态折线图功能示例
2019/02/11 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
javascript 数组的方法集合
2008/06/05 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
Node.js中安全调用系统命令的方法(避免注入安全漏洞)
2014/12/05 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
浅析node连接数据库(express+mysql)
2015/11/30 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
vue2.0父子组件及非父子组件之间的通信方法
2017/01/21 Javascript
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
Angular4 Select选择改变事件的方法
2018/10/09 Javascript
OpenLayers实现图层切换控件
2020/09/25 Javascript
详解Python中的__init__和__new__
2014/03/12 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
Django添加feeds功能的示例
2018/08/07 Python
pytorch构建多模型实例
2020/01/15 Python
Clarins娇韵诗英国官网:来自法国的天然护肤品牌
2017/04/18 全球购物
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
财务与信息服务专业推荐信
2013/11/28 职场文书
受欢迎的大学生自我评价
2013/12/05 职场文书
党员批评与自我批评
2014/02/12 职场文书
环境工程专业自荐信范文
2014/03/18 职场文书
党员四风剖析材料
2014/08/27 职场文书
班主任寄语2015
2015/02/26 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
二年级数学教学反思
2016/02/16 职场文书