以精确的时间间隔获取GPS位置

时间:2013-04-04 00:40:22

标签: java android timer gps refresh

我试图让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最初比标称频率快,但随后饱和并导致大跳跃

如果我使用计时器,它运行良好,我每100毫秒(200或1000)获得位置,但计时器每10秒钟约100毫秒

编辑:为了澄清,我想获得每个确切(或接近)100毫秒,200毫秒或1000毫秒的位置

* *更新12-04-13

重做我的代码以使用location.getTime()后,这就是结果,所有测试都是在外部,中/高速进行,并在每个设备的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

2 个答案:

答案 0 :(得分:2)

当你收到位置时,不要查看(系统)时间戳,查看位置本身的时间戳,如果它是由GPS传送的,那么它应该是1000毫秒(1 / hz)。

Gps接收器从不提供奇数毫秒,当使用1hz时,它们正好在毫秒1000。 使用location.getTime(),看看你自己。

答案 1 :(得分:0)

虚拟化的多线程应用程序中没有精确的时间间隔。无论您是否使用计时器,当操作系统开始运行您的线程时,您都会收到通知。