Android手机定位

电脑杂谈  发布时间:2020-07-20 20:12:48  来源:网络整理

手机定位模块_gps定位模块是怎么工作的_定位模块

Android手机定位

不接触手机的发展就不可能进行移动互联网. 上周,出于项目的需要,我也also起手来,开始编写Android程序. 幸运的是,我有一个Java基础,但是我可以很快上手. 我写了一些小程序,主要是关于定位.

在Internet上也搜索了一些相关的文章和教程,但是给出的示例并不是很有效,我觉得它们只是肤浅的,但不清楚. 因此,我写这篇文章是为了分享我的一些经验. 尽管它主要基于android,但我认为它应该对其他平台的开发有所帮助.

本文重点在于制定合理的定位计划.

如何找到手机

在普及一些基本知识之前.

当然,找到手机的最简单方法是通过GPS模块(大多数智能手机现在都应该拥有它们). GPS方法具有最高的精度,但是其缺点也很明显: 1.它消耗更多功率; 2.大多数用户默认情况下不打开GPS模块. 3.可能需要启动GPS模块以获得第一定位数据. 时间更长; 4,室内几乎无法使用. 其中,缺点2和3相对致命. 需要指出的是,GPS占据了卫星通信的通道,可以在没有网络连接的情况下使用.

另一种常见的定位方法是基站定位. 总体思路是在移动电话上收集基站ID号(cellid)和一些其他信息(MNC,MCC,LAC等),然后通过网络访问一些定位服务以获得并返回相应的纬度和经度坐标. 基站定位的准确性不如GPS,但优点是只要网络畅通就可以在室内使用.

还有Wifi定位. 与基站定位类似,此方法是获取当前使用的wifi的一些信息,然后访问网络上的定位服务以获取经纬度坐标. 由于它和基站定位实际上需要使用网络,因此在Android中也统称为网络模式.

最后需要说明的是AGPS方法. 许将其与基站定位混淆,但实际上,AGPS的本质仍然是GPS,但是它将使用基站信息来协助获取GPS,然后它还可以校正获取的GPS结果,因此AGPS优于传统GPS. 快速,精度更高.

Android提供的定位界面

在编写第一个程序之前,我对android的幻想是这样的: 提供了一个允许我直接从GPS模块读取纬度和经度坐标的函数,以及一个可以直接访问网络并获得基准的函数定位的结果. 因此,我只需要调用调用函数即可完成所有操作.

现实与理想之间总是有很大的差距. Android上的开发完全不同. 如前所述,GPS模块启动与数据获取之间的时间相对较长,可能需要2到3分钟. 因此,如果有这样的功能手机定位模块,您的程序可能会被此功能阻塞几分钟. 我认为基于此考虑,如果您想在Android上获取定位信息,则必须使用异步方法.

代码如下:

01locManager =(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);

02locListener = new LocationListener(){

03 @ Override

gps定位模块是怎么工作的_手机定位模块_定位模块

04public voidonStatusChanged(String provider,int status,

05捆绑包){

06 // TODO自动生成的方法存根

07}

08 @ Override

09 public voidonProviderEnabled(String provider){

10 // TODO自动生成的方法存根

11}

12 @ Override

13 public voidonProviderDisabled(String provider){

14 // TODO自动生成的方法存根

15}

16 @ Override

17 public voidonLocationChanged(Location location){

18 // TODO自动生成的方法存根

19mobileLocation =位置;

20}

gps定位模块是怎么工作的_手机定位模块_定位模块

21};

22locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locListener);

这是来自互联网的随机摘录. 简要说明代码:

首先,您需要创建一个LocationManager;

然后定义您自己的LocationListener. LocationListener包含几个成员函数,所有成员函数都是回调函数. 最重要的一个是“ onLocationChanged”. 在android获得新的位置信息后,将调用此函数. 您可以在此功能中实现所需的功能. 例如,您可以定义一个内部位置变量,调用此函数后,将内部位置变量设置为最新值;

最后,调用LocationManager.requestLocastionUpdates,它实际上在android中注册了定义的locationListener. 在上面的代码中,这句话是让LocationListener监视GPS_PROVIDER的更改. GPS_PROVIDER对应于android上的GPS模块以获取位置信息,并且有一个NETWORK_PROVIDER意味着通过网络获取位置信息.

问题

接下来是一个问题,我们什么时候可以得到手机的位置纬度和经度?等待onLocationChanged被调用. 什么时候会被调用?没人知道. 我编写了一个小程序来测试注册侦听器(requestLocationUpdates函数)与在网络模式下调用onLocationChanged之间的时间间隔. 经过测试的网络状况非常好. 经过多次重复观察,大多数结果都可以在几十毫秒内返回,但有时时间间隔也可能长达数十秒. 这意味着您的用户需要等待数十秒才能返回.

