位置#distanceTo(位置)是否考虑了位置#getAccuracy()?

And*_*yld 1 android location

我想写一个LocationListener最精确,最精确的近期位置作为其位置.我打算在我的代码中使用此代码LocationListener:

    @Override
    public void onLocationChanged(Location location) {
        if(location.distanceTo(mLocation)>location.getAccuracy()){
            mLocation = location;
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果用户的旧位置位于新位置指示的"可能位置"的圆圈之外,我打算这样做是更新位置.因此,例如,如果我们的最后一次测量是GPS信号而新的测量是一个蜂窝塔,并且旧位置在蜂窝塔的范围内,我们不会更新; 另一方面,如果蜂窝塔距离足够远,我们就知道用户已移动并记录下来.

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

Sea*_*eau 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灵敏度,准确度和精度,这可能因设备而异.

Location.getAccuracy()根据OEM的不同,准确度估计值也会有很大差异,通常我看到的设备高估了准确度(即设备提供的精度值大于真实精度),而不是低估精度.

您可能想查看我创建的"GPS Benchmark"(http://www.gpsbenchmark.com/)的应用程序,该应用程序有助于快速评估Android设备上的位置提供商准确度(GPS和网络),以及"估计的准确性"准确度.我还根据一些Java ME设备的GPS基准测试结果合着了一篇关于这个主题的论文(http://journals.cambridge.org/repo_A82eaJIy),而且大多数材料也与Android有关.