草庐IT

Android GPS定位精度问题

coder 2023-06-06 原文

我正在开发 android 中的 gps 跟踪应用程序。这是我的代码架构:

  1. BackgroundSyncService :用于获取位置更新的服务类。这里初始化了 GoogleApiClient 并实现了其他与 Location 相关的方法。
  2. AppRunCheckerReceiver :一个 BroadcastReceiver 类,它将检查我的 BackgroundSyncService 是否在某个时间间隔内运行。如果它停止了,它就会开始。
  3. GpsEnableReceiver :如果 gps 状态发生变化,它将触发一个 BroadcastReceiver。它将检查我的 BackgroundSyncService 是否在某个时间间隔内运行。如果它停止了,它就会开始。
  4. InternetConnectionStateReceiver :一个广播接收器,它会在互联网状态改变时触发。它将检查我的 BackgroundSyncService 是否在某个时间间隔内运行。如果停止,则开始。

在我的 BackgroundSyncService 服务中,我使用这种方式初始化 GoogleApiClient:

public void setLocationLocationRequest() {

        try {
            googleApiClient = new GoogleApiClient.Builder(this).addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this).addApi(com.google.android.gms.location.LocationServices.API).build();

            locationRequest = new LocationRequest();
            locationRequest.setInterval(3000);
            locationRequest.setFastestInterval(3000);
            locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
            googleApiClient.connect();
        } catch (Exception e) {

    }

这里的准确率是 LocationRequest.PRIORITY_HIGH_ACCURACY 间隔是

locationRequest.setInterval(3000)

here是 GoogleApiClient 的实现代码。

This应用GPS信息部分包含纬度经度和精度参数

我的发现:onLocationChanged(Location location) 方法中我以这种方式检查 Location 对象的准确性:location.getAccuracy() .这里如果精度小于50米,我接受。

在 85% 的情况下,它就像一个魅力。它从 GPS 向我发送了确切的位置。但在 15% 的情况下,它会向我发送不准确的位置,例如超过 300 米。

15% 的设备是低成本的中国品牌手机。

我的问题:

  1. 我怎样才能使准确度接近 99%。我的代码架构有什么问题吗?
  2. GPS 精度是否取决于设备配置?如果是,那么我可以为低配置设备做什么?
  3. Uber、Go-JEK 等拼车应用如何适用于所有设备?他们是否只有 GPS 的额外编码?
  4. 我的申请是针对孟加拉国的。这里的网速很慢。它对 GPS 精度有负面影响吗?

提前感谢这个帖子。也很抱歉英语不好。

最佳答案

  1. How can i make accuracy level near 99%. Is there any problem on my code architecture?

这是现实生活中的场景。您无法确保所有位置提供程序都能按预期工作。你应该要求最好的位置。

  1. a) Does GPS accuracy depends on device configuration?

是的。一些设备可能具有较旧的 GPS 芯片组,只能跟踪 GPS 信号(美国),因为还有其他定位系统,如 Galileo(欧洲)、GLONASS(俄罗斯)、QZSS(日本)和北斗(中国)。对这些类型的芯片组支持越多,您跟踪更多卫星从而定位的机会就越大。此外,TTFF(首次修复时间)取决于 GPS 接收器有多少个 channel 。

b) If YES then what can i do for low configuration device?

由于这是一个硬件问题,您无法在此处执行任何操作。但其他位置来源可以弥补 GPS 数据的不足,例如 AGPS(辅助 GPS)、wifi 和蜂窝定位。还有一些付费选项提供了一个数据库,可以使用 wifi 接入点和 cellids 来定位您的设备(他们声称他们在 wifi 上提供了最佳解决方案,但我不确定,因为我不使用它。您可以查看 http://combain.com)。 Wifi 和 cellid 还取决于周围有多少可用的 wifi 接入点和手机信号塔以及它们的距离(信号强度)。如果你需要 50m 的精度,蜂窝定位无关紧要,但 wifi 有机会接近这个值。

2009 年的一些研究结果 [3]

  • 带 A-GPS 的 3G iPhone ~ 8 米
  • 3G iPhone w/wifi ~ 74 米
  • 3G iPhone 带蜂窝定位 ~ 600 米
  1. How Uber, Go-JEK etc. ride sharing apps works for all device? Is they have extra coding for GPS only?

他们可能有特定的位置策略,但它将基于在 GPS 中断期间使用其他来源。

  1. My application is for Bangladesh. Here internet is slow. Is it has negative impact on GPS accuracy?

其他答案声称互联网与 GPS 无关。是的,它确实与 GPS 无关,而是与位置有关。 AGPS 使用互联网获取 3 种类型的数据(卫星信号、年历和星历),这有助于 GPS 更快地提供定位。如果星历表和历书已过时或设备从先前的定位移动了数百公里,则称为冷启动,并且在没有 AGPS 的情况下大约需要 12-15 分钟。

Fused location provider 已经知道如何使用这些配置提供最佳解决方案,所以你应该祝福它。

引用资料:

关于Android GPS定位精度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42361598/

有关Android GPS定位精度问题的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  3. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  4. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  5. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  6. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  7. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

  8. 【高数】用拉格朗日中值定理解决极限问题 - 2

    首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有,  也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加

  9. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  10. SPI接收数据异常问题总结 - 2

    SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手

随机推荐