HTML5 地理定位


通常在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


免責聲明!

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



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