Android GPS准确性

时间:2011-09-05 17:31:02

标签: android gps

我想在我的应用中使用精美的GPS位置。所以我遵循了一个简单的教程(LocationManager的基本用法,显式注册GPS提供商,要求更新0毫秒,0米)并创建一个应用程序。我对更新的准确性和速度印象不深。速度很慢,精度最高为24米,但平均为96。

在同一部手机上,我在同一地点广为人知GPS STATUS。我很惊讶地看到修复的准确性。 4-6米,始终如一。

所以我关闭GPS状态并运行我的应用程序 - 我看到准确度为6米,但几秒钟之后它是24,56,90,128 ......并且在96左右波动。

现在,我想知道:这怎么可能?是否有提高准确性的技巧?!!

有没有人有好的例子/教程?


它无济于事

让我再说一遍:我得到并打印所有更新。所以我看到一系列精确的位置。

我看到波动,我看到最好的结果,它永远不会比12米好。

现在在同一地点,我开始GPS状态=>我看到准确度达到4米!

首先我想:哈,GPS STatus作弊,只是精确度

但似乎并非如此,因为当我打开我的应用程序并获得最后的知名度时,它确实是准确度为4的那个!

开始降级到最佳情况12。

总结:相同的条件,相同的条件,不同的应用=>精度不同!

所以我的问题:有什么技巧吗?任何额外的命令?任何特殊功率设置?与“你有多重要”有任何关系吗?

与:Android GPS. Location Listener does not want to acquire a fix :(

相关

3 个答案:

答案 0 :(得分:1)

谷歌在最近的Google IO 2013活动中发布了一个不错的API:

https://developers.google.com/events/io/sessions/324498944

您应该查看它,看看如何最小化您的代码。

请注意,它需要设备才能使用Play商店应用程序。

与使用普通位置传感器(电池,速度,精度等)相比,这种方法有许多优点

答案 1 :(得分:0)

使用GnssMeasurement可以获得最佳精度,但是很难编写代码。 Android 7+,我让Doodgee拍摄了双重照片(非常不流行的中国智能手机)并且可以工作。 https://developer.android.com/reference/android/location/GnssMeasurement https://developer.android.com/guide/topics/sensors/gnss(官方支持列表)。

GNNS(GPS / GLONASS / GALILEO / ...) LocationManager,(0 ms,0 m)-不起作用,一段时间后(1-20s),您将获得相同的协调(如果您留在一个地方)-精度为3-10m。使用LocationManager,您不会从物理模块中获取“原始” GNNS数据,而是由Android API计算得出的。使用GnssMeasurement,您可以得到它。

答案 2 :(得分:-1)

这个怎么样?

- 设定精度+设定功率要求高:

try{
    locator = new GeoLocator(this);
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationManager.addGpsStatusListener(new GPSStatusManager(locationManager));
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    criteria.setPowerRequirement(Criteria. POWER_HIGH);
    bestProvider = locationManager.getBestProvider(criteria, true);
    Bundle bundle = new Bundle();
    //I copied the next two lines out of some tutorial hoping that they would help boost my gps, but I'm really not sure what they do
    boolean xtraInjection=locationManager.sendExtraCommand(LocationManager.GPS_PROVIDER,
                                          "force_xtra_injection",bundle);
    boolean timeInjection=locationManager.sendExtraCommand(LocationManager.GPS_PROVIDER,
                                          "force_time_injection",bundle);
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0.0f, locator);
}catch(Exception e){}