通常在Web開發中,常使用的地理定位方式有IP地址、GPS、WIFI、CDMA/GSM。
在新增的H5 WEB API中支持使用Geolocation對象獲取當前的位置信息。
Navigator.geolocation只讀屬性返回一個Geolocation對象,通過這個對象可以訪問到設備的位置信息。使網站或應用可以根據用戶的位置提供個性化結果。
//step1:判斷瀏覽器是否支持 if (navigator.geolocation) { alert('您的瀏覽器支持HTML5地理定位'); } else{ alert('您的瀏覽器不支持geolocation定位!'); }
getCurrentPosition()函數會異步地請求獲取用戶位置,並查詢定位硬件來獲取最新信息。
//step1:判斷瀏覽器是否支持 if (navigator.geolocation){ //step 2:調用 getCurrentPosition() 函數獲取用戶當前位置。 navigator.geolocation.getCurrentPosition( function(ev){//step3:用經緯度描述具體位置 document.getElementById('geo').innerHTML = '緯度:'+ev.coords.latitude+' 經度:'+ev.coords.longitude; }, function(err){ document.getElementById('geo').innerHTML = err.code+':'+err.message; })
}else{ alert('該瀏覽器不支持');
}
出於安全考慮,當網頁請求獲取用戶位置信息時,用戶會被提示進行授權。
注意不同瀏覽器在請求權限時有不同的策略和方式。Windows10在未開啟定位的情況下無法獲取位置
當然,也有可能看的以下提示
如果翻牆后,該問題任未解決,建議使用IP反查。
默認情況下,getCurrentPosition()會盡快返回一個低精度結果,這在不關心准確度只關心快速獲取結果的情況下很有用。(em?那要獲取高精度的定位結果呢?詳見文末總結↓)
當然,正常的Web應用很少是直接顯示經緯度兩個數字,而是顯示地圖展示定位。
像這樣:
當然我們不可能自己碼個地圖出來,造輪子的工作已經有人做好了,在此以百度地圖為例。
訪問百度地圖API SDK,申請一個開發者秘鑰即可。
該步驟按照引導就能迅速完成,在此不過多贅述。直接上完整代碼:
var geo = document.getElementById('info'); if (navigator.geolocation) { navigator.geolocation.getCurrentPosition( function(ev){ var latitude = ev.coords.latitude; var longitude =ev.coords.longitude; geo.innerHTML = '緯度:'+latitude+' 經度:'+longitude; createMap(latitude,longitude); }, function(error){ switch(error.code) { case error.PERMISSION_DENIED: geo.innerHTML="用戶拒絕共享地理位置信息" break; case error.POSITION_UNAVAILABLE: geo.innerHTML="無法獲取當前位置" break; case error.TIMEOUT: geo.innerHTML="操作超時" break; case error.UNKNOWN_ERROR: geo.innerHTML="其他錯誤" break; } }) } else{ alert('該瀏覽器不支持'); } //創建一個百度地圖 function createMap(a,b){ var map = new BMap.Map('allmap');//創建Map實例 var point = new BMap.Point(b,a); //經度緯度定位一個中心點,初始化地圖 map.centerAndZoom(point,20); //設置中心點坐標和地圖級別 map.addControl(new BMap.MapTypeControl()); //添加地圖類型控件 //map.setCurrentCity("太原"); // 設置地圖顯示的城市 此項是必須設置的 map.enableScrollWheelZoom(true); //開啟鼠標滾輪縮放 window.map = map;//將map變量存儲在全局 }
完結:在此只對Web地理做了一個入門學習介紹,其實geolation對象還提供了watchPosition()函數,它可返回更高精度的地理位置信息,適合移動設備。
轉自https://www.cnblogs.com/laoli-note/p/11484119.html