天天看點

移動端項目實作手機定位

一、手機定位原理

手機定位是通過特定的技術來擷取移動手機或中斷使用者的位置資訊(經緯度坐标),在電子地圖上标出被定位對象的位置的技術或服務。

二、手機定位的方式

1.基于GPS定位,是利用手機的GPS定位子產品将自己的位置信号發送到定位背景來實作手機定位,其定位精度較高。

2.基于移動營運網的基站的定位,是利用基站對手機的距離的測算距離來确定手機的位置,不需要手機具有GPS定位功能,但是經度很大程度依賴于基站的分布及覆寫範圍的大小,誤差會超過一公裡。

3.基于Wifi定位,此定位在小範圍内定位方式。

三、前端擷取定位的坐标有幾種方法;

1.通過H5的geolocation的屬性:

代碼如下:

if(navigator.geolocation){
  navigator.geolocation.getCurrentPosition(onSuccess , onError);
}else{
  alert("您的浏覽器不支援使用HTML 5來擷取地理位置服務");
}
//定位資料擷取成功響應
function  onSuccess(position){
      alert('緯度: '          + position.coords.latitude          + '\n' +
      '經度: '         + position.coords.longitude         + '\n' +
      '海拔: '          + position.coords.altitude          + '\n' +
      '水準精度: '          + position.coords.accuracy          + '\n' +
      '垂直精度: ' + position.coords.altitudeAccura)
}
//定位資料擷取失敗響應
function onError(error) {
  switch(error.code)
  {
    case error.PERMISSION_DENIED:
    alert("您拒絕對擷取地理位置的請求");
    break;
    case error.POSITION_UNAVAILABLE:
    alert("位置資訊是不可用的");
    break;
    case error.TIMEOUT:
    alert("請求您的地理位置逾時");
    break;
    case error.UNKNOWN_ERROR:
    alert("未知錯誤");
    break;
  }
}           

2.通過cordova的插件擷取:

** 要安裝一個插件,使用如下指令

cordova plugin add cordova-plugin-geolocation           

實作代碼如下:

document.addEventListener("deviceready",onDeviceReady,false);
 
            //Cordova加載完成會觸發
            function onDeviceReady() {
            }
 
            function getCurrentPosition(){
                //定位資料擷取成功響應
                var onSuccess = function(position) {
                    alert('緯度: '          + position.coords.latitude          + '\n' +
                          '經度: '         + position.coords.longitude         + '\n' +
                          '海拔: '          + position.coords.altitude          + '\n' +
                          '水準精度: '          + position.coords.accuracy          + '\n' +
                          '垂直精度: ' + position.coords.altitudeAccuracy  + '\n' +
                          '方向: '           + position.coords.heading           + '\n' +
                          '速度: '             + position.coords.speed             + '\n' +
                          '時間戳: '         + position.timestamp                + '\n');
                };
 
                //定位資料擷取失敗響應
                function onError(error) {
                    alert('code: '    + error.code    + '\n' +
                          'message: ' + error.message + '\n');
                }
 
                //開始擷取定位資料
                navigator.geolocation.getCurrentPosition(onSuccess, onError);
            }           

需要注意的:

        我在無網的時候擷取經緯度時:由于在辦公室内比較封閉,根本就擷取不到經緯度坐标(當時自己不知道);在這個問題上一直沒糾結了很長時間,以為擷取經緯度跟網絡有關系呢,其實一點關系都沒有,隻不過有網絡的時候系統會優先使用網絡或基站擷取,是以大家不要誤認為無網絡就擷取不到經緯度的誤區;還有大家可以在手機上下載下傳一個GPStest軟體,它可以幫你檢測經緯度甚至你所處的位置有幾顆衛星都顯示出來,很好用。。。

繼續閱讀