1993年11月美国一个叫做詹尼弗·库恩的女孩遭绑架之后被*害,在这个过程当中,库恩用手机拨打了911电话,但是911呼救中心无法通过手机信号确定她的位置。由于这个事件,导致美国的FCC(美国通信委员会)在1996年推出了一个行政性命令E911,要求强制性构建一个公众安全网络,即无论在任何时间和地点,都能通过无线信号追踪到用户的位置。
在GPS 民用逐渐广泛背景之下,SA 政策显得尤为显眼,美国GPS 工业委员会也一直大力推动关闭SA。1996 年,克林顿正式发布了国家GPS 政策(PDD),明确表示美国在保护国家安全和对外政策利益的同时,推动GPS 全球卫星导航系统的应用,增强美国民用卫星导航系统工业的竞争力,为此美国政府还承诺10 年内中止使用选择可用性技术(SA)。
取消SA 干扰信号:为保持GPS 的国际领先地位,基于商业利益考虑,2000 年美国取消了对GPS 卫星民用信道的SA 干扰信号,民用GPS 的定位精度达到平均6.2 米的实用化水平。同年,GPS 被写入《美国法典》,以法律的形式将GPS 的两用性质予以保障,以在维护国家安全利益的前提下推动民用。
目前GPS的实际绝对精度在5米左右,而军队使用的精度是0.3米。

GPS地图坐标系转换
俗话说的好,国有国法,家有家规,每个行业都有自己输出的格式标准。
GPS数据遵循NMEA-0183协议,该数据标准是由NMEA(National Marine Electronics Association,美国国家海事电子协会)于1983年制定的。统一标准格式NMEA-0183输出采用ASCII 码,其串行通信的参数为:波特率=4800bps,数据位=8bit,开始位=1bit,停止位=1bit,无奇偶校验。
数据传输以“语句”的方式进行,每个语句均以“$”开头,然后是两个字母的“识别符”和三个字母的“语句名”,接着就是以逗号分割的数据体,语句末尾为校验和,整条语句以回车换行符结束。
我们就以公司的地址通过GPS接收机,接收到的代码为例子。
我们再来看一下NEMA-0183中的定位GGA格式:
格式:
$--GGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx*hh
创维大厦公司阳台定位搜下来的代码示例:
$GPGGA,065545.789,2232.3526,N,11357.0576,E,1,9,0.85,18.1,M,8.0,M,,*5E

GGA输出格式:ddmm.mmmm(度-分)
日常使用格式:dd.dddddd(度)
那么如何把GGA 输出的数据转换为我们日常使用的格式呢?学霸看一眼就会说, 这个问题很简单嘛,balabala~~~作为学渣的我,一头雾水;
公式如下:
ddmm.mmmm → 小数点前移两位 → dd.mmmm → dd 0.(mmmm/60) = dd.dddddd
举例:
11357.0576 → 113.570576 → 113 0.(570576÷60) = 113.95096
此时把这个经纬度放到百度地图里面会发现有问题,根本不准。
实际我们所在位置是创维大厦,当时把搜下来的经纬度放到百度地图中的时候,就胡发现已经偏离到软件园那边去了,预计有3公里左右的偏差。

之所以会产生“偏差”,这就涉及到一个有关坐标系转换的问题:GCJ-02 火星坐标系统纠偏。上面提到GSP模块输出数据的格式为NMEA-0183,使用的坐标系是WGS-84。通常,国际上其他国家的地图软件也都是使用WGS-84,相安无事。
不过,中国国家测绘局要求所有从事地理测量、地图绘制的公司、单位机构、个人必须使用GCJ-02坐标系(G表示Guojia国家,C表示Cehui测绘,J表示Ju局)。也就是说,国内的地图软件大都是使用的GCJ-02坐标系。所以开发者/用户如果将WGS-84的经纬度填入国内的地图软件,就会产生极大的偏差。
(所有的电子地图、导航设备,都需要使用GCJ-02坐标系。第一步,地图公司测绘地图,测绘完成后,送到国家测绘局,将真实坐标WGS-84的电子地图,加密成“GCJ-02火星坐标”,这样的地图才是可以出版和发布的。第二步,所有的面向客户的设备厂商,要在软件中加入该转换算法,将定位模块输出的真实WGS-84坐标,转换成GCJ-02的坐标。这样一来,“以偏治偏”,坐标系才可以完全匹配,也就没有“偏差”了)
那么,是不是所有的国内地图都使用了GCJ-02坐标系呢?非也……百度、搜狗又自成体系,自立坐标了。