因此,首先要注意的是,不要等待您的回调函数onLocationChanged被调用. 您需要设置超时机制.

这将引入第二个问题. 如果onLocationChanged在超时后仍然不返回怎么办?它只能提示用户找不到它吗?

不用担心,android还提供了一个功能: getlastKnowLocation. 此函数将返回android平台获得的最后位置信息. 例如,您可以这样做:

1Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

因此,即使未调用onLocationChanged,我们仍然可以获得位置信息. 当然,这是第三个问题: 这个返回值值得信赖吗?

如果您使用了某些LBS或地图程序,则会发现一种现象: 在某个时候,您打开地图的位置和结果所在的位置是上次使用地图程序的位置. 这是因为程序使用了由getLastKnownLocation获得的位置. 解决此问题的方法是定义一个标准,以判断所获得的位置是否可信. 除了纬度和经度,Android Location类还包含许多其他信息,例如何时获取,如何获取等. 程序员可以根据此信息确定所获取的位置是否过时或可信.

合理的计划

最后,讨论总体计划. Android官方文档[1]提供了建议的解决方案:

首先注册您的LocationListener,让它同时监视GPS_PROVIDER和NETWORK_PROVIDER;

定位模块_手机定位模块_gps定位模块是怎么工作的

然后您可以调用getLastKnownLocation以获取一个Location值,该值可以用作备用值;

然后在用户可接受的时间内连续接收从onLocationChanged返回的位置,将其与先前的值进行比较,然后选择最佳位置;

最后,筛选后会有一个最佳结果,您需要判断该结果是否可以接受. 如果可以接受,则将其返回给用户,否则,告诉用户该位置无法找到.

您需要在整个过程中定义两个重要功能: 一个是比较两个位置信息并返回最佳位置信息;第二个是比较位置信息. 另一个功能是确定位置信息是否可接受.

当前,移动电话上广泛使用了三种移动定位技术: 基于网络的小区标识定位,集成GPS定位和A-GPS定位.

首先,基于网络

小区识别和定位技术. GSM移动通信网络由许多小区(如小区)组成. 每个单元都有自己的编号. 由于移动电话通信遵循蜂窝技术规范,因此很容易知道蜂窝电话位于哪个蜂窝电话中,只要该蜂窝电话不在离线模式下即可. 定位精度取决于移动终端所在小区的半径,范围从几百米到几十公里. 与其他技术相比,该技术的准确性最低,并且每月需要支付一定的使用功能费用.

两个集成GPS

这是go-vern-ment在美国提供的全球定位系统. 24颗GPS卫星分布在距地面12,000公里的6架飞机上,并在12个小时内绕地球旋转,因此可以随时在地面上的任何位置观测到4颗以上的卫星. 集成GPS定位需要电话中内置GPS模块,但是该模块仅具有接收功能,而没有发送功能. 24颗GPS卫星不断向地球发送包含重要参数(例如时间和卫星位置)的信息. 手机被我们的手机接收后,会同时使用多个卫星发送的信号的到达顺序来计算手机和时差. 到每个卫星的距离,然后使用三维坐标中的距离公式与三个卫星形成三个方程,以计算手机的位置(X,Y,Z). 考虑到卫星时钟和手机时钟之间的误差,实际上有四个未知数,X,Y,Z和时钟差. 因此,有必要引入第四颗卫星来形成4个方程来求解,以获得手机的经度,纬度和仰角. . 实际上,手机通常可以锁定4颗以上的卫星. 这时,可以根据卫星的星座将手机分为几组,每组有4颗卫星,然后通过定位算法选择误差最小的组.

三,辅助GPS

Assist GPS(缩写为A-GPS)是一种网络辅助的全球定位系统. 此方法实际上是“小区识别定位+集成GPS定位+远程数据计算+ GPRS信息传输”. 辅助GPS定位要求移动运营商提供其移动通信信号塔的GPS位置,并在移动网络上添加位置服务器. 它还需要在地面上建立一个GPS参考站(用于实时观察卫星并为定位服务器数据提供全球实时星历表. )

辅助GPS定位的过程如下:

1. 手机通过网络将最近的移动通讯塔的GPS位置发送到位置服务器;

2. 位置服务器(GPS参考站提供的全球实时星历数据)根据移动通信塔的GPS位置向手机发送信号塔的当前GPS星历信息(近似手机位置). ,并且此信息将被临时存储在手机内存中的特定位置(临时缓存);

3. 移动电话从星历缓冲区读取数据并从一些指定的卫星接收信号(省去了接收大量信号,计算数据和选择最佳卫星组的需求);

