GPS定位基本原理浅析【转】

原址:http://www.cnblogs.com/magicboy110/archive/2010/12/09/1901669.html

网络上介绍GPS原理的专业资料很多,而本文试图从编程人员的角度出发,以一种程序员易于理解的方式来简单介绍一下GPS定位的基本原理,希望对做GPS开发的朋友有所启发。当然,本文并没有涉及具体的开发方面的技术。

一、GPS定位数学模型

之所以先介绍数学模型,是因为我认为这个数学模型可能是程序员比较关心的问题。当然事先声明,这个模型只是我根据一些GPS资料总专为程序员总结出来的一个简化模型,细节方面可能并不符合实际,想了解具体细节请参考专业的GPS讲解资料。

GPS定位,实际上就是通过四颗已知位置的卫星来确定GPS接收器的位置。

如上图所示,图中的GPS接收器为当前要确定位置的设备,卫星1、2、3、4为本次定位要用到的四颗卫星:

  • Position1、Position2、Position3、Position4分别为四颗卫星的当前位置(空间坐标),已知
  • d1、d2、d3、d4分别为四颗卫星到要定位的GPS接收器的距离,已知
  • Location 为要定位的卫星接收器的位置,待求

那么定位的过程,简单来讲就是通过一个函数GetLocation(),从已知的[Position1,d1][Position2,d2][Position3,d3][Position4,d4]四对数据中求出Location的值。用程序员熟悉的函数调用来表示就是:

Location=GetLocation([Position1,d1],[Position2,d2],[Position3,d3],[Position4,d4]);

一看到这个函数调用,程序员们就该来劲了:这些参数从哪里来?这个函数又是如何执行?由谁来执行的呢?立体几何还没有忘干净的可能还要问:为什么必须要4对参数呢?那下面我们就来一起探究一下。

1.Position1、Position2、Position3、Position4这些位置信息从哪里来?

实际上,运行于宇宙空间的GPS卫星,每一个都在时刻不停地通过卫星信号向全世界广播自己的当前位置坐标信息。任何一个GPS接收器都可以通过天线很轻松地接收到这些信息,并且能够读懂这些信息(这其实也是每一个GPS芯片的核心功能之一)。这就是这些位置信息的来源。

2.d1、d2、d3、d4这些距离信息从哪里来?

我们已经知道每一个GPS卫星都在不辞辛劳地广播自己的位置,那么在发送位置信息的同时,也会附加上该数据包发出时的时间戳。GPS接收器收到数据包后,用当前时间(当前时间当然只能由GPS接收器自己来确定了)减去时间戳上的时间,就是数据包在空中传输所用的时间了。

知道了数据包在空中的传输时间,那么乘上他的传输速度,就是数据包在空中传输的距离,也就是该卫星到GPS接收器的距离了。数据包是通过无线电波传送的,那么理想速度就是光速c,把传播时间记为Ti的话,用公式表示就是:

di=c*Ti(i=1,2,3,4);

这就是di(i=1,2,3,4)的来源了。

3.GetLocation()函数是如何执行的?

这个函数是我为了说明问题而虚构的,事实上未必存在,但是一定存在这样类似的运算逻辑。这些运算逻辑可以由软件来实现,但是事实上可能大都是由硬件芯片来完成的(这可能也是每一个GPS芯片的核心功能之一)。

4.为什么要必须要四对参数?

根据立体几何知识,三维空间中,三对[Positioni,di]这样的数据就可以确定一个点了(实际上可能是两个,但我们可以通过逻辑判断舍去一个),为什么这里需要四对呢?理想情况下,的确三对就够了,也就是说理想情况下只需要三颗卫星就可以实现GPS定位。但是事实上,必须要四颗。

