用程序员 熟悉的函数调用来表示就是: 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()函数必须用四组数据的原因,也就是为什么必须有四颗卫星才 能定位的原因。$ D; _" _ 5.GetLocation()函数返回的位置信息怎样被 GPS 设备识别呢? 前 面说在进行位置计算时都是用的空间坐标形式表示,但是对 GPS 设备及应用程序而言,通常 需要用的是一个[经度,纬度,高度]这样的位置信息。那么我们可以 想象,在 GetLocation() 函数返回位置结果前, 可能会进行一个从空间坐标形式到经纬度形式的转换, 我们不妨假设存在 一个 Convert(经纬 度,空间坐标)这样的函数来进行这个转换。 6.单点定位与差分定位 4 实际上上面所说的只是定位原理中的其中一种,称为单点定位,或绝对定位。就是通过唯一的一 个 GPS 接收器来确定位置。 目前定位精度最高的是差分定位, 或称相对定位。 就是通过增加一个参考 GPS 接收器来提高定位 精度。 上面我们已经围绕一个虚拟的 GetLocation()函数基本搞清楚了 GPS 定位的基本数学模型, 对于 编程而言,知道这些就足够了(其实不知道也不影响编程)。如果好奇心还没满足的话,我们继 续了解一些 GPS 相关的背景知识。 卫星是哪里来的? 二、GPS 卫星是哪里来的? (废话,当然是人发射的!地球人发射的!) GPS(Global Position System,全球定位系统),全称为 NAVSTAR GPS(NAVigation Satellite Timing And Ranging Global Position System,导航星测时与测距全球定位系统)。GPS 是一 个由美国国防部开发的空基全天侯导航系统, 它用以满足军方在地面或近地空间内获取在一个通 用参 照系中的位置、速度和时间信息的要求。 1.GPS 发展历程 ? 1957 年 10 月第一颗人造地球卫星 SputnikⅠ发射成功,空基导航定位由此开始 ? 1958 年开始设计 NNSS-TRANSIT,即子午卫星系统; 1964 年该系统正式运行; 1967 年该系统解密以供民用。 ? 1973 年,美国国防部批准研制 GPS; 1991 年海湾战争中,GPS 首次大规模用于实战; 1994 年,GPS 全部建成投入使用; 2000 年,克林顿宣布,GPS 取消实施 SA(对民用 GPS 精度的一种人为限制策略)。 2.美国政府的的 GPS 策略 ? 两种 GPS 服务: SPS--标准定位服务,民用,精度约为 100M; PPS--精密定位服务,军用和得到特许的民间用户使用,精度高达 10M. ? 两种限制民用定位精度的措施(保障国家利益不受侵害): SA--选择可用性, 认为降低普通用户的测量精度, 限制水平定位精度 100M, 垂直 157M(已于 2005 年 5 月 1 日取消); " AS--反电子欺骗。 3.其他卫星导航系统 ? GLONASS(全球轨道导航卫星系统),前苏联 ? Galileo-ENSS(欧洲导航卫星系统,即伽利略计划),欧盟 ? 北斗导航系统,中国 ! 三、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 个) 作用:监测和控制卫星运行,编算卫星星历(导航电文),保持系统时间。 ? 主控站:从各个监控站收集卫星数据,计算出卫星的星历和时钟修正参数等,并通过注入站注 入卫星;向卫星发布指令,控制卫星,当卫星出现故障时,调度备用卫星。 ? 监控站:接收卫星信号,检测卫星运行状态,收集天气数据,并将这些信息传送给主控站。 ? 注入站:将主控站计算的卫星星历及时钟修正参数等注入卫星。 分布情况: ? 主控站:位于美国科罗拉多州(Calorado)的法尔孔(Falcon)空军基地。 ? 注入站:阿松森群岛(Ascendion),大西洋;迭戈加西亚(Diego Garcia),印度洋;卡瓦加 兰(Kwajalein),东太平洋。 ? 监控站: 个与主控站在一起; 个与注入站在一起; 1 3 另外一个在夏威夷 (Hawaii) ,西太平洋。 3.用户部分 GPS 用户设备部分包含 GPS 接收器及相关设备。GPS 接收器主要由 GPS 芯片构成。 如车载、船载 GPS 导航仪,内置 GPS 功能的移动设备,GPS 测绘设备等都属于 GPS 用户设备。 组成:主要为 GPS 接收器 作用:接收、跟踪、变换和测量 GPS 信号的设备,GPS 系统的消费者。 GPS 定位是目前最为精确、 应用最为广泛的定位导航技术, 以后将会成为每一个移动设备的标配 之一。现在的中高端只能手机,有相当一部分已经配备了 GPS 硬件。那 么针对 GPS 定位的开发 技术也将成为一项主流常规技术。本文目的在于让准备进行 GPS 定位开发的编程人员对于 GPS 有一个大致的了解,这对于编程可能没有 什么直接的帮助,但是我想了解一下 GPS 的大致工作 原理, 在编程过程中就能够对 GPS 设备的工作特性有一个感性的认识, 这对于开发还是有很大间 接好处的。