vue移动端app调用百度地图实现简单定位

最近做毕业设计做了一个手机定位的小功能,在此记录下来,我这个定在在电脑上进行测试是没有权限的,只有在手机上测试才能拿到具体的地理位置。

第一步先是建立一个map.js文件,用来引入和暴露百度地图的组件,具体内容如下:

export function MP(ak) {
    return new Promise(function (resolve, reject) {
        window.onload = function () {
            resolve(BMap)
        }
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.src = "http://api.map.baidu.com/api?v=2.0&ak="+ak+"&callback=init";
        script.onerror = reject;
        document.head.appendChild(script);
    })
}

第二步是在需要定位的页面引入mp

import {MP} from '../../service/map.js'

第三步就是 开始定位拿到地理位置

 addressDetail(){ //获取地理位置
                var vm = this;
                      if (!vm.now){
                 return
             }
//全局的this在方法中不能使用,需要重新定义一下
                var geolocation = new BMap.Geolocation();
                var gc = new BMap.Geocoder();

                geolocation.getCurrentPosition( function(r) {   //定位结果对象会传递给r变量

                        if(this.getStatus() == BMAP_STATUS_SUCCESS)
                        {  //通过Geolocation类的getStatus()可以判断是否成功定位。
                            var pt = r.point;
                            gc.getLocation(pt, function(rs){
                                var addComp = rs.addressComponents;
                                //这里弹出的便是定位的地理位置
                                alert(addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber);
                                vm.now = false
                                //这里把位置存在session里面就可以在后面用了
                                sessionStorage.setItem("dAddress",addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber)
                            });
                        }
                        else
                        {
                            //关于状态码
                            //BMAP_STATUS_SUCCESS   检索成功。对应数值“0”                            //BMAP_STATUS_CITY_LIST 城市列表。对应数值“1”                            //BMAP_STATUS_UNKNOWN_LOCATION  位置结果未知。对应数值“2”                            //BMAP_STATUS_UNKNOWN_ROUTE 导航结果未知。对应数值“3”                            //BMAP_STATUS_INVALID_KEY   非法密钥。对应数值“4”                            //BMAP_STATUS_INVALID_REQUEST   非法请求。对应数值“5”                            //BMAP_STATUS_PERMISSION_DENIED 没有权限。对应数值“6”( 1.1 新增)
                            //BMAP_STATUS_SERVICE_UNAVAILABLE   服务不可用。对应数值“7”( 1.1 新增)
                            //BMAP_STATUS_TIMEOUT   超时。对应数值“8”( 1.1 新增)
                            switch( this.getStatus() )
                            {
                                case 2:
                                    alert( '位置结果未知 获取位置失败.' );
                                    break;
                                case 3:
                                    alert( '导航结果未知 获取位置失败..' );
                                    break;
                                case 4:
                                    alert( '非法密钥 获取位置失败.' );
                                    break;
                                case 5:
                                    alert( '对不起,非法请求位置  获取位置失败.' );
                                    break;
                                case 6:
                                    alert( '对不起,当前 没有权限 获取位置失败.' );
                                    break;
                                case 7:
                                    alert( '对不起,服务不可用 获取位置失败.' );
                                    break;
                                case 8:
                                    alert( '对不起,请求超时 获取位置失败.' );
                                    break;

                            }
                        }

                    },
                    {enableHighAccuracy: true})



            },
最后说明,只有在手机上才能拿到地理位置,电脑上会弹出没有权限

你可能感兴趣的:(vue,js)