百度地圖API的IP定位城市和瀏覽器定位(轉)


百度地圖API提供了Geolocation 和 LocalCity兩個服務類。

這倆API可以分別供用戶在JavaScript中進行定位和城市確認。

1 本質上,Geolocation這個類是使用了支持HTML5瀏覽器提供的Geolocation API 來進行定位的。目前Internet Explorer 9、Firefox、Chrome、Safari 以及 Opera 支持地理定位(因為他們支持HTML5)。

2 本質上,LocalCity這個類是利用用戶IP地址去百度數據庫里查詢得到IP所在的城市。

關於第一點的原理,在此解釋下:在支持HTML5的瀏覽器下,navigator對象下有一個屬性----geolocation,而 geolocation屬性又有個方法getCurrentPosition(回調函數1,回調函數2)可以通過瀏覽器向設備發起定位請求,瀏覽器就會讓 設備發送相關指令到附近上網設備,上網設備返回定位信息給用戶設備,瀏覽器就獲得了用戶位置。

當瀏覽器獲得定位信息成功,則navigator.geolocation.getCurrentPosition(回調函數1,回調函數2); 中的回調函數1執行,如果定位失敗,則回調函數2執行。  

若定位成功,則自動把定位結果對象作為參數傳遞給回調函數1,。 若定位失敗,則自動把錯誤對象傳遞給回調函數2.  所以在回調函數2中可通過error.code 獲取到錯誤碼。(假設形參名為error)。

如下代碼就是用HTML5獲取定位信息,並把成功定位交給showPosition處理,把錯誤定位交給showError處理。

function getLocation()

  {

  if (navigator.geolocation)

    {

    navigator.geolocation.getCurrentPosition(showPosition,showError);

    }

  else{x.innerHTML="Geolocation is not supported by this browser.";} //瀏覽器不支持HTML5.

  }

 

注意:百度地圖提供的API使用起來與HTML5原生的定位代碼是不同的。

下面是百度定位代碼:

<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();  //實例化瀏覽器定位對象。

 //下面是getCurrentPosition方法。調用該對象的 getCurrentPosition(),與HTML5不同的是,這個方法原型是 getCurrentPosition(callback:function[, options: PositionOptions]),也就是說無論成功與否都執行回調函數1,第二個參數是關於位置的選項。 因此能否定位成功需要在回調函數1中自己判斷。

geolocation.getCurrentPosition(function(r){   //定位結果對象會傳遞給r變量

    if(this.getStatus() == BMAP_STATUS_SUCCESS){  //通過Geolocation類的getStatus()可以判斷是否成功定位。

        var mk = new BMap.Marker(r.point);    //基於定位的這個點的點位創建marker

        map.addOverlay(mk);    //將marker作為覆蓋物添加到map地圖上

        map.panTo(r.point);   //將地圖中心點移動到定位的這個點位置。注意是r.point而不是r對象。

        alert('您的位置:'+r.point.lng+','+r.point.lat);  //r對象的point屬性也是一個對象,這個對象的lng屬性表示經度,lat屬性表示緯度。

    }

    else {

        alert('failed'+this.getStatus());

    }        

},{enableHighAccuracy: true})

//關於狀態碼

//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 新增)

</script>

 

IP獲取城市就簡單了,如下:

<script type="text/javascript">

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);   //關於setCenter()可參考API文檔---”傳送門“

    alert(cityName);

}

var myCity = new BMap.LocalCity();

myCity.get(myFun);   //創建一個LocalCity對象myCity,然后調用其get()方法,就得到了用戶IP對應的城市。該城市結果會以參數形式傳遞給回調函數myFun。接下來就是myFun(結果城市result)來執行了----即上文紅色代碼。

</script>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM