手机端使用H5百度地图定位,并将GPS转换百度地图坐标

3 篇文章 0 订阅
3 篇文章 0 订阅

       关于手机端根据使用百度地图来进行定位获取相关地理位置信息的基本流程如下:首先,使用H5百度地图验证手机是否支持定位功能,代码如下:

  1. if (navigator.geolocation)
    {
    navigator.geolocation.getCurrentPosition(showPosition);
    }
    else
    {
    alert("该浏览器不支持获取地理位置");
    } 

    
    
    
    
    
    

     如果支持定位的话,使用getCurrentPosition方法,具体代码如下:

  •     
    var map = new BMap.Map("allmap");//实例化百度地图对象
        var point = new BMap.Point("{$lng}, {$lat}");
        map.centerAndZoom(point,15);//设置地图中心点
    
        var geolocation = new BMap.Geolocation();
        geolocation.getCurrentPosition(function(r){
            if(this.getStatus() == BMAP_STATUS_SUCCESS){
                var mk = new BMap.Marker(r.point);
                map.addOverlay(mk);
                map.panTo(r.point);
                var lats=r.point.lat;
                var lngs=r.point.lng;
                if(r.accuracy==null){   
                       alert("无法获取您的精确定位,请清理缓存后重新定位!");
                        
                    });
                    return false;
                    //用户决绝地理位置授权
                }    
                
    //ajax传值,用于处理GPS左边转换
                $.post("dingwei.php",{lat:lats,lng:lngs},function(data){
                    if(data=="ok"){
                        window.location.href="/index.php"
                        }
                    });
            }
            else {
                alert('failed'+this.getStatus());//用户拒绝定位或者定位出错等相关参数信息
            }        
        },{enableHighAccuracy: true})//开启此功能可以增加定位精度

    
    
    
    
    
    

      下面是dingwei.php中的代码,主要功能是将接收到的GPS坐标转换为百度api经纬度,并通过调用百度api接口获取相关地理位置信息,存入session;作为测试用,我在这里使用的是PHP中的file_get_contents()函数来获取接口回调信息,当然,如果你在项目中可以使用CURL来请求并接收数据:

  •   
     //手机端传过来的GPS坐标--要转换为百度api坐标
             $latitude = $_POST['lat'];
             $lngitude = $_POST['lng'];
    
     //调取百度接口,并将json数据转换为数组形式
            $jxcode="http://api.map.baidu.com/geoconv/v1/?coords=".$longitude.",".$latitude."&ak=秘钥&from=1&to=5";
            $jxcodes=file_get_contents($jxcode);
            $bdjson=(array)json_decode($jxcodes);
            $zbarr=(array)$bdjson['result']['0'];
            $x=$zbarr['x'];//经度坐标
            $y=$zbarr['y'];//纬度坐标
    
     //经过api转换后的$x和$y才是百度地图需要的经过加密处理的坐标
            $adurl="http://api.map.baidu.com/geocoder/v2/?ak=秘钥&callback=renderReverse&location=".$y.",".$x."&output=json&pois=1";
            $adcon=file_get_contents($adurl);
            $zjsion=explode('renderReverse&&renderReverse(', $adcon);//转换为jison
            $info=mb_substr($zjsion['1'], 0,strlen($zjsion['1'])-1);//截取有用信息
        
            $infoarr=(array)json_decode($info);
            $result=(array)$infoarr['result'];
            $xxaddress=$result['formatted_address'];//详细地址
            $xzgs=(array)$result['addressComponent'];//归属地信息
            // $xzgs=(array)$result['pois'];//归属地信息
            $city=$xzgs['city'];//城市
            $country=$xzgs['country'];//国家
            $district=$xzgs['district'];//区
            $province=$xzgs['province'];//省份
            $street=$xzgs['street'];//路
    
     //将地区以及坐标放入session
            $geo = array();
            $geo['lon'] = $x;
            $geo['lat'] = $y;
            $geo['province'] = $province;
            $geo['city'] = $city;
            $geo['address'] = $xxaddress;
            $_SESSION['geo'] = $geo;
    
     //将地区以及坐标放入cookie
            setcookie('city',$city,time()+3600);
            setcookie('lon',$x,time()+3600);
            setcookie('lat',$y,time()+3600);
            $larr=array('x'=>$x,'y'=>$y,'province'=>$province,'city'=>$city); 
    
     //输出json格式数据
            //print_r("维度坐标:".$y.",经度坐标:".$x."国家:".$country.",省份:".$province.",城市:".$city.",区/县:".$district.",街道:".$street."=====".$xxaddress);
            $nre = json_encode($larr);
            print_r($nre);


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值