前言:
前段時間剛好使用了百度地圖的js api定位獲取用戶當前經緯度並獲取當前詳細位置和通過當前用戶詳細地理位置換取用戶當前經緯度坐標的功能,為了方便下次找起來方便一些自己在這里記錄一下,希望也能夠幫助到有需要的童鞋們!
解決方案:
引入JavaScript API v2.0 SDK
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密鑰"></script>
在頁面中定義一個以ID為allmap的DIV標簽:
<div id="allmap"></div>
避免頁面中出現:
Uncaught TypeError: Cannot read property 'gc' of undefined
通過SDK 輔助定位獲取坐標,然后在獲取當前用戶詳細地址
<script type="text/javascript"> var map = new BMap.Map("allmap");//創建Map實例,注意頁面中一定要有個id為allmp的div var point = new BMap.Point(116.331398,39.897445);//創建定坐標 map.centerAndZoom(point,12);//// 初始化地圖,設置中心點坐標和地圖級別 var geolocation = new BMap.Geolocation(); var gc = new BMap.Geocoder();//創建地理編碼器 // 開啟SDK輔助定位 geolocation.enableSDKLocation(); geolocation.getCurrentPosition(function(r){ if(this.getStatus() == BMAP_STATUS_SUCCESS){ var mk = new BMap.Marker(r.point); map.addOverlay(mk); map.panTo(r.point); alert('您的位置:' + r.point.lng + ',' + r.point.lat); var pt = r.point; map.panTo(pt);//移動地圖中心點 //alert(r.point.lng);//X軸 //alert(r.point.lat);//Y軸 gc.getLocation(pt, function(rs){ var addComp = rs.addressComponents; //alert(addComp.city); alert(addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber); }); } else { alert('failed'+this.getStatus()); } }); </script>
通過瀏覽器定位獲取當前經緯度:
<script type="text/javascript"> var map = new BMap.Map("allmap"); var point = new BMap.Point(116.331398,39.897445); map.centerAndZoom(point,12); 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); alert('您的位置:'+r.point.lng+','+r.point.lat); } else { alert('failed'+this.getStatus()); } }); </script>
ip定位獲取當前所在城市
<script type="text/javasript"> var map = new BMap.Map("allmap"); var point = new BMap.Point(116.331398,39.897445); map.centerAndZoom(point,12); function myFun(result){ var cityName = result.name; map.setCenter(cityName); alert("當前定位城市:"+cityName); } var myCity = new BMap.LocalCity(); myCity.get(myFun); </script>
通過詳細地理位置換取當前用戶經緯度坐標
http://api.map.baidu.com/geocoder/v2/?address=長沙市&output=json&ak=您的密鑰
我使用的是ajax請求數據,注意假如dataType為json時會出現跨域問題,最終我使用的是jsonp請求就解決了:
json和jsonp之間的區別:https://www.cnblogs.com/strugglion/p/5929821.html
$.ajax({ url:"http://api.map.baidu.com/geocoder/v2/?address="+city+"&output=json&ak=您的密鑰", dataType:'jsonp', processData: false, type:'get', success:function(data){ console.log(data); if (data.status==0) { console.log("緯度:"+data.result.location.lat+"經度:"+data.result.location.lng); } }, error:function(XMLHttpRequest, textStatus, errorThrown) { console.log(XMLHttpRequest.status); console.log(XMLHttpRequest.readyState); console.log(textStatus); }});
返回json格式的響應數據:
{"status":0,"result":{"location":{"lng":112.94547319535288,"lat":28.23488939994364},"precise":0,"confidence":12,"comprehension":100,"level":"城市"}}