使用 getAccuracy 错误

Posted

技术标签:

【中文标题】使用 getAccuracy 错误【英文标题】:Using the getAccuracy wrong 【发布时间】:2013-01-20 14:27:34 【问题描述】:

我正在构建一个基于位置的应用程序,我想避免使用这种位置:“特拉维夫,特拉维夫,以色列”,这是非常不准确的。

我在使用位置之前使用以下条件:

if(!(this.location == null || this.location.getAccuracy() > 700))
    // use the location

但我不断得到这个位置(特拉维夫、特拉维夫、以色列),而特拉维夫还不够小,无法通过这个条件。

我错过了什么?怎么了?

【问题讨论】:

【参考方案1】:

你没有指定几个参数,但我会试一试。

确切的Location 参数取决于特定Location 的来源,即它是如何获得的以及使用什么地理位置来源。例如:

如果您使用 GPS,Location 将具有可靠的 accuracy 值。 如果您使用蜂窝网络无线电台 (BTS),您收到的准确度将受限于全球 BTS 的数据库、它们的位置和范围。 如果您使用 Wi-Fi 网络及其报告的信号强度,准确性将取决于 Wi-Fi 网络数据库的质量。不幸的是,这样的数据库维护和创建并不便宜。例如,Google 购买此类数据库并使用 Google Street View 汽车扫描此类网络。 如果您使用基于公共 IP 地址的本地化,您的准确性将仅限于城镇,因为这是 IANA IP 地址空间注册表中包含的最准确信息。此外,还可以通过使用代理服务器来欺骗它。

您将从定位服务获得的准确度表示与报告的位置之间的距离(以米为单位),在获得位置的那一刻,设备可能所处的位置。

所以(如果我正确理解您的问题),我认为您使用的是获取当前设备位置的低准确度方法。您只需更准确地切换到Location 的来源。

还请注意,定位服务所使用的位置获取方法(即如上所述用于查找位置的服务)实际上可能无法提供准确度返回的Location .要理解我的意思,请考虑以下场景及其两个结果 - 请注意,它们都来自基于 Wi-Fi 网络的相同定位方法:

    您位于多个 Wi-Fi 网络的范围内。您向定位服务询问设备位置。范围内的所有 Wi-Fi 网络恰好位于位置服务数据库中。因此,定位服务能够以相当准确的方式获取您的位置。 您位于多个 Wi-Fi 网络的范围内。然而,它们中的任何一个都不为定位服务所熟知,因为它们的起源(城镇)是已知的,但它们的确切位置和范围是未知的。在这种情况下,定位服务能够告诉您您所在的国家/城镇,但不知道您的确切位置。反过来,位置服务可以为您提供不准确的位置。

您必须通过测试是否完全可用,为这种情况做好准备。您可以通过发出Location.hasAccuracy() 来做到这一点。如果返回值是false,你不能调用Location.getAccuracy()(实际上你可以,但要注意——它会返回0!)。所以,你的情况应该更像:

if (this.location != null && this.location.hasAccuracy() && this.location.getAccuracy() < 700) 
    // do something

【讨论】:

感谢您的详细解答!我正在使用 gps 和网络提供商,因为我的用户可能在室内和室外。我猜我所说的位置是由网络提供商生成的。但我仍然不明白它是如何通过我的条件的......城市级别的准确度比 700 大得多。也许答案是你所说的“位置服务实际上可能无法为返回的位置提供准确度”是什么那是什么意思?它非常不准确,所以它没有准确或只是一个错误? 就是这个意思。这不是一个错误!在将getAccuracy() 与任何东西进行比较之前,请记住始终检查Location.hasAccuracy() 是否为true。您不能假设基于可用网络的位置的准确度会大于700。考虑到 Google 使用他们的网络位置数据库来为您提供更准确的位置。此检查的您的目的是什么?如果您想根据可用网络了解该位置是否到达,请检查Location.getProvider() 值。 谢谢,我检查一下,因为我的应用每 5 分钟向数据库发送一次用户位置,如果位置不准确,我想忽略它并坚持使用旧位置。 @ImriPersiado 当然,这是很常见的事情,这就是 hasAccuracy() 的目的 - 所有支持准确度的位置提供者都将其设置为 true 并将位置的准确度设置为有效值。所以我认为答案末尾的检查正是您所需要的:)

以上是关于使用 getAccuracy 错误的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法获得5-10 mts的恒定精度?

定位服务准确性

谷歌地图精度半径

融合位置 API 的准确性不佳

优化 String += 还是 Concat? [复制]

使用 gmail api tuto 的错误使用 python 3“除了错误。HttpError,错误:”