微信小程序 - 输入起点、终点获取距离并且进行路线规划(腾讯地图)

index.wxml

<!--地图容器-->
<map id="myMap" style="width: 100%; height: 300px;" longitude="{{longitude}}" latitude="{{latitude}}" scale=‘{{scale}}‘ polyline="{{polyline}}" markers="{{markers}}" covers="{{covers}}" show-location></map>

起点:<input placeholder=‘请输入起点‘ bindinput=‘getStart‘></input>
终点:<input placeholder=‘请输入终点‘ bindinput=‘getEnd‘></input>

两点之间的距离:{{resultDistance}}

<!--绑定点击事件-->
<button bindtap="driving" disabled=‘{{openNav}}‘>开始导航</button>

  

index.wxss

input{
  border: 1px solid #aaa;
}

  

index.js

  1 // let coors;
  2 // // 引入SDK核心类
  3 let QQMapWX = require(‘./qqmap-wx-jssdk.min.js‘);
  4
  5 // 实例化API核心类
  6 let qqmapsdk = new QQMapWX({
  7   key: ‘填写地图key‘
  8 });
  9
 10 Page({
 11
 12   /**
 13    * 页面的初始数据
 14    */
 15   data: {
 16     openNav: true
 17   },
 18
 19   /**
 20    * 生命周期函数--监听页面加载
 21    */
 22   onLoad: function(options) {
 23     let _page = this;
 24
 25     wx.getLocation({
 26       type: ‘gcj02‘, //返回可以用于wx.openLocation的经纬度
 27       success: function(res) {
 28         _page.setData({
 29           latitude: res.latitude,
 30           longitude: res.longitude,
 31           scale: 10
 32         });
 33       }
 34     })
 35     wx.clearStorageSync(‘latlngstart‘);
 36     wx.clearStorageSync(‘latlngend‘);
 37   },
 38
 39   /**
 40    * 生命周期函数--监听页面初次渲染完成
 41    */
 42   onReady: function() {
 43
 44   },
 45
 46   /**
 47    * 起点
 48    */
 49   getStart(e) {
 50     let _page = this;
 51     // 关键字补全以及获取经纬度
 52     qqmapsdk.getSuggestion({
 53       keyword: e.detail.value,
 54       success: function(res) {
 55         let lat = res.data[0].location.lat;
 56         let lng = res.data[0].location.lng;
 57
 58         wx.setStorageSync(‘latlngstart‘, {
 59           lat: res.data[0].location.lat,
 60           lng: res.data[0].location.lng
 61         });
 62       },
 63       fail: function(res) {
 64         console.log(res);
 65       },
 66       complete: function(res) {
 67         console.log(res);
 68       }
 69     });
 70
 71     // 如果输入地点为空:则不规划路线
 72     if (e.detail.value == ‘‘) {
 73       _page.setData({
 74         openNav: true,
 75         resultDistance: ‘‘
 76       });
 77     } else {
 78       _page.setData({
 79         openNav: false
 80       });
 81     }
 82   },
 83
 84   /**
 85    * 终点
 86    */
 87   getEnd(e) {
 88     let _page = this;
 89     // 输入地点获取经纬度,我取得是数据的第一条数据.
 90     qqmapsdk.getSuggestion({
 91       keyword: e.detail.value,
 92       success: function(res) {
 93         let lat = res.data[0].location.lat;
 94         let lng = res.data[0].location.lng;
 95
 96         wx.setStorageSync(‘latlngend‘, {
 97           lat: res.data[0].location.lat,
 98           lng: res.data[0].location.lng
 99         });
100       },
101       fail: function(res) {
102         console.log(res);
103       },
104       complete: function(res) {
105         console.log(res);
106       }
107     });
108     // 如果输入地点为空:则不规划路线
109     if (e.detail.value == ‘‘) {
110       _page.setData({
111         openNav: true,
112         resultDistance:‘‘
113       });
114     } else {
115       _page.setData({
116         openNav: false
117       });
118     }
119   },
120   //事件回调函数
121   driving: function() {
122
123     let _page = this;
124
125     // 起点经纬度
126     let latStart = wx.getStorageSync(‘latlngstart‘).lat;
127     let lngStart = wx.getStorageSync(‘latlngstart‘).lng;
128
129     // 终点经纬度
130     let latEnd = wx.getStorageSync(‘latlngend‘).lat;
131     let lngEnd = wx.getStorageSync(‘latlngend‘).lng;
132
133
134     _page.setData({
135       latitude: latStart,
136       longitude: lngStart,
137       scale: 16,
138       markers: [{
139           id: 0,
140           latitude: latStart,
141           longitude: lngStart,
142           // 起点图标
143           iconPath: ‘../image/location.png‘
144         },
145         {
146           id: 1,
147           latitude: latEnd,
148           longitude: lngEnd,
149           // 终点图标
150           iconPath: ‘../image/location.png‘
151         },
152       ]
153     });
154     ``
155
156     /**
157      * 获取两点的距离
158      */
159     qqmapsdk.calculateDistance({
160       to: [{
161         latitude: latStart,
162         longitude: lngStart
163       }, {
164         latitude: latEnd,
165         longitude: lngEnd
166       }],
167       success: function(res) {
168         console.log(res, ‘两点之间的距离:‘, res.result.elements[1].distance);
169         _page.setData({
170           resultDistance: res.result.elements[1].distance + ‘米‘
171         });
172       },
173       fail: function(res) {
174         console.log(res);
175       },
176       complete: function(res) {
177         console.log(res);
178       }
179     });
180
181     //网络请求设置
182     let opt = {
183       //WebService请求地址,from为起点坐标,to为终点坐标,开发key为必填
184       url: `https://apis.map.qq.com/ws/direction/v1/driving/?from=${latStart},${lngStart}&to=${latEnd},${lngEnd}&key=${qqmapsdk.key}`,
185       method: ‘GET‘,
186       dataType: ‘json‘,
187       //请求成功回调
188       success: function(res) {
189         let ret = res.data
190         if (ret.status != 0) return; //服务异常处理
191         let coors = ret.result.routes[0].polyline,
192           pl = [];
193         //坐标解压(返回的点串坐标,通过前向差分进行压缩)
194         let kr = 1000000;
195         for (let i = 2; i < coors.length; i++) {
196           coors[i] = Number(coors[i - 2]) + Number(coors[i]) / kr;
197         }
198         //将解压后的坐标放入点串数组pl中
199         for (let i = 0; i < coors.length; i += 2) {
200           pl.push({
201             latitude: coors[i],
202             longitude: coors[i + 1]
203           })
204         }
205         //设置polyline属性,将路线显示出来
206         _page.setData({
207           polyline: [{
208             points: pl,
209             color: ‘#FF0000DD‘,
210             width: 4
211           }]
212         })
213       }
214     };
215     wx.request(opt);
216   }
217 })

