2013-04-04 35 views
0

我試圖讓GPS現在的位置那樣精確,在不同的區間範圍內更多鈔票GPS位置,我有幾個外部GPS,爲10Hz,5HZ和1Hz的獲得一個精確的時間間隔

LocationManager locationManager = (LocationManager) 
car.this.getSystemService(car.this.LOCATION_SERVICE); 

    LocationListener locationListener = new LocationListener() { 
       public void onLocationChanged(Location location) { 
        // Called when a new location is found 

       } 
       public void onStatusChanged(String provider, int status, Bundle extras) {} 

       public void onProviderEnabled(String provider) {} 

       public void onProviderDisabled(String provider) {} 
      }; 

    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, 
locationListener); 

有了這樣我得到一個日誌更新這樣的駕駛時以恆定速度

10hz GPS 

81ms new position 
79ms new position 
88ms new position 
96ms new position 
196ms new positon 
60ms new positon 
256ms new position 
70ms new position 

5 hz GPS 

187ms new... 
189ms .. 
275ms .. 
140ms .. 
180ms .. 
220ms .. 

因此,我認爲onStatusChanged最初低於標稱頻率快,但隨後飽和,並導致大個子跳

如果IU它是行之有效的,我得到的位置每100ms(200或1000),但計時器關閉約100ms每10秒

編輯:爲了澄清,我想獲得一個位置每個確切(或接近)100ms ,200毫秒或1000毫秒

* *更新13年12月4日

重做我的代碼以location.getTime)工作(這是結果,所有試驗在外面做,在中/ HIGHT後速度和每個設備在10分鐘內記錄日期

HTC Sensation Z710e 4.0.3 Internal GPS 1HZ 

Average Accuracy: 12.1m  
Average intertval: 1186ms 
Min: 98ms 
Max: 2621ms 


HTC Desire HD 4.0.4 Internal GPS 1HZ 

Average Accuracy: 10.6m   
Average intertval: 1211ms 
Min: 144ms 
Max: 2588ms 


ASUS Transformer TF101 4.0.4 Internal GPS 1HZ 

Average Accuracy: 18.15m  
Average intertval: 1000MS 
Min: 1000ms 
Max: 1000ms 


SAMSUNG NOTE II GT-N7100 4.1.2 Internal GPS 1HZ (Glonass) 

Average Accuracy: 6.8m   
Average intertval: 1000MS 
Min: 1000ms 
Max: 1001ms 


SAMSUNG, HTC OR ASUS with external GPS 5HZ 

Average Accuracy: 2.2m 
Average intertval: 200MS 
Min: 200ms 
Max: 200ms 


SAMSUNG, HTC OR ASUS with external GPS 10HZ (Glonass) 

Average Accuracy: 1.6m  
Average intertval: 100MS 
Min: 100ms 
Max: 100ms 
+0

該API使您能夠指定在收到下一次更新之前必須經過的最短時間和最短距離。但是,它並不能讓您指定一個時間間隔來收集GPS更新。 – 2013-04-04 19:41:34

回答

2

當您收到位置時,請不要看(系統)時間戳,查看位置本身的時間戳,如果它由GPS提供,它應該恰好爲1000毫秒(1/hz)。

Gps接收機從來不會提供奇數毫秒,它們在使用1hz時精確到毫秒1000。 使用location.getTime(),並看看你自己。

+0

是啊!我正在尋找currentTimeMillis()知道經過的時間,這是問題,太多謝謝 – Colas 2013-04-04 20:12:01

+0

我得到確切的間隔時間(1s/hz)與外部5&10赫茲GPS,但與內部1hz GPS有時我得到1秒精確的時間間隔,有時候我會在0.6秒和1.3秒之間,我無法檢測到哪個時間間隔會變得不穩定,準確性可能是什麼? – Colas 2013-04-08 12:59:38

+0

如果它來自GPS,它們不應該改變,在外面檢查或僅限定位到GPS。如果你仍然得到變化,那麼GPS的實現是不好的(那)Android手機。 – AlexWien 2013-04-08 16:11:57

0

虛擬化,多線程應用程序中沒有精確的時間間隔。無論您是否使用計時器,當操作系統開始運行線程時,您都會收到通知。

+0

您能否擴展您的評論? – Colas 2013-04-04 00:59:08

+0

您的操作系統正在運行一個線程,然後它切換到運行另一個線程。其中一個線程正在運行代碼來檢查時鐘是否滿足一定的時間間隔。如果該計時器線程在您的應用程序運行的整個時間內運行,那麼它會在該時間過去的時候通知您。但這不是什麼情況。相反,操作系統會不時地運行定時器線程,每次運行時,都會檢查時鐘並重新進入睡眠狀態。您無法強制它在該時間段過去的確切時間運行。很可能另一個線程正在運行。 – 2013-04-04 01:03:47

+0

我想說的是,你需要接受你只能接近理想的輪詢間隔。 – 2013-04-04 01:05:18