1

我想写一个LocationListener以最近最准确和最精确的位置作为它的位置。我打算在我的LocationListener

    @Override
    public void onLocationChanged(Location location) {
        if(location.distanceTo(mLocation)>location.getAccuracy()){
            mLocation = location;
        }
    }

如果用户的旧位置在新位置指示的“可能位置”圈之外,我打算这样做是更新位置。因此,例如,如果我们上次测量的是 GPS 信号,而新的信号是手机信号塔,而旧位置在手机信号塔的范围内,我们不会更新;另一方面,如果手机信号塔足够远,我们就知道用户已经移动并记录下来。

但是,该distanceTo(Location)函数声明它返回位置之间的近似距离(以米为单位)。它是否已经考虑到准确性?它会给我一个足够精确的数字让我以这种方式使用吗?

4

1 回答 1

5

简短的回答是否定的,在测量距离时Location.distanceTo(Location)不考虑值。Location.getAccuracy()

这是来自 Android 平台的用于计算距离的实际代码Location.distanceTo(Location)https ://github.com/android/platform_frameworks_base/blob/master/location/java/android/location/Location.java#L272

它根据给定的纬度和经度(不考虑准确性)使用 Vincenty 的逆公式(http://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf - 第 4 节)。

至于您更新“真实”用户位置的方法是否“足够精确”,这实际上取决于 GPS 灵敏度、准确度和精度,这可能因设备而异。

来自 OEM 的准确度估计值Location.getAccuracy()也可能有很大差异,通常我见过的设备会高估准确度(即,设备给出的准确度值大于真实准确度)而不是低估准确度。

您可能想查看我创建的“GPS Benchmark”(http://www.gpsbenchmark.com/)应用程序,该应用程序有助于在 Android 设备上快速对位置提供程序的准确性(GPS 和网络)以及“估计准确性”准确性进行基准测试. 我还根据一些 Java ME 设备的 GPS 基准测试结果与人合着了一篇关于这个主题的论文 ( http://journals.cambridge.org/repo_A82eaJIy ),其中大部分材料也与 Android 相关。

于 2012-09-10T21:23:52.150 回答