百度地图定位偏差了吗?用微信定位完美解决。

9 篇文章 2 订阅
3 篇文章 0 订阅

博客好久没更新了,可能是我懒了,也可能是最近太忙了。最近项目中有个需求,需要用到定位来查看用户的位置。
于是乎。。。。。

成功的流程

通过微信定位获取经纬度坐标 ==》拿到坐标后通过百度地图的坐标转换方法,最终获取精准定位显示在百度地图上。

  1. 百度地图定位,(失败)
    百度地图api给的文档很清楚,直接拷贝复制,更改成自己的秘钥就可以看到效果了,但是。。。
    在这里插入图片描述
    我在福田,你却定到农林*(苹果手机定位是OK的,需求不能满足。需要继续解决。)*,难道是基站问题,疯狂查阅,疯狂百度,没一个方法是OK的,

  2. 换高德地图(失败)
    空余时间我研究了一下高德地图,后来也是偏差好远。在此就不赋图片了。

  3. 后来后来想到了微信的内置方法,调微信的定位,于是乎。。。。。。

    1. 调微信定位首先要签名,于是就开始先调后端给的签名接口。
 getWx(){
            let url = window.location.href.split('#')[0];
            this.axios.post(this.basURL.votUrl+'/home/getWx',{
                "data":{
                    "url":url,
                    },
                "token": this.$store.state.token,
            }).then(res=>{
                if(res.data.errorinfo == null){
                    this.sellq = res.data.data;
                    wx.config({
                            debug:false,            // 因为在手机上测试没法打印,当debug为true时,所有的返回值都会在手机上alert出来
                            appId:this.sellq.appId, // 必填,公众号唯一标识
                            timestamp:this.sellq.timestamp, // 必填,生成签名的时间戳
                            nonceStr:this.sellq.nonceStr, // 必填,生成签名的随机串
                            signature:this.sellq.signature,// 必填,签名
                            jsApiList: [   'getLocation'] // 必填,需要使用的JS接口列表,需要用到什么接口就去开发者文档查看相应的字段名
                    });
                        wx.error(function(res){
                            alert("签名失败");
                            // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
                        });
                        wx.ready(function(res){
                            console.log('签名成功');
                            
                        })
                }
            }).catch(error=>{
                console.log(error);
            })
        },
  1. 调定位方法(此处结合了百度地图转化坐标的方法。)
    点击查看百度地图案例文档
    点击查看微信定位文档
    在这里插入图片描述

vue 获取微信定位方法,
签名通过之后,我们就能调微信定位的方法了,微信定位成功会返回经纬度坐标,这时拿到经纬度坐标通过百度地图转换坐标,就可以在百度地图上显示了,

 getaddress(){
              let that = this;
              wx.getLocation({
                type: "wgs84", // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
                success: function(res) {
                    that.latitude = res.latitude;     // 赋值微信的经纬度
                    that.longitude = res.longitude;
                    var speed = res.speed; // 速度,以米/每秒计
                    var accuracy = res.accuracy; // 位置精度
                    // 坐标转换
                    var gpsPoint = new BMap.Point(that.longitude,that.latitude);
                    // 创建地图
                    var map = new BMap.Map("allmap");  
                    map.centerAndZoom(gpsPoint,15);       // 用城市名设置地图中心点 
                    map.enableScrollWheelZoom();     //启动滚轮放大缩小,默认禁用
                    map.enableContinuousZoom();       //连续缩放效果,默认禁用
                    
                    //坐标转换完之后的回调函数
                    var translateCallback = function (data){
                        // console.log(data)
                        if(data.status === 0) {
                            let succlng = data.points[0];
                            //获取转化后的坐标传入vuex里面。
                            that.$store.state.lng = succlng.lng;
                            that.$store.state.lat = succlng.lat;
                            map.centerAndZoom(data.points[0],15);       // 用城市名设置地图中心点 
                            var marker = new BMap.Marker(data.points[0]);  // 创建标注,为要查询的地址对应的经纬度
                            map.addOverlay(marker);
                            // console.log(succlng) 
                             // 通过经纬度反查 获取地址   重要误删
                                //  var geoc = new BMap.Geocoder();
                                //  geoc.getLocation(new BMap.Point(data.points[0].lng,data.points[0].lat), function(result){
                                //     if (result){
                                //         // address=result.address;
                                //          console.log(JSON.stringify(result));
                                //     }
                                //  });
                        }
                    }
                    setTimeout(function(){
                        var convertor = new BMap.Convertor();
                        var pointArr = [];
                        pointArr.push(gpsPoint);
                        convertor.translate(pointArr, 1, 5, translateCallback)
                    }, 800);
                },
                // 用户拒绝定位
                cancel: function() {
                  Dialog.confirm({
                    title: '定位拒绝。',
                    message: '您好!由于您拒绝获取地理位置。我们将无法获取您的位置。',
                    })
                    .then(() => {
                       that.$router.back()
                    })
                    .catch(() => {
                       that.$router.back()
                    });  
                },
                // 定位失败
                fail: (error) => {
             
                 
                    console.log('失败了');
                   
                   
                },
            });
            wx.error(function(res) {
              console.log("wx-js初始化: " + res);
            }); 
       
        },

通过微信定位转化百度地图,成功效果图。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值