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


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 相关文章推荐
15款优秀的jQuery导航菜单插件分享
Jul 19 Javascript
js变量以及其作用域详解
Jul 18 Javascript
Event altKey,ctrlKey,shiftKey属性解析
Dec 18 Javascript
用unescape反编码得出汉字示例
Apr 24 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
Mar 04 Javascript
bootstrap输入框组代码分享
Jun 07 Javascript
JavaScript程序中实现继承特性的方式总结
Jun 24 Javascript
jQuery实现动态文字搜索功能
Jan 05 Javascript
Vue中render函数的使用方法
Jan 31 Javascript
Vue中使用vue-i18插件实现多语言切换功能
Apr 25 Javascript
vue.js层叠轮播效果的实例代码
Nov 08 Javascript
JQuery绑定事件四种实现方法解析
Dec 02 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+FLASH实现上传文件进度条相关文件 下载
2007/07/21 PHP
codeigniter集成ucenter1.6双向通信的解决办法
2014/06/12 PHP
深入理解PHP中的empty和isset函数
2016/05/26 PHP
仿163填写邮件地址自动显示下拉(无优化)
2008/11/05 Javascript
jquery插件制作简单示例说明
2012/02/03 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
js取得url地址参数实例
2013/02/22 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
通过sails和阿里大于实现短信验证
2017/01/04 Javascript
vue2 中如何实现动态表单增删改查实例
2017/06/09 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
基于node.js实现爬虫的讲解
2019/02/18 Javascript
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
Vue中函数防抖节流的理解及应用实现
2020/04/24 Javascript
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
python监控文件或目录变化
2016/06/07 Python
详解pandas删除缺失数据(pd.dropna()方法)
2019/06/25 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
Everything But Water官网:美国泳装品牌
2019/03/17 全球购物
新闻编辑求职信
2014/07/13 职场文书
2014年自愿离婚协议书范本
2014/09/25 职场文书
乐山大佛导游词
2015/02/02 职场文书
php中配置文件保存修改操作 如config.php文件的读取修改等操作
2021/05/12 PHP
python中os.path.join()函数实例用法
2021/05/26 Python
Python实现8种常用抽样方法
2021/06/27 Python
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js