【问题标题】:How is location accuracy measured in Android?在 Android 中如何测量定位精度?
【发布时间】:2011-03-04 09:50:45
【问题描述】:

有谁知道 getAccuracy() 返回的精度测量值的正确解释?例如,它们是否计算为:

  • 圆形错误概率(意思是,如果我理解正确,50% 置信圆的半径)?

  • 95% 置信圆的半径?

  • 还有别的吗?

此外,实际使用的计算是什么,我们可以依赖它们多少?它是否取决于位置估计的来源(GPS 与网络)?

非常感谢您能给我的任何建议。

【问题讨论】:

  • 问题不是如何获取位置,而是位置类中getAccuracy返回值的实际定义。

标签: android location


【解决方案1】:

要回答问题的一部分,数字是the radius of 68% confidence,,这意味着真实位置有 68% 的机会位于测量点的半径范围内(以米为单位)。假设错误是正态分布的(正如文档所说,这不一定是真的),这意味着这是一个标准偏差。例如,如果Location.getAccuracy 返回 10,则设备的真实位置有 68% 的可能性在报告坐标的 10 米范围内。

http://developer.android.com/reference/android/location/Location.html#getAccuracy()

【讨论】:

  • 谢谢,卡尔。我看到他们现在已经更新了文档,这非常有帮助。这正是我一直在寻找的,尽管我认为 dscheffy 的观点也很重要。
  • @paracycle 还提出了一个很好的观点,即准确性由提供者报告,他们最终可以决定以他们想要的方式处理它。例如,使用 DDMS 将提供 0.0 的准确度值,因为您输入的是精确坐标。
  • @AidenStrydom,没有。如果准确度返回 1000,则表示真实位置有 68% 的可能性在所提供位置的 1000 米范围内。
  • 精度受天气影响吗?
  • @karl 你的意思是 32% 超过 10 米吗? (例如 11 或 12 米或以上)。
【解决方案2】:

定位是一项棘手的任务,当您的电池寿命有限并且在建筑物和有许多大型建筑物的区域等没有 GPS 信号时。但 Android 使它变得更容易。当您请求位置时,您只需指定所需的准确度即可。

如果你指定你想要一个accuracy,例如*100 meters*,Android 将尝试获取位置,如果它可以获取一个精确到 70 米的位置,它将返回给你,但如果 Android 可以获取一个精度高于 100 米的位置,您的应用程序将等待并且不会收到任何信息,直到有一个如此精度的位置。

通常,Android 将首先获取 Cell ID,然后将其发送到 Google 服务器,该服务器会映射此类 Cell ID,服务器将返回精度较低的纬度和经度,例如 1000 米。到那时,Android 还将尝试查看该区域内的所有 WiFi 网络,并将有关它们的信息也发送到 Google 服务器,如果可能,Google 服务器将返回一个更准确的新位置,例如 800 米。

此时 GPS 将开启。 GPS 设备从冷启动起至少需要 30 秒才能获得定位,因此如果能够获得定位,它将返回纬度和经度,但同样具有精度,例如 100 米,这将是可能的最高精度。 GPS 工作的时间越长,您获得的准确度就越高。

重要提示:前两种方法需要互联网连接。如果没有数据连接,您将不得不等待 GPS,但如果设备在建筑物中,您可能无法获得位置。

【讨论】:

  • 这并不能真正回答“100m 精度”是什么意思的问题。
  • @vendor 请说明您获得此信息的参考资料。您的回答帮助我了解了它的工作原理,谢谢。
  • @a fair player 一些信息在 developer.android.com 中,我已经在 Android 中使用基于位置的服务进行了一些测试。
  • 什么 API 可以让您指定 100 米的精度?我看到 ACCURACY_COARSE、ACCURACY_FINE、ACCURACY_HIGH、ACCURACY_LOW、ACCURACY_MEDIUM 的标准,但不是 100 米。
  • 这个答案基于什么?
【解决方案3】:

getAccuracy 上的文档说它以米为单位返回精度。 我猜这意味着如果你得到一个 60 的返回值,那么你就在一个半径为 60 米的圆中的某个位置。

【讨论】:

  • 如果我查看我的谷歌地图和我当前的位置,你是对的......在大多数情况下。还发生了,我的手机显示我的位置距离我的真实位置大约 2 或 3 公里……我也对这个问题感兴趣
  • 谢谢。我同意 getAccuracy 返回的值以米为单位,并且它必须是圆的半径(或者在位置估计中也给出高度时可能是球体)。但是也应该有一个与之相关的概率,奇怪的是文档没有说明这个概率是什么或者它是如何得出的。我在网上看到一个帖子,有人建议它可能是 CEP,但这似乎只是一个猜测,所以我真的很想找到一种方法来确认它是那个还是 95% 置信度圈或其他什么。跨度>
  • 以下是一些有助于理解问题的链接(但不能解决问题):users.erols.com/dlwilson/gpsacc.htmgroups.google.com/group/android-developers/browse_thread/thread/…
【解决方案4】:

就我快速浏览一下 Android 源代码而言,这取决于设备的硬件以及它选择返回的值。

GpsLocationProvider.java 文件有一个reportLocation method,它被本机代码调用并作为一个值传递精度。因此,至少在框架中似乎没有发生任何计算。

qcom(我相信是高通)GPS git repo is passing hor_unc_circular 参数的准确性似乎暗示,至少,该实现正在使用 CER。

【讨论】:

    【解决方案5】:

    如果如文档中引用的那样,它是一个精度,那么用户的实际位置在 QUOTED_LOCATION +/- ACCURACY 内。因此,准确性定义了您可以期望用户所在的半径。文档没有说的是您如何确定用户在半径范围内 - 标准是 95%,所以我猜是这个。

    【讨论】:

    【解决方案6】:

    我知道您要求的是概率方面的明确答案,但我认为这里有两件事需要考虑。

    首先,由提供者决定他们想在这个值中添加什么,因此根据提供者的不同,这可能只是一个错误的猜测。

    其次,将其视为潜在的舍入问题可能会有所帮助。如果我试图根据多个输入来计算您的位置,并且其中一些输入仅适用于特定数量的有效数字,那么只能计算具有给定有效数字数量的位置。

    这样想——“大约”一加“大约”一百是多少。大概是一百左右,因为一百的准确度可能小于 1 的量级。如果我突然说答案是 101 左右,那么我最终可能会暗示一个不存在的准确度水平。但是,如果我实际上指定了准确度,那么我可以说它 100 正负 10 正负 0.1 是 101 正负 10。我知道这通常指的是 95% 的置信水平(标准错误),但同样,这一切都假设提供者理解统计数据,而不仅仅是猜测。

    【讨论】:

    • 谢谢 - 这很有帮助。在第一个问题上,我的位置跟踪方法是收集准确度估计,但也通过计算连续点之间的距离和时间来执行“现实检查”,然后丢弃那些需要不切实际的速度(即使,有时是在这种情况下,它们被报告为具有精确的准确性)。如果您有任何其他建议,我很想听听。
    猜你喜欢
    • 2015-09-05
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 2012-04-15
    • 2010-10-04
    相关资源
    最近更新 更多