我想写一个 LocationListener
,它将最准确和最精确的近期位置作为其位置 . 我打算在我的 LocationListener
中使用此代码:
@Override
public void onLocationChanged(Location location) {
if(location.distanceTo(mLocation)>location.getAccuracy()){
mLocation = location;
}
}
如果用户的旧位置在新位置指示的"possible locations"圈之外,我打算这样做是更新位置 . 因此,例如,如果我们的最后一次测量是GPS信号而新的测量是一个蜂窝塔,并且旧位置在蜂窝塔的范围内,我们不会更新;另一方面,如果蜂窝塔距离足够远,我们就知道用户已移动并记录下来 .
但是, distanceTo(Location)
函数表示它返回位置之间的大约距离(以米为单位) . 它是否已将准确性考虑在内?它会给我一个足够精确的数字让我以这种方式使用吗?
1 回答
简短回答是否定的,
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和网络)进行基准测试,以及"estimated accuracy"准确性 . 我还根据一些Java ME设备的GPS基准测试结果合着了一篇关于这个主题的论文(http://journals.cambridge.org/repo_A82eaJIy),而且大多数材料也与Android有关 .