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