微信定位

分享下微信是如何定位的:

本文主要讲解如何利用微信定位,如何将定位到的经纬度转换为百度地图对应的经纬度,以及处理定位失败、取消及错误时的默认做法。

//获取地理位置信息start
//封装成一个函数
    function getPosition() {
    //用ajax请求
        $.ajax({
            url: "/wechat/jssdk",//请求地址
            type: 'post',//post请求
            dataType: 'json',
            contentType: "application/x-www-form-urlencoded; charset=utf-8",
            data: {
                'url': location.href.split('#')[0]//将第一个#号前的地址传递
            },
//请求成功的函数
            success: function (data) {
                wx.config({
                    // debug: true,
                    appId: data.data.appId,
                    timestamp: data.data.timestamp,
                    nonceStr: data.data.nonceStr,
                    signature: data.data.signature,
                    jsApiList: ['checkJsApi', 'getLocation']
                });
                wx.ready(function () {
                    wx.getLocation({
                    //获得定位成功
                        success: function (res) {
                        //这是微信返回的真正经纬度
                            var oldLat = res.latitude; // 纬度,浮点数,范围为90 ~ -90
                            var oldLng = res.longitude; // 经度,浮点数,范围为180 ~ -180。
                            /*下面是为了将获得的真正经纬度转换为对应的百度经纬度,因为是利用百度地图的经纬度去查询数据的,数据库中存的也是百度的经纬度*/
                            //创建一个百度地图的点
                            var customerPoint = new BMap.Point(oldLng, oldLat);
                            //
                            var convertor = new BMap.Convertor();

                            var pointArr = [];//创建一个数组
                            pointArr.push(customerPoint);//将刚才的点放进去
                            convertor.translate(pointArr, 1, 5, initMap); //转换坐标
                            function initMap(data) {
                                if (data.status === 0) {//转换成功
                                    var point = data.points[0];//得到后的点
                                    var lng = point.lng;//获得转换后的经度
                                    var lat = point.lat;//获得转换后的纬度
                                    toDoFunction(lng, lat);//将经纬度传入到要运用的函数中
                                } else {
                                //下面两行是默认定位到西湖的经纬度
                                    lng = 120.141375;
                                    lat = 30.257806;
                                    toDoFunction(lng, lat);//将经纬度传入到要运用的函数中
                                }
                            }

                        },
                        //取消定位
                        cancel: function () {
                        //下面两行是默认定位到西湖的经纬度
                            var lng = 120.141375;
                            var lat = 30.257806;
                            toDoFunction(lng, lat);//将经纬度传入到要运用的函数中
                        },
                        //定位失败
                        fail: function () {
                        //下面两行是默认定位到西湖的经纬度
                            var lng = 120.141375;
                            var lat = 30.257806;
                            toDoFunction(lng, lat);//将经纬度传入到要运用的函数中
                        }

                    });
                    //定位发生错误
                    wx.error(function () {
                    //下面两行是默认定位到西湖的经纬度
                        var lng = 120.141375;
                        var lat = 30.257806;
                        toDoFunction(lng, lat);//将经纬度传入到要运用的函数中
                    });

                });
            }
        });
    }

以上代码,如果可以定位到就用定位到的真正的经纬度,再转换成百度地图对应的经纬度,如果定位失败或者是点击取消或者发生错误,则默认定位到西湖的经纬度。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要通过微信定位系统计算距离,可以使用微信提供的开放接口:微信JS-SDK。具体步骤如下: 1. 在开发者后台申请微信JS-SDK权限,并获取AppID和AppSecret。 2. 在HTML页面中引入微信JS-SDK的JS文件,并初始化: ``` <script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script> <script> wx.config({ debug: false, appId: 'yourAppId', timestamp: <?php echo $timestamp;?>, nonceStr: '<?php echo $nonceStr;?>', signature: '<?php echo $signature;?>', jsApiList: [ 'getLocation' ] }); </script> ``` 3. 调用微信JS-SDK的getLocation接口获取当前用户的地理位置: ``` wx.ready(function() { wx.getLocation({ type: 'gcj02', // 返回国测局经纬度坐标系的坐标 success: function(res) { // 获取用户当前位置的经度和纬度 var latitude = res.latitude; var longitude = res.longitude; }, fail: function(res) { // 获取用户位置失败 alert('获取位置失败,请检查网络'); } }); }); ``` 4. 计算距离。可以使用地球半径为6371km的Haversine公式计算两点之间的距离: ``` function getDistance(lat1, lng1, lat2, lng2) { var radLat1 = lat1 * Math.PI / 180, radLat2 = lat2 * Math.PI / 180, a = radLat1 - radLat2, b = lng1 * Math.PI / 180 - lng2 * Math.PI / 180, s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2))); s = s * 6371.393; // 地球半径 s = Math.round(s * 1000) / 1000; // 保留3位小数 return s; } ``` 注意:计算距离时,需要传入两个点的经纬度,可以使用步骤3获取到的用户当前位置和另一个点的经纬度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值