Android有官方的GPS定位API,为什么还要使用百度/高德定位SDK ?

news2024/11/26 10:44:19

1. 背景

小组在一个Demo项目中,图省事准备使用官方的GPS定位API
但在我的印象中,官方的定位API是不好用的,一般都是用 高德地图/百度地图 的定位SDK的。
使用官方的定位API获取定位的话,在办公室调试的时候,可能室内压根获取不到的。
但是试了一下后让我感到惊讶,居然在室内都能定位到,这是怎么回事 ? 和我印象中的不一样啊
所以,对此查阅了若干资料,终于是搞明白了

通过本文,会讲清楚这几个问题

  • 有哪几种主动定位的方式 ?
  • 为什么在室内GPS定位几乎收不到信号 ?
  • 为什么在室内还能进行定位呢 ?
  • 是该使用官方定位API还是百度/高德定位SDK呢 ?

2. Android官方定位API

先来看下Android官方定位API,有这几种定位方式

  • GPS_PROVIDER:通过 GPS 来获取地理位置的经纬度信息
  • NETWORK_PROVIDER : 通过移动网络的基站或者 Wi-Fi 来获取地理位置
  • PASSIVE_PROVIDER : 被动定位,其他应用比如百度、高德等使用了定位,系统会更新定位信息并保存下来,通过此方式可以获取最近一次的位置信息。可以查询 getProvider() 方法决定位置更新的由来,需要 ACCESS_FINE_LOCATION 权限,但是如果未启用 GPS,则此 provider 可能只返回粗略位置匹配;

3. 查阅网上文章的说法

搜了下网上文章上的描述,也和我印象中的观点是类似的
官方点的高位API中主动定位有两种方式,但不太好用

  • GPS定位 : 在室内开发时,手机根本几乎没法获取到位置信息的
  • 网络定位 : 由于大陆的网络问题,没法访问google的服务

在这里插入图片描述

类似观点的文章还有
解决Android原生定位的坑
功耗大?定位精度差?如何优化Android原生定位
Android原生定位服务LocationManager
android手机定位onLocationChanged长时间不返回

4. 为什么GPS在室内会收不到信号 ?

查阅了相关资料,可以得出,由于太空卫星离地面太远,所以天线对天空之间不能有遮挡物。
现在的房子都是由钢筋混泥土建造而成的,所以GPS信号会被阻隔或反射而接收不到了。

在这里插入图片描述
在这里插入图片描述

5. 为什么在室内还能进行定位呢 ?

我又看了下我在Github上找的定位Demo的源码,发现平板上能获取到定位是因为我找的那个定位Demo内部做了优化 : 如果GPS获取不到,那就通过网络获取定位。
应该是国内高版本的Android做了优化,没有使用Google的网络 (国内访问不了google),而国内高版本手机系统网络定位是针对国内网络环境专门做过优化的,所以可以获取到定位。
不过这种方式获取的定位是大致位置,精确度不高的。
如果单纯获取GPS定位,我试了下,室内几乎是获取不到的,把手机放到窗外才能获取到GPS定位。

如果 Android 版本过低,或者使用原生Android系统的手机,可能在国内,也无法进行室内定位 (由于缺少设备,未验证该结论)

6. 百度/高德定位SDK会更靠谱吗 ?

6.1 高德地图定位SDK介绍

百度/高德这种专门的定位SDK都是融合多种定位数据(GPS、基站、Wifi、蓝牙等),得到的定位信息会比Android原生的定位更靠谱,而且是免费的。

这里以高德定位SDK为例,截取了部分官方对它的介绍

在这里插入图片描述
在这里插入图片描述

6.2 各种手机定位方式的原理

手机定位方式主要包括:GPS定位和网络定位 (基站、WiFi、蓝牙等)

6.2.1 GPS定位

通过GPS接收机接收卫星广播,通过解析多个可见卫星的位置、距离等信息以及相应算法得出自己的位置信息。
优点 :

  • 定位精度高,GPS定位分为军用和民用,民用领域的精度基本可在10米以内
  • 使用GPS定位,无需SIM卡、无需网络

缺点 :

  • 定位慢(相比网络定位来说定位要慢)
  • 耗电多(相比网络定位来说更耗电)
  • 室内或者地下室无法定位(因为卫星信号穿透能力弱,所以室内无法定位,即使室外,云层厚的地方,定位受影响)
  • 绝大部分手机终端用户默认不开启GPS功能

6.2.2 网络定位

网络定位是将手机设备收到的信号(主要是基站、Wifi、蓝牙)发送到网络服务器,获得位置。之所以要将信号数据发送到网络上,是因为网络定位是利用信号指纹进行定位,需要一个庞大的且持续更新的指纹数据库,这个数据库难以同步到移动设备上。为了进行定位,需要事先建立每个位置的指纹特征,然后在定位时用实时指纹比对每个位置的历史指纹,确定位置。