示例下载:点击下载

原文地址:https://www.cnblogs.com/cisum/p/9650941.html

时间: 2024-08-30 18:20:37

微信小程序 - 输入起点、终点获取距离并且进行路线规划(腾讯地图)的相关文章

微信小程序:java后台获取openId

一.功能描述 openId是某个微信账户对应某个小程序或者公众号的唯一标识,但openId必须经过后台解密才能获取(之前实现过前台解密,可是由于微信小程序的种种限制,前台解密无法在小程序发布后使用) 二.实现流程 1. 获取微信用户的登录信息: 2. 将encryptedData中的数据作为参数传给java后台 3. java后台进行解密 三.代码实现 1. 后台的解密代码 1 /** 2 * decoding encrypted data to get openid 3 * 4 * @para

微信小程序首页index.js获取不到app.js中动态设置的globalData的原因以及解决方法

前段时间开发了一款微信小程序,运行了也几个月了,在index.js中的onLoad生命周期里获取app.js中onLaunch生命周期中在接口里动态设置的globalData一直没有问题,结果昨天就获取不到动态设置的global数据了.因为我要获取小程序的unionid以及通过unionid去获取微信的openId,并且共享数据,最开始我是通过storage来做数据共享的,后来测试发现storage存在莫名被清空的情况,后来转用globalData来做数据共享,查了下,是因为app.js中的on

【微信小程序】springboot后台获取用户的openid

openid可以标识一个用户,session_key会变,所以来获取一下openid. openid不能在微信小程序中直接获取,需要后台发送请求到微信的接口,然后微信返回一个json格式的字符串到后台,后台处理之后,再返回到微信小程序. 发布的小程序需要https的域名,而测试的时候可以使用http. 小程序在app.js中,修改login()中的内容: // 登录 wx.login({ success: res => { // 发送 res.code 到后台换取 openId, session

微信小程序编译包的获取与解压还原1——在手机中获取小程序编译包wxapkg

准备工作: 微信关注需要下载编译包的小程序,然后点进去看一下,微信就会自动下载相应的编译包到手机上了. 获取小程序编译包: 据说root手机可以直接在手机的文件管理中查找wxapkg文件,自己尝试了下,无法通过搜索查找到,对应的文件夹路径也找不到相关文件,所以这里就采用比较通用的方法来获取了. 大部分智能手机都有备份功能,这样就可以在手机重装系统或恢复出厂设置之后快速恢复手机应用和数据.对的,就是这个手机备份功能,当你对一个应用进行备份的时候,除了应用本身,应用的数据也会直接被备份下来.微信也不

【微信开发】微信小程序通过经纬度计算两地距离php代码实现

需求: 要求做个根据用户当前位置获取周围商家地址,并且按照由近到远排序, 方法一: 代码层实现 封装方法: /** * @desc 根据两点间的经纬度计算距离 * @param float $lat 纬度值 * @param float $lng 经度值 * @param $status true KM,M显示;false 只返回M */ function system_getdistance($lat1, $lng1, $lat2, $lng2, $status = true, $single

微信小程序--通过请求网页获取信息并显示

效果描述: 按动主页按钮跳转至列表页,在列表页显示请求网页所获取的信息,并通过所得信息的id的不同,链接到不同的网页进一步获取不同信息. 触碰按钮跳转至列表页触碰表题按钮跳转至详情页,其中不同的按钮对应的详情页内容不同而格式相同. 这样的好处是,可以通过网页信息的改变自动改变页面信息. 流程: 使用Api: wx.request() //请求网页信息wx.navigateTo()  //跳转页面 注意点: 1.在列表页,要将网页上获取的信息根据id的不同,选择对应信息显示在列表页,并将其显示在详

微信小程序 之wx.getLocation()获取地理信息中的小坑

提到wx.getLocation()这个方法,大家都知道是获取地理信息的 今天用这个方法获取定位经纬度后传给后台取得附近markers标记集合, 在开发工具上都正常有标记出现 ,但是在手机测试时,死活没有显示 , 最后发现是在手机测试时,后台已经报参数不合法抛出错误通知了 原因是因为,在开发工具上获取经纬度只有小数点后5位,而我们传给后台接口的数据规定只有后6位, 这在开发工具上是正常可以请求成功,但是在手机上测试时,定位更加精确,例如"longitude":"121.534

微信小程序~自定义属性设置和获取(data-)

自定义属性语法以data-开头: <button data-info="自定义数据" bindtap="testClick">自定义属性测试</button> 无论你这样写data-info="..."还是这样写data-INFO="...",获取值的时候都是这样: 获取: testClick(event){ const dataInfo = event.currentTarget.dataset.in

微信小程序登录授权并获取手机号

一.请求发送 携带 code 到后台换取 openid var that = this; wx.login({ success(res) { console.log(res); var code = res.code wx.request({ url: 'http://localhost//wechat/login/', method: "post", data: { code }, success: function (res) { console.log(res.data.open