2013-04-04 56 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

相关问题