4. 手机收到指定卫星的信号后,会参考星历缓冲区中的位置信息(主要是仰角)来检查并计算手机的当前位置,然后将其显示在屏幕上(警告: 如果这时如果天空中没有指定的卫星信号(例如,手机位于室内),则将从第1步开始重复,请注意您的交通状况;

5. 手机会自动选择具有时间变化(时间变化导致卫星偏移)和位置移动(位置变化导致仰角变化)的卫星,并且星历缓存会实时刷新;

手机定位模块_gps定位模块是怎么工作的_定位模块

6. 用手机重复步骤3、4和5.

7. 其他重要链接的说明: ①. 如果已成功定位电话一次,则电话存储器中将存在一个星历缓存,该星历缓存会保存最近的位置信息,并且在退出定位软件后不会丢失. 但是它一关就消失了. ②. 每次启动GPS时,模块都会先读取星历表缓存,然后尝试最后定位的卫星信号,然后将出现两种情况: 如果有最后一次定位的卫星信号,它将立即定位,并且屏幕上不会出现连接提示. 这就是为什么当时间间隔和位置移动相对时,只要打开定位软件就可以完成定位的原因到最后的定位不大; b. 如果最后一次定位没有卫星信号,则星历缓存将无效,手机将重做从步骤1开始的所有步骤,并且屏幕上会出现网络提示.

四个手机GPS模块概述

(1)GPS模块由信号接收硬件和数据处理软件组成. 数据处理软件在主板芯片中固化. 像计算机的BIOS一样手机定位模块,它位于软件和硬件之间. 它之所以柔软,是因为可以用特殊的设备将其闪烁,而很难,因为普通用户根本无法触摸它. A-GPS与纯GPS的区别在于A-GPS拥有额外的数据处理软件部分,可以从网络获取辅助数据.

GPS的工作过程总结如下(第3部分和第4部分是A-GPS的特殊任务,如果未在设置中检查A-GPS或星历表成功锁定了卫星,则不会执行该工作)缓存):

1. 读取电话存储器中的星历缓存(最后的位置信息);

2,锁定卫星并接收信号;

3. 呼叫移动通信网络,将当前通信基站的GPS位置发送给定位服务器;

4. 接收定位服务器发送的当前通信基站当前在GPS上的星云数据,并将其写入手机存储器中的星历缓存中;

5. 检查仰角并计算并显示;

6. 独立选择星星并刷新缓存(即使退出定位也不会丢失);

7. 重复步骤1、2、5和6.

(2)修改系统参数(实际上是服务器地址)的方法可以提高GPS定位速度. 实际上,这是为了提高A-GPS的定位速度. 只是用中国服务器替换外部服务器. 它实际上并没有改善纯GPS定位. GPS定位的速度不包括由定位引起的卫星信号强度的变化. 实际上,它仅与天线的接收能力和芯片的处理能力有关. 必须注意,GPS模块的数据处理软件部分位于专用芯片中. 它不在系统ROM中,因此无法通过DIY固件方法进行修改

阅读这些内容后,我认为每个人都不应陷入快速rom定位和慢速rom定位的问题. 即使速度受到影响,也与AGPS服务器地址的设置有关. 如果未启用辅助定位,则根据以上理论,相同位置的冷启动定位速度将相同. 当然,卫星信号在传播过程中会受到很大影响. 卫星位置,大气密度,空气质量,电离层反射,折射,衍射等都会影响波的传播. ,因此在不同时间在同一位置的定位速度不能相同.

此外,有些同学说,乱丁,我也可以做到这一现象,我没有深入研究,但是与我使用的其他手机相比,我觉得这种情况应该是导航软件或Android系统的一种优化设计gps类似于热启动原理. 如果距上次距离很远,则定位时间间隔相对较长,并且在此期间内gps尚未打开,并且网络辅助功能已关闭(真正的冷启动),可以在以下时间内完成定位1分钟非常感谢.

此外,D2G手机本身的情况也不同. 就像有些同学的手机信号良好一样,他们不会潜水,有些会重启,有些不会重启. 每台机器的GPS信号接收能力可能不同,所以定位性能也不同,本文的目的是让大家了解其原理,是否真的可以改善,我毕竟没有办法不是的GPS或的导航电话,无论它的质量如何,都有其局限性.

最后一件事是关于D2G的定位性能. 从我的手机上,信号接收能力和搜索卫星的能力都相当不错,但是信号要求却稍高一些,通常可以快速搜索4颗以上的卫星. 但是,信号强度不满足定位的阈值要求,因此需要一段时间. 关闭GPS时,位置不会移动太多,间隔也不长,热启动基本上可以在几秒钟内固定. 一般来说,garmin-asusM10与我的其他WM系统的GPS比率略有不同,但作为非的GPS手机还是不错的.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shumachanpin/article-287459-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...