2015-08-21 47 views
4

我的手機不移動,但GPS不斷變化lat/long值不斷變化,這是爲什麼?我的手機不移動,但GPS緯度長值仍在變化

如何解決這個問題?如何得到我的手機的可靠緯度長值...我用下面的代碼獲取GPS位置:

 public Location getLocation() { 
    try { 
     locationManager = (LocationManager) mContext 
       .getSystemService(LOCATION_SERVICE); 

     // getting GPS status 
     isGPSEnabled = locationManager 
       .isProviderEnabled(LocationManager.GPS_PROVIDER); 

     // getting network status 
     isNetworkEnabled = locationManager 
       .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     if (!isGPSEnabled && !isNetworkEnabled) { 
      // no network provider is enabled 
     } else { 
      this.canGetLocation = true; 
      if (isGPSEnabled) { 
       locationManager.requestLocationUpdates(
         LocationManager.GPS_PROVIDER, 
         MIN_TIME_BW_UPDATES, 
         MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
        // Log.d("GPS Enabled", "GPS Enabled"); 
        if (locationManager != null) { 
         location = locationManager 
           .getLastKnownLocation(LocationManager.GPS_PROVIDER); 
         if (location != null) { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
         } 

       } 
      } 
      if (isNetworkEnabled) { 
       locationManager.requestLocationUpdates(
         LocationManager.NETWORK_PROVIDER, 
         MIN_TIME_BW_UPDATES, 
         MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
       // Log.d("Network", "Network"); 
       if (locationManager != null) { 
        location = locationManager 
          .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
        if (location != null) { 
         latitude = location.getLatitude(); 
         longitude = location.getLongitude(); 
        } 
       } 
      } 
      // if GPS Enabled get lat/long using GPS Services 

     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return location; 
} 
+3

任何GPS位置都是近似值。 [準確性](http://www.gps.gov/systems/gps/performance/accuracy/)不太好。最好你可以做的是實現一個過濾器,並拒絕更新,如果他們在給定的精度範圍內。 – 323go

回答

5

有很多的原因,可以做到這一點,而且它可能不是問題在所有。

有時只是您的GPS可以更好地修復您的位置,或者更改位置提供商。

評分:準確性不是很好,所以您的位置可能會不時變化。正如你所看到的this link。你可以從6個不同的來源獲得你的位置,他們每個人都有不同的準確性。

  1. 緩存的GPS。

大多數Android都有能力存儲上次瞭解的GPS位置。這通常在應用程序首次啓動時使用,並且您可以檢索時間戳,緯度,經度和準確性。

樣品的編號:

locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
  • 緩存網絡。

    Android設備還可以存儲由蜂窩運營商的網絡位置提供商確定的最後已知位置。供應商收集來自蜂窩網絡和WiFi的信息(如果它已打開),然後將其發送到遠程服務器端進程,該進程將信息收集起來併發回大概位置。這在所有國家都不適用。就像GPS一樣,您通常會檢索時間戳,緯度,經度和準確度。

  • 樣品的編號:

    locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
    
  • 實時GPS。
  • 這是被流傳輸關閉GPS的原始信息。首次打開GPS時,不會立即返回任何信息,它必須先基本預熱。預熱時間因設備而異,如果您在建築物內,通常需要一分鐘或更長時間。更多關於這一點。根據您的提供商允許,您可以訪問時間戳,緯度,經度,高度,方位,速度,準確度和行程距離

    樣品的編號:

    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,time,distance,listener); 
    
  • 實時網絡。
  • 這是如AT &噸美國不同的運營商蜂窩運營商返回的原始網絡位置提供的信息,使用不同的信息來確定位置,如WiFi數據,GPS信息,附近的手機基站,等等。根據您的運營商允許的內容,您可以訪問時間戳,緯度,經度,海拔高度,準確度和行駛距離。

    樣品的編號:

    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,time,distance,listener); 
    
  • 被動。
  • 此選項只是意味着你的應用程序可以偵聽位置更新,而它在最小化狀態。這個想法是爲了節省電池電量,使應用程序供應商在應用程序最小化時不會全速前進。這將是巨大的電池消耗。被動位置可以偵聽其他應用程序請求位置更新。您可能可以訪問時間戳,緯度,經度,高度和準確性。據我所知,您將無法確定這些信息來自哪個提供者。

    樣品的編號:

    <receiver android:name=".PassiveLocationChangedReceiver" android:enabled="true"/> 
    
  • NMEA。
  • 雖然這不是人類可讀的,但您可以訪問原始NMEA字符串。通常,這些字符串用於編程式訪問,並且只對開發人員或工程師有意義。這些數據通常用於海事應用程序。數據僅在GPS升溫後纔可用。

    來源:此信息取自here

    此外,也有一定的誤差很常見的來源而獲得的位置,你可以從Android的文檔,請參閱:

    從移動設備獲取用戶位置可能會很複雜。有幾個原因可能會導致位置讀數(不論來源)是否包含錯誤並且不準確。錯誤在用戶位置的一些來源包括:

    • 的位置信息源千頭萬緒

    GPS,小區ID,和Wi-Fi可以分別提供一個線索給用戶位置。確定使用和信任是精確度,速度和電池效率的權衡問題。

    • 用戶移動

    因爲用戶位置的變化,你必須每隔一段時間佔移動通過 重新估計用戶位置。

    • 變精度

    位置估計從每個位置源未來不在其準確性一致 。 10秒前從一個源 獲得的位置可能比來自另一個或同一 源的最新位置更準確。

    請花些時間閱讀來自Google的Location Strategies文檔。

    有關LocationManagerhere的更多信息。

    相關問題