因为根据上面的公式,di是通过c*Ti计算出来的,而我们知道c值是很大的(理想速度即光速),那么对于时间Ti而言,一个极小的误差都会被放大很多倍从而导致整个结果无效。也就是说,在GPS定位中,对时间的精度要求是极高的。GPS卫星上是用銫原子钟来计时的,但是我们不可能为每一个GPS接收器也配一个銫原子钟,因为一个銫原子钟的价格可能已经超过了这个GPS设备再加上使用GPS的这辆名贵汽车的价格。

同时,由于速度c也会受到空中电离层的影响,因此也会有误差;再者,GPS卫星广播的自己的位置也可能会有误差。其他等等一些因素也会影响数据的精确度。

总之,数据是存在误差的。这些误差可能导致定位精确度降低,也可能直接导致定位无效。GetLocation(函数)中多用了一组数据,正是为了来校正误差。至于具体的细节,我们就不用关心了,我们只要知道,多用一组数据,就可以通过一些巧妙的算法,消除或减小误差,保证定位有效。这就是GetLocation()函数必须用四组数据的原因,也就是为什么必须有四颗卫星才能定位的原因。

5.GetLocation()函数返回的位置信息怎样被GPS设备识别呢?

前面说在进行位置计算时都是用的空间坐标形式表示,但是对GPS设备及应用程序而言,通常需要用的是一个[经度,纬度,高度]这样的位置信息。那么我们可以想象,在GetLocation()函数返回位置结果前,可能会进行一个从空间坐标形式到经纬度形式的转换,我们不妨假设存在一个Convert(经纬度,空间坐标)这样的函数来进行这个转换。

6.单点定位与差分定位

实际上上面所说的只是定位原理中的其中一种,称为单点定位,或绝对定位。就是通过唯一的一个GPS接收器来确定位置。

目前定位精度最高的是差分定位,或称相对定位。就是通过增加一个参考GPS接收器来提高定位精度。

上面我们已经围绕一个虚拟的GetLocation()函数基本搞清楚了GPS定位的基本数学模型,对于编程而言,知道这些就足够了(其实不知道也不影响编程)。如果好奇心还没满足的话,我们继续了解一些GPS相关的背景知识。

三、GPS系统的构成

GPS系统=空间部分+控制部分+用户部分

1.空间部分

GPS空间部分主要由24颗GPS卫星构成,其中21颗工作卫星,3颗备用卫星。24颗卫星运行在6个轨道平面上,运行周期为12个小时。保证在任一时刻、任一地点高度角15度以上都能够观测到4颗以上的卫星。

主要作用:发送用于导航定位的卫星信号。

构成:24颗卫星=21颗工作卫星+3颗备用卫星

2.控制部分

GPS控制部分由1个主控站,5个检测站和3个注入站组成。

组成:GPS控制部分=主控站(1个)+监测站(5个)+注入站(3个)

作用:监测和控制卫星运行,编算卫星星历(导航电文),保持系统时间。

  • 主控站:从各个监控站收集卫星数据,计算出卫星的星历和时钟修正参数等,并通过注入站注入卫星;向卫星发布指令,控制卫星,当卫星出现故障时,调度备用卫星。
  • 监控站:接收卫星信号,检测卫星运行状态,收集天气数据,并将这些信息传送给主控站。
  • 注入站:将主控站计算的卫星星历及时钟修正参数等注入卫星。
时间: 2024-11-14 04:02:38

GPS定位基本原理浅析【转】的相关文章

GPS定位基本原理浅析

位置服务已经成为越来越热的一门技术,也将成为以后所有移动设备(智能手机.掌上电脑等)的标配.而定位导航技术中,目前精度最高.应用最广泛的,自然非GPS莫属了.网络上介绍GPS原理的专业资料很多,而本文试图从编程人员的角度出发,以一种程序员易于理解的方式来简单介绍一下GPS定位的基本原理,希望对做GPS开发的朋友有所启发.当然,本文并没有涉及具体的开发方面的技术. 一.GPS定位数学模型 之所以先介绍数学模型,是因为我认为这个数学模型可能是程序员比较关心的问题.当然事先声明,这个模型只是我根据一些

