微信小程序根据经纬度动态定位计算周边商家导航距离

标签: 小程序计算距离  小程序经纬度  计算周边商家  小程序定位  小程序获取定位

据说,有码农的地方就有江湖,近期有朋友向编者咨询关于小程序开发定位的若干问题,那么今天小编就本着无私奉献的精神把自己的实战经验整理分享出来,仅供各位江湖朋友参考。应用场景:根据当前移动设备上小程序的定位(基准点),计算周边不同商家的导航距离,此刻编者就给大家把小程序根据经纬度计算导航距离的具体代码分享出来,希望能帮到各位同行。

首先需要自行去腾讯位置服务网站通过自己的appid(做过小程序的都懂,此处不再废话)注册地图服务获取密钥,地址:https://lbs.qq.com/qqmap_wx_jssdk/index.html然后调用小程序的API获取当前位置的经纬度,具体步骤如下:

一、注册腾讯地图服务,获取当前经纬度

1、进入申请开发者密钥(key):申请密钥

2、下载微信小程序JavaScriptSDK:微信小程序JavaScriptSDK v1.0

3、 登录小程序,安全域名设置,在“设置” -> “开发设置”中设置request合法域名,添加https://apis.map.qq.com

4.、用法示例

// 引入SDK核心类

// 引入SDK核心类
var QQMapWX = require('../../libs/qqmap-wx-jssdk.js');
var qqmapsdk;

 获取当前定位(经纬度和城市信息)

onLoad:function(){
    var that = this
    wx.getLocation({
      type: 'wgs84', // 默认为 wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标
      success: function (res) {
        console.log(res)
        that.setData({
          longitude: res.longitude,
          latitude: res.latitude
        })
        app.globalData.longitude = res.longitude;
        app.globalData.latitude = res.latitude;
        var qqmapsdk = new QQMapWX({
          key: '6OSBZ-KPV63-O6U3N-YABN2-UI23H-2RBY6' // 必填
        });
        qqmapsdk.reverseGeocoder({
          location: {
            latitude: that.data.latitude,
            longitude: that.data.longitude
          },
          success: function (res) {
            console.log("获取地址成功:" + res.result.ad_info.city);
            // 
          },
          fail: function (res) {
            console.log("获取地址失败" + res);
          },
          complete: function (res) {
            console.log(res);
          }
        });
      }
     })
}

通过以上操作已经获取到了当前定位(备注在移动端获取的定位信息是准确的,在电脑上显示的定位偏差较大)

二、根据当前定位计算周边商家的导航距离

直接观看计算距离的sql,注意常量6378.138是地球半径(计算的结果单位是米)

SELECT o.*,
CASE o.consume_level WHEN 1 THEN "经济型" ELSE "豪华型" END AS consume_type,
location.region_name AS county_name,
temp_goods.min_price,
 ROUND(6378.138 * 2 * ASIN(SQRT(POW(SIN((?  * PI() / 180 - o.latitude * PI() / 180) / 2),2) + COS(? * PI() / 180) * COS(o.latitude * PI() / 180) * POW(
				SIN(( ? * PI() / 180 - o.longitude * PI() / 180) / 2),2))) * 1000) AS distance
FROM cms_seller o
LEFT JOIN (SELECT goods.id,goods.seller_id,min(goods.price) AS min_price FROM cms_goods goods GROUP BY goods.seller_id) temp_goods   ON o.id = temp_goods.seller_id
LEFT JOIN base_location location ON o.county_id = location.id
WHERE o.recommend = 1 and o.city_id = ? order by distance

上面sql计算出来的距离 单位是米,一般为了把结果显示的更人性化,需要把单位转换,大于1000米的转换成Km,小于1000m的就不用转换,编者本着追求完美的业界良心,把转化单位的干货代码也一并分享出来,各位直接粘走就能直接用,可以省下不少脑细胞,多活好几岁。(本案例用的JFinal框架,其余框架实体用法略微不一样,思路都一样),

private void getDistanceStr(CmsSeller  seller){
        DecimalFormat df  =new DecimalFormat("#.0");
        String detail = "";
        double dis = seller.get("distance");
        double tempDis = dis / 1000;
        detail = String.format("%.1f", tempDis);
        if(Double.parseDouble(detail) >= 1){
            detail = detail + "Km";
            seller.put("distance",detail);
        }else{
            seller.put("distance",(int) Math.ceil(Double.parseDouble(detail) * 1000) + "m");
        }
    }

三、最终计算出来周边商家导航距离的显示结果,直接上图

如果您觉得本篇帖子对您有帮助,就收藏一下,总有一天能用得着,感谢各位看官的支持,敬请持续关注博主

如您有不懂的地方可以加编者微信,一起交流,编者微信:18629374628

 

 

原文链接:加载失败,请重新获取