高德和百度等定位SDK都有维护一套庞大的指纹数据库,且使用的是国内网络,所以在国内就可以很好的使用网络定位了。

6.1.2.1 基站定位

根据手机终端和多个基站位置、信号强弱等关系,计算自己的位置信息。

优点:

  • 定位速度快
  • 耗电少
  • 室内可用

缺点:

  • 定位误差大,定位精度在几十米到几千米,精度依赖于基站的分布及覆盖范围的大小,通常精度在150米
  • 在城市中基站覆盖率比较高,推荐使用基站定位,如果是在郊区,基站相距较远,基站的覆盖没有城里好,定位的误差比较大
6.2.2.2 WiFi / 蓝牙定位

利用手机搜索的无线热点信号和信号强度,匹配热点位置服务器数据,返回手机位置信息。

蓝牙也是类似的。

原理 :

  1. 每一个无线热点都有唯一一个BSSID(即mac地址),无线热点的位置一定时间内相对来讲是固定的
  2. 手机开启WiFi时,可以搜索到附近无线热点及热点信号强度
  3. 手机将搜索到的无线热点列表信息上传到位置服务器;位置服务器通过计算,就可以返回手机定位信息

优点:

  • 定位精度高,特别在无线网络热点较多的地方;
  • 定位速度快;

缺点:

  • 依赖WiFi信号;

6.2 部分参考
高德网络定位算法的演进
手机定位方式总结
android中几种定位方式详解

7. 小结

通过本文,我们可以回答本文开头的问题了

  • 有哪几种主动定位的方式 ?
    • 有GPS定位和网络定位两种
  • 为什么在室内GPS定位几乎收不到信号 ?
    • 因为太空卫星离地面太远,所以天线对天空之间一旦有遮挡物,GPS定位信号就被被干扰了
  • 为什么在室内还能进行定位呢 ?
    • 因为老版本的国内Android系统,对于网络定位未做优化,用的Google的网络,国内自然访问不了
    • 高版本的国内Android手机系统,已经正对国内的网络环境,做了优化,所以就可以使用网络定位了
  • 是该使用官方定位API还是百度/高德定位SDK呢 ?
    • 百度/高德等专业的定位SDK会更靠谱,生产项目建议使用专业的定位SDK进行开发
    • 如果是Demo项目,只在几个新的手机上安装,为了方便,可以使用Android官方的原生定位,同样可以定位成功,可以看这个定位Demo

本文为氦客在CSDN上独家发布
地址 : https://blog.csdn.net/EthanCo/article/details/129882487

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/423999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

技术人的管理学-业务管理

主要内容前言制定计划遇到的问题?过程监控遇到的问题?复盘改进遇到的问题?通过PDCA循环解决业务管理问题总结前言 没有人天生就会管理,优秀的管理者都是在知行合一的过程中成长起来的,他们既需要系统的管理知识&#…

数据结构_第十三关(2):快速排序

目录 1.快速排序 原理: 代码如下(递归实现): 性能比较 快速排序的特性总结 2.快速排序的优化 1)三数取中优化: 2)小区间优化: 3. 挖坑法(快排的另一种思路&#…

Android Jetpack 从使用到源码深耕【调度任务组件WorkManager 从实践到原理 】(三)

本文,是Jetpack 调度任务组件WorkManager 从实践到原理系列文章的最后一篇,本文我们将对WorkManager 任务的具体执行源码,进行深入的解读。 大家坐好,我们要开始飙车了。 1.任务的具体执行 书接上文,我们既然知道了WorkManager,既然把worker包装为了workrequset,然后…

本地生活为什么会迎来爆发?点赋科技带你了解这些关键点

随着全球疫情的结束和加速数字化转型进程,本地生活市场已经成为了经济发展的亮点。本地生活指的是人们在生活中所需的一切服务和消费,例如美食、购物、医疗保健、教育培训等各种类别。点赋科技就和大家来聊聊其中的一些关键点。 以下是本地生活迎来爆发的…

网络编程套接字( TCP )

目录 1、实现一个TCP网络程序(单进程版) 1.1、服务端serverTcp.cc文件 服务端创建套接字 服务端绑定 服务端监听 服务端获取连接 服务端提供服务 服务端main函数命令行参数 服务端serverTcp.cc总代码 1.2、客户端clientTcp.cc文件 客户端main函数命令行…

【Java技术指南】「JPA编程专题」让你不再对JPA技术中的“持久化型注解”感到陌生了

JPA编程专题JPA的介绍JPA的介绍分析JPA注解总览JPA实体型注解EntityTableTableGeneratorTableGenerator 属性TemporalTransientColumnColumn 属性ColumnUniqueConstraint属性状态VersionVersionEmbeddable 和 EmbeddedEmbeddedEmbeddedIdMappedSuperclassEntityListenersEntity…

30分钟Maven 从入门到精通

一、什么是Maven Maven 是一个流行的 Java 项目构建和管理工具,它包含了一个项目对象模型 (POM Project Object Model) 一组标准集合。不仅简化了我们开发过程中对jar包依赖的导入,还对项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等所有…

SpringCloud集成Seata saga模式案例

文章目录一、前言二、Seata saga模式介绍1、示例状态图2、“状态机”介绍1)“状态机”属性2)“状态”属性3)更多状态相关内容三、SpringCloud 集成 seata saga1、saga模式状态机相关信息1)状态机配置相关的三个表2)状态…

