微信小程序的开发过程中,很可能会碰到和地理位置相关的一些操作,比如:根据经纬度计算两地之间的距离,根据关键字获取附近相关的地理信息,关键词输入提示等。
如果直接自己写代码来解决相关的问题,一方面会大大增加相应的代码量,另一方面,也会浪费不少时间,这里,笔者针对微信小程序中,地理位置相关的一些问题,做了简单总结,方便读者直接使用,减少解决问题的时间。
在小程序的官方文档中,提供了获取用户地理位置的方法:
https://developers.weixin.qq.com/miniprogram/dev/api/location.html#wxgetlocationobject
wx.getLocation(OBJECT)
获取当前的地理位置、速度。当用户离开小程序后,此接口无法调用;当用户点击“显示在聊天顶部”时,此接口可继续调用。
代码示例:
wx.getLocation({
type: 'wgs84',
success: function(res) {
var latitude = res.latitude
var longitude = res.longitude
var speed = res.speed
var accuracy = res.accuracy
}
})
该方法可以获取当前用户的地理信息,包含有经纬度信息,但是并没有详细的信息内容,其他详细的内容,可以根据该方法获取到的地理位置参数通过其他方法进行解决,下面会进行讲解。
问题1:根据经纬度计算距离
方法1:直接使用计算方法,计算相应的距离
// 计算两个经纬度之间的距离
const distance = (la1, lo1, la2, lo2) => {
var La1 = la1 * Math.PI / 180.0;
var La2 = la2 * Math.PI / 180.0;
var La3 = La1 - La2;
var Lb3 = lo1 * Math.PI / 180.0 - lo2 * Math.PI / 180.0;
var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(La3 / 2), 2) + Math.cos(La1) * Math.cos(La2) * Math.pow(Math.sin(Lb3 / 2), 2)));
s = s * 6378.137; //地球半径
s = Math.round(s * 10000) / 10000;
// console.log("计算结果",s)
return s
}
la1:A地点的经度;
lo1:A地点的纬度;
la2:B地点的经度;
lo2:B地点的纬度。
直接调用上述方法,将相对应的参数传入,就可以得到两点之间的距离,返回结果的单位是km。
方法2:根据腾讯地图为小程序提供的相关工具来计算两地之间的距离。
腾讯地图为小程序提供了一个专门的接口SDK,来获取详细的位置信息。
文档地址如下:http://lbs.qq.com/qqmap_wx_jssdk/index.html
其中,提供了如下一个接口,可以计算两个经纬度之间的距离:
calculateDistance(options:Object)
计算一个点到多点的步行、驾车距离。
代码示例:
qqmapsdk.calculateDistance({
mode: 'driving',
from: {
latitude: 39.984572,
longitude: 116.306339
},
to: [{
latitude: 39.984060,
longitude: 116.307520
}],
success: function (res) {
console.log(res);
},
fail: function (res) {
console.log(res);
}
});
mode默认是walking(步行),to可以包含多个目的地经纬度信息,但是有数量限制,当数据比较多的时候,接口会报错。返回的数据中就有distance信息,单位是m。
这里笔者再提供一个完整的示例,方便读者理解:
// 引入SDK核心类
var QQMapWX = require('xxx/qqmap-wx.js');
onLoad: function () {
var that = this
// 实例化腾讯地图API核心类
qqmapsdk = new QQMapWX({
key: '开发密钥(key)' // 必填
});
//1、获取当前位置坐标
wx.getLocation({
type: 'wgs84',
success: function (res) {
//2、根据坐标获取当前位置名称,显示在顶部:腾讯地图逆地址解析
qqmapsdk.reverseGeocoder({
location: {
latitude: res.latitude,
longitude: res.longitude
},
success: function (addressRes) {
var address = addressRes.result.formatted_addresses.recommend;
console.log(address)
that.setData({
address: address
})
}
})
}
})
}
问题2:地点搜索,根据关键字搜索周边的相关地理位置信息
这个问题,还是比较麻烦的,如果让开发自己来写代码解决这个问题,估计会让开发砸桌子了,好在腾讯地图提供了相关的功能。
http://lbs.qq.com/qqmap_wx_jssdk/method-search.html
search(options:Object)
地点搜索,搜索周边poi,比如:“酒店” “餐饮” “娱乐” “学校” 等等
代码示例:
// 引入SDK核心类
var QQMapWX = require('xxx/qqmap-wx.js');
// 实例化API核心类
var demo = new QQMapWX({
key: '开发密钥(key)' // 必填
});
// 调用接口
demo.search({
keyword: '酒店',
success: function(res) {
console.log(res);
},
fail: function(res) {
console.log(res);
}
});
其他问题:根据输入的关键词提示,地址解析,获取全国城市列表等,都可以在文档上找到相关的解决方法,这里笔者不做重复讲解。
注意:
调用位置服务接口的时候报错:110,请求来源未被授权。
解决方法:在key设置页,授权域名下,将授权的域名清空。
讲解到此结束,有疑问可以留言,喜欢的朋友可以关注一下本博主“小圣贤君”。