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


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 相关文章推荐
JavaScript的Cookies
Jan 16 Javascript
了解一点js的Eval函数
Jul 26 Javascript
js中的前绑定和后绑定详解
Aug 01 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
Jun 05 Javascript
javascript关于继承解析
May 10 Javascript
PHP实现记录代码运行时间封装类实例教程
May 08 Javascript
JavaScript手风琴页面制作
May 17 Javascript
Angular在模板驱动表单中自定义校验器的方法
Aug 09 Javascript
vue 属性拦截实现双向绑定的实例代码
Oct 24 Javascript
详解vue 不同环境配置不同的打包命令
Apr 07 Javascript
Vue路由对象属性 .meta $route.matched详解
Nov 04 Javascript
jQuery+ajax实现文件上传功能
Dec 22 jQuery
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/10/09 PHP
sphinx增量索引的一个问题
2011/06/14 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
php打造智能化的柱状图程序,用于报表等
2015/06/19 PHP
php微信浏览器分享设置以及回调详解
2016/08/01 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
thinkPHP3.2.2框架行为扩展及demo示例
2018/06/19 PHP
php5.x禁用eval的操作方法
2018/10/19 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
2019/05/31 PHP
改版了网上的一个js操作userdata
2007/04/27 Javascript
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
javascript处理表单示例(javascript提交表单)
2014/04/28 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
js中常用的Tab切换效果(推荐)
2016/08/30 Javascript
javascript 中的console.log和弹出窗口alert
2016/08/30 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
在vscode中统一vue编码风格的方法
2018/02/22 Javascript
微信网页登录逻辑与实现方法
2019/04/29 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
Python编程把二叉树打印成多行代码
2018/01/04 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
如何使用python进行pdf文件分割
2019/11/11 Python
Pytorch中实现只导入部分模型参数的方式
2020/01/02 Python
python判断正负数方式
2020/06/03 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
2021/03/03 Python
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
毕业生在校学习的自我评价分享
2013/10/08 职场文书
2013年研究生毕业感言
2014/02/06 职场文书
初中教师业务学习材料
2014/05/12 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
大一工商管理职业生涯规划:有梦最美,行动相随
2014/09/18 职场文书
师德师风事迹材料
2014/12/20 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书