2013-03-21 69 views
1

我正在努力構建我的應用程序的一段距離旅行部分,但我遇到了我的位置問題。在位置偵聽器中,我輸出緯度和長度座標,我可以看到座標不斷變化,現在我知道他們永遠不會完全相同,但是當我將第一個註冊位置存儲在偵聽器中時,然後檢查距離和不斷更新的位置之間的距離,可以高達25米。這裏是我的監聽器代碼:爲什麼我的位置不斷變化,我的代碼不正確?

public class MyLocationListener implements LocationListener { 
    public void onLocationChanged(Location location) { 

     if(flag ==0){ 

      locationC = location; 
      flag = 1; 
     } 

     //Constantly updated location 
     locationD = location; 

     //walking distance is distance from first initialized location to current location 
     walking = locationC.distanceTo(locationD); 

     String s =String.valueOf(location.getLatitude()); 
     String ss =String.valueOf(location.getLongitude()); 

     Toast.makeText(getApplicationContext()," "+s+" "+ss+" " ,Toast.LENGTH_SHORT).show(); 
     Toast.makeText(getApplicationContext(),"Walking distance is "+walking ,Toast.LENGTH_SHORT).show(); 

    } 

    public void onStatusChanged(String s, int i, Bundle b) { 
    } 

    public void onProviderDisabled(String s) { 
    } 

    public void onProviderEnabled(String s) { 
    } 
} 

這裏是在onCreate方法運行我的位置代碼的其餘部分:

// Creating the location manger and towers etc 
    lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    Criteria crit = new Criteria(); 
    towers = lm.getBestProvider(crit, false); 
    location = lm.getLastKnownLocation(towers); 


    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,MINIMUM_TIME_BETWEEN_UPDATE, MINIMUM_DISTANCECHANGE_FOR_UPDATE, new MyLocationListener()); 

    if (location != null) { 
     glat = location.getLatitude(); 
     glon = location.getLongitude(); 
    } 

我研究,我使用的是看是否有該V2地圖一個更準確的方式來獲取位置,我發現googleMap.getLocation();被打破,實際上它導致我的應用程序失敗。我不確定我是否已經正確設置了聽衆或其他位置代碼,我覺得該位置不應該像這樣跳躍。

我會說,我正在使用GPS來獲取位於適度多雲的天空下的位置,該設備告訴我位置由GPS設置。任何人都可以建議更好的務實方式來獲得更好的位置?

回答

3

哪個是你不變MINIMUM_DISTANCECHANGE_FOR_UPDATE的價值?

我已經分配了50米,my app。我還分配了2分鐘MINIMUM_TIME_BETWEEN_UPDATE。

Source code of my app |請參閱方法subscribeToLocationUpdates

+0

礦被設置爲1,我將它改爲50,看看有什麼不同,謝謝! – deucalion0 2013-03-21 12:28:03

+1

不客氣!看看這個[Javadoc](http://goo.gl/jCsNF) – 2013-03-21 12:45:25

+0

你的代碼幫助我調整位置多一點,所以謝謝,但我不得不承認,我的想法將不會成功計算某人走過的距離,它不會工作。 :( – deucalion0 2013-03-21 18:52:45

3

隨着目前的GPS技術,經緯度在20-50米範圍內跳轉是絕對正常的。

3

25m偏差在平民下完全正常GPS精度。

有關GPS如何工作的更多詳情,請參見here,特別是:

The cause for poor accuracy is not always obvious but is usually attributable to one of the following source of error:

- Multipath/signal corruption 
- Low number of satellites/poor satellite geometry 
- Erratic Ionospheric activity 
+0

感謝您的信息。那麼你認爲在計算以米爲單位的距離方面這不起作用嗎?我想以某種方式存儲用戶走過的距離,這是我能看到如何做到這一點的唯一方法。謝謝! – deucalion0 2013-03-21 12:30:44

+2

如果您知道最高速度(行走人通常不會超過5公里/小時),您可以平均您的結果以獲得更精確的位置。我會平均超過5-6個連續的樣本(或者可能是10個或更多),因爲步行的人在短短几秒內就不會走得很遠。 – lenik 2013-03-21 12:34:07

+0

謝謝你我會試着想出這樣的事情,歡呼! – deucalion0 2013-03-21 13:01:43

相關問題