GSM蜂窝基站定位基本原理浅析

http://mol365.net/post/GSMe89c82e7aa9de59fbae7ab99e5ae9ae4bd8de59fbae69cace58e9fe79086e6b585e69e90.aspx 位置服务已经成为越来越热的一门技术,也将成为以后所有移动设备(智能手机.掌上电脑等)的标配.随着人们对BLS(Based Location Serices,基于位置的服务)需求的飞速增长,无线定位技术也越来越得到重视.GSM蜂窝基站定位,以其定位速度快.成本低(不需要移动终端上添加额外的硬件

【转】GPS定位原理

一.距离测定原理 1.伪距测量 伪距测量是利用全球卫星定位系统进行导航定位的最基本的方法,其基本原理是:在某一瞬间利用GPS接收机同时测定至少四颗卫星的伪距,根据已知的卫星位置 和伪距观测值,采用距离交会法求出接收机的三维坐标和时钟改正数.伪距定位法定一次位的精度并不高,但定位速度快,经几小时的定位也可达米级的若再增加观 测时间,精度还可以提高. 每一卫星播发一个伪随机测距码信号,该信号大约每1毫秒播发一次,接收仪同时复制出一个同样结构的信号并与接收到的卫星信号进行比较,由信号的延迟时间(dT)

Android GPS定位

GPS定位貌似在室内用不了,今天自己弄了一个GPS定位小Demo,包括用户所在的经度.纬度.高度.方向.移动速度.精确度等信息.Android为GPS功能支持专门提供了一个LocationManager类,程序并不能直接创建LocationManager实例,而是通过Context的getSystemService()方法来获取. 例如: //创建LocationManager对象 LocationManager lm = (LocationManager)getSystemService(Co

android 获取GPS定位

AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.yanlei.yl5" > <uses-permission android:name="a

Android GPS定位实现,教你如何一分钟实现GPS定位

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/50425041 今天给大家带来的是一篇关于GPS定位的文章,我们都知道,Android定位大致分为wifi定位,基站定位和GPS定位,今天我就带大家来看看GPS定位是什么玩意,通过本篇的学习,相信大家能很快上手GPS定位操作了.GPS定位是通过和GPS定位卫星通讯来进行定位的,可以使用最少数量的卫星实现全球定位,3颗,通过光波进行通讯,不需要联网,但是连接时间比较长,大致1分钟左右

3,gps定位原理及格式

1 gps定位原理 gps是美国开发的一套实时定位系统.在导航应用中,重点关注的是用户的gps接受机,根据接收机的数据从而获取当前的位置和时间信息.大概了解下定位原理: 由于我们是用于上位机的开发,接收器遵守的是NMEA0183协议,某种程度上我们通过协议直接得到当前所在的经纬度信息. 首先我们必须要了解的是地球的参考坐标系,以便于我们使用地图时把得到的坐标转换成导航所使用的坐标系.NMEA0183使用的参考坐标系是WGS-84坐标系. 其次,必须了解三颗卫星可以定位,另外一颗卫星是为了消除误差

Arcgis API for Android之GPS定位

欢迎大家增加Arcgis API for Android的QQ交流群:337469080 先说说写这篇文章的原因吧,在群内讨论的过程中,有人提到了定位的问题,刚好,自己曾经在做相关工作的时候做过相关的东西,所以就总结一下,给大家共享出来,因为本人水平有限,bug是在所难免,还望有更高的高人批评指正.废话不多说,直接进入主题. 要想在地图上定位并将定位结果实时显示出来,启发逻辑上非常easy:首先,接收并解析GPS或者网络的位置信息,一般来说,接受的位置信息是WGS84的经纬度的,可是我们的地图的

ionic cordova 引用百度地图以及利用手机GPS定位

首先引入百度地图 在html文件里面加入 <head> <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的密钥"></script> //申请一个百度密钥,建议申请浏览器版的比较方便测试 </head> <body> <button id = "getPosition"&g