微信小程序获取地理位置名称,附近地理信息,根据经纬度距离计算等问题详解

微信小程序的开发过程中,很可能会碰到和地理位置相关的一些操作,比如:根据经纬度计算两地之间的距离,根据关键字获取附近相关的地理信息,关键词输入提示等。
如果直接自己写代码来解决相关的问题,一方面会大大增加相应的代码量,另一方面,也会浪费不少时间,这里,笔者针对微信小程序中,地理位置相关的一些问题,做了简单总结,方便读者直接使用,减少解决问题的时间。
在小程序的官方文档中,提供了获取用户地理位置的方法:
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设置页,授权域名下,将授权的域名清空。

讲解到此结束,有疑问可以留言,喜欢的朋友可以关注一下本博主“小圣贤君”。

  • 12
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值