定位當前地理位置

根據用戶的地理位置提供相關地區服務,已經是非常普遍的一項功能,例如本地生活類網站、外賣網站等。HTML5新功能中提供了獲取用戶位置的能力,使用HTML5 Geolocation API來構建基於地理位置的應用。

Geolocation API通過navigator.geolocation全局對象進行訪問。初次訪問時,瀏覽器會詢問用戶是否共享位置,若用戶選擇允許程序使用Geolocation API權限。判斷瀏覽器是否支持Geolocation API,可以通過判斷是否存在navigator對象得知。

if(navigator.geolocation){
    // 獲取地理位置
}else{
    console.log('您的瀏覽器不支持geolocation');
}

獲取用戶的當前位置,可以調用navigator.geoloaction的getCurrentPosition方法

navigator.geolocation.getCurrentPosition(
    function success(position){},
    function error(positionError){},
    options
)

完整的代碼如下:

function success(position){
    console.log('獲取位置成功', position.coords);
}
function error(positionError){
    console.log('獲取位置失敗', positionError.code, positionError.message);
}
var options = {
    enableHighAccuracy:false,
    timeout:10000,
    maxinumAge:0
}
if(navigator.geolocation){
    navigator.geolocation.getCurrentPosition(success, error, options);
}else{
    console.log('您的瀏覽器不支持geolocation');
}

成功獲取位置後,會調用回調函數success。返回的參數position對象包含包含獲取位置時的時間戳timestamp和座標信息coords。coords對象包含了很多有用的位置數據信息。

  • latitude:座標緯度。
  • longitude:座標經度。
  • accuracy:座標精度,單位爲米。

當獲取位置失敗時,會調用回調函數error。返回的參數positionError的message屬性包含了相關的錯誤信息描述,positionError.code標識錯誤的原因,positionError.code的值有以下幾種:

  • UNKNOW_ERROR(0):其他錯誤。
  • PERMISSION_DENIED(1):用戶拒絕分享位置信息。
  • POSITION_UNAVALABLE(2):獲取用戶位置信息失敗。
  • TIMEOUT(3):獲取用戶位置信息超時。

getCurrentPosition方法的參數options可以用來設置以下內容:

  • enableHighAccuracy:布爾值,是否獲取高精度的位置信息,如果開啓可能會增加響應時間,默認值爲false。
  • timeout:定位超時時間,單位爲毫秒,如果到達時間沒有取得用戶位置信息,則觸發失敗回調函數,默認值爲0,表示無限大。
  • maxinumAge:用戶位置信息緩存的最大時間(單位爲毫秒),默認值爲0。

當用戶位置變化時,還可以通過watchPosition方法監聽用戶的位置信息,watchPosition的參數和getCurrentPosition相同。函數執行後返回一個唯一標識,可以通過clearWatch方法來取消監聽。

var watchId = navigator.geolocation.watchPosition(success, error, options);

navigator.geolocation.clearWatch(watchId);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章