2014-11-08 53 views
0

我在主要活動如下代碼:定位精度仍然很低使用GPS

LocationManager mlocMan = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);      

if (mlocMan.isProviderEnabled(LocationManager.GPS_PROVIDER)) {      
    LocationListener mlocListener = new LocationManagerHelper(...); 
    mlocMan.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,mlocListener); 
}   

在位置監聽器我有這樣的:(theAccuracy被初始化爲-1)

if (theAccuracy == -1 || theAccuracy > loc.getAccuracy()) { 
    theAccuracy = Math.round(loc.getAccuracy()); 
    latitude = loc.getLatitude(); 
    longitude = loc.getLongitude();   
} 
updateTimes++; 
if (updateTimes == 3) { 
    mLocMan.removeUpdates(this); 
    updateTimes = 0; 
    //get address for location 
    theAccuracy = -1; 
} 

意義,在GPS從GPS位置更新3次後,請採取最準確的位置並獲取其地址。在模擬器上,我獲得了20米的固定準確度(使用DDMS發送長/緯度),但這不是真實的生活,所以我嘗試着使用我的設備,而第一次(3次請求)給我準確的地址(當場)準確度爲40米,接下來的有時更準確,但地址在附近。我得到的最佳準確度是29米(發生一次),大部分時間都在30以上。這是我的GPS(LG G3)的問題,還是有其他想法可以在3-4-5請求後使事情更加準確?

回答

0

有幾個原因:

  1. 你的模擬器沒有實際的GPS硬件,所以它可能使用你的IP地址,所以這就是爲什麼它似乎固定。您的手機上

  2. GPS硬件已經熱身了一下。在進行計數的測量之前,將輪詢頻率設置爲一點(1秒更新一秒或半秒),並讓其運行幾秒鐘。

  3. 位置管理器支持的硬件和網絡查找(WIFI /發射塔)。不知道如何設置提供商只是你的手機的硬件,但如果你使用googlePlayServices GPS客戶端(LocationClient),它很簡單:

    mLocationRequest = LocationRequest.create(); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); mLmLocationClient.requestLocationUpdates(mLocationRequest,(LocationListener)this);

  4. 你可能在你的電腦中門測試。建築物肯定會影響GPS精度。

+0

1.模擬器着,當然,不是真實的生活 2.所以minTime PARAM你建議我應該把1而不是0?當你說熱身時,你的意思是從打開GPS或從我的第一次請求開始? 3.谷歌播放服務不正常,因爲定期的請求,但重量更多,沒有明顯的好處。我不需要不斷的位置請求,所以它不適合我的需求。 4.我站在我家附近的窗戶,具有諷刺意味的是,第一次嘗試給了我完美的結果,接下來的......很不完美。 – Amos 2014-11-08 12:22:02

+0

1.通過預熱我的意思是垃圾郵件的一些gps請求,從第一次請求的時間不是基準。我無法告訴你靠近窗戶是好還是不好。 GPS被計算爲兩顆衛星之間的三角洲,如果一顆衛星穿過你的窗戶有一條清晰的線條,而另一顆穿過了牆壁,則可能比穿過牆壁更差。 3.谷歌客戶端從重複請求中收斂非常明顯。無論是因爲熱身還是內部收斂算法,我都不知道。 – NameSpace 2014-11-08 12:30:13

+0

我會嘗試在戶外檢查它。同時,你是否建議我要求超過3個要求?你推薦我設置什麼minTime? – Amos 2014-11-08 12:44:12