Android GPS以不同的精度返回相同的位置坐标

Posted

技术标签:

【中文标题】Android GPS以不同的精度返回相同的位置坐标【英文标题】:Android GPS returning same location coordinates with different accuracy 【发布时间】:2018-09-02 01:40:57 【问题描述】:

我的应用程序使用ReactiveLocationProvider 使用LocationRequest 对象获取位置更新。完整代码如下:

mLocationRequestPassive = LocationRequest.create();
mLocationRequestPassive.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);     
mLocationRequestPassive.setFastestInterval(60000);     
mLocationRequestPassive.setInterval(PASSIVE_UPDATE_PERIOD_IN_SECONDS * 1000);
mSubscriptions.add(mReactiveLocationProviderPassive
                           .getUpdatedLocation(mLocationRequestPassive)
                           .observeOn(androidSchedulers.mainThread())
                           .subscribe(this::onLocationChanged,
                                      throwable -> Timber.w(throwable,
                                                   "Location request error")));

它几乎可以工作 95% 的时间,但有时它会开始发送重复的 lat/lng。但是,准确度是不同的。它曾经发生在其他人身上吗?有什么解决办法吗?

我正在使用以下版本的库

compile 'pl.charmas.android:android-reactive-location:0.9@aar' compile 'com.google.android.gms:play-services-location:11.0.4'

更新

在此期间车辆正在移动。因此,添加 setSmallestDisplacement 只是将其从具有相同 lat/lng 的位置更新更改为没有位置更新。

【问题讨论】:

你可以看看LocationRequest.setSmallestDisplacement()。 对不起,我忘了说这个。发生这种情况时,车辆在这段时间内移动。 请定义您希望看到的行为。 【参考方案1】:

不知道为什么会在服务中出现,但是一般情况下,你可以使用distinctUntilChanged(BiPredicate)来过滤掉后续项中的小改动:

Observable.just(10.0, 10.1, 10.15, 10.162, 11.0)
.distinctUntilChanged((prev, curr) -> Math.abs(prev - curr) < 0.09)
.subscribe(System.out::println);

【讨论】:

以上是关于Android GPS以不同的精度返回相同的位置坐标的主要内容,如果未能解决你的问题,请参考以下文章

Android 位置管理器每次返回相同的 GPS 坐标

Android GPS定位速度不可靠

提高 GPS 精度 - Android 转弯地图

某些设备上的位置读数错误/精度差

在 Android 中使用 Fusion Provider 实现卡尔曼滤波器以获取 GPS 位置

html5 如何调用安卓手机获取gps坐标