根据 cadence 设计图学习硬件知识 day01了解腾锐 D2000芯片

1. 首先了解 腾锐 D2000 1.介绍 腾锐D2000 芯片 D2000芯片集成8个飞腾自主研发的新一代高性能处理器内核FTC663,采用乱序四发射超标量流水线,兼容64位ARMV8指令集并支持ARM64和ARM32两种执行模式,支持单精度、双精度浮点运算指令和ASIMD处…

ASP.NET动态Web开发技术第6章

第6章ASP.NET状态管理一.预习笔记 1.ASP.NET状态管理概述 状态管理是在一个网页或者不同网页的多个访问请求中,维护网页状态和信息的过程。 状态管理包含视图状态(ViewState)、控件状态(ControlState)、隐藏域状态(HiddenField)、Cookie、查询字符串(QueryString…

24位AD和16位DA超高精度PID串级控制器在张力控制中的应用

摘要:针对目前张力控制器中普遍存在测量控制精度较差和无法实现串级控制这类高级复杂控制的问题,本文介绍了具有超高精度和多功能的新一代张力控制器。这种新一代张力控制器具有24位AD模数转换、16位DA数模转换、双精度浮点运算和0.01%的最小输出百分比&…

【教程】使用R语言绘制词云图

哈喽,大家好,我是木易巷~ 最近木易巷在了解R语言,今天给大家分享一下使用R语言绘制出词云图的教程。 什么是R语言 R语言是一个开源的数据分析环境,起初是由数位统计学家建立起来,以更好的进行统计计算和绘图。由于R可…

Android之AppWidget 开发浅析

什么是AppWidget AppWidget 即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序,先看图: 图中我用黄色箭头指示的即为AppWidget,一些用户使用比较频繁的程序,可以做成AppWidget&#x…

分布式系统概念和设计-分布式对象和远程调用

分布式系统概念和设计 分布式对象和远程调用 能够接收远程方法调用的对象称为远程对象,远程对象实现一个远程接口。 调用者和被调用对象分别存在不同的失败可能性,RMI和本地调用有不同的语义。 中间件 在进程和消息传递等基本构造模块之上提供编程模型的…

PDCA循环模型——如何用同样的时间做更多的事?【No.1 】

PDCA循环模型,又称戴明环,是一个持续改进模型。PDCA循环包括以下内容: Plan阶段:确认目标,制定计划Do阶段:执行措施和计划Check阶段:检查验证,评估效果Action阶段:有效措…

健哥MYSQL私房菜 - 基础与介绍

前言 从今天开始, 健哥就带各位小伙伴学习数据库技术。数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深, 全面讲解数据库体系。 非常适合零基础的小伙伴来学习。 ------------------------------前戏已做完,精彩即开始---…

docker-compose详讲

一、概述 docker-compose 项目是docker官方的开源项目, 负责实现对docker容器集群的快速编排,来轻松高效的管理容器,定义运行多个容器。 docker-compose将所管理的容器分为三层, 分别是工程(project)&#…

C#,码海拾贝(19)——一般实矩阵的QR分解(QR Decomposition)方法之C#源代码,《C#数值计算算法编程》源代码升级改进版

1 实矩阵 实矩阵,指的是矩阵中所有的数都是实数的矩阵。如果一个矩阵中含有除实数以外的数,那么这个矩阵就不是实矩阵。 2 QR(正交三角)分解法 QR(正交三角)分解法是求一般矩阵全部特征值的最有效并广泛应…

基于Java+SpringBoot制作一个宿舍报修小程序

制作一个宿舍报修小程序,让学生实现快速报修,将流程进行精简, 便于管理部门有效响应。 微信小程序实战开发专栏 一、小程序1.1 项目创建1.2 首页iconfont图标引入1.3 报修管理报修提交报修记录报修溯源1.4 来访登记1.5 公告通知二、API2.1 Sp…

windows日志捕获工具-DebugView使用教程

debugview 是一款捕获windows桌面系统程序中由TRACE(debug版本)和OutputDebugString输出的信息。 1、双击打开DebugView.exe工具,看到如下界面: 其中这里 Include代表过滤想要的关键字,一般不会找自己想要的关键字日志就设置成星号*&#xf…