GNSS坐标偏移与转换知识

内容纲要

高德地图和百度地图的地理位置为什么不同?

应该是坐标系加偏问题吧;

一般情况下,地图坐标系都是(WGS-84),而我国政策规定,国内地图必须进行对坐标加偏;

高德地图用的“火星坐标系”(GCJ-02),而百度地图又在(GCJ-02)基础上又一次加偏为百度坐标系( BD-09)

来源:https://www.zhihu.com/question/27407264/answer/36511366

背景:“相同的经纬度坐标在地图上显示会有偏移”您有没有遇到相似的情形?各种坐标体系之间如何转换?到底有哪些坐标体系?什么是火星坐标?

GPS是怎样定为坐标的

现在全球有四个卫星定位系统:美国的全球定位系统GPS(Global Positioning System),

俄罗斯的格洛纳斯GLONASS,

欧盟的伽利略系统,

我国的北斗。

每个系统都有几个部分:星载部分、控制部分、以及用户部分。每个卫星在运行中,发送电磁波信息、包含时间、位置等等,用户部分根据定位装置接收信号,然后进行方程解算,由于要更多的解因子,所以GPS系统下,一般三颗卫星信号锁定后才能计算三差解,也就是粗略定位结果了。

一、坐标体系

常见的坐标体系有哪些:

1)GPS坐标(WGS84)

wgs84 :WorldGeodetic System 1984,(全世界最流行的基准标准系统) ,是由美国国防部制图局建立,于1987年取代了当时GPS所采用的坐标系统(WGS-72坐标系统)。

WGS-84坐标系的坐标原点位于地球的质心,Z轴指向BIHl984.0定义的协议地球极方向,X轴指向BIHl984.0的起始子午面和赤道的交点。

GPS系统直接通过卫星定位获得的坐标,一般由经度和纬度两个参数组成,也叫经纬度。由0°经线和赤道确定,地球从格林尼治向东、西各划分180个经度;从赤道起,向南、北也各划分90个纬度。单位是六十进制(度:分:秒,字母表示方向)或十进制(正/负十进制度)的。

谷歌地球,googleearth上取到的,是GPS坐标,而且是度分秒形式,如图:

2)GCJ02

GCJ-02是国内最广泛使用的坐标体系。是由中国国家测绘局制订的地理信息系统的坐标系统。

它是一种对经纬度数据的加密算法,即加入随机的偏差,就是对真实坐标系统进行人为的加偏处理,按照特殊的算法,将真实的坐标加密成虚假的坐标,而这个加偏并不是线性的加偏,所以各地的偏移情况都会有所不同。而加密后的坐标也常被人称为火星坐标系统。

国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。所有的电子地图、导航设备,都需要加入国家保密插件:第一步,地图公司测绘地图,测绘完成后,送到国家测绘局,将真实坐标的电子地图,加密成“火星坐标”,这样的地图才是可以出版和发布的,然后才可以让GPS公司处理。第二步,所有的GPS公司,只要需要汽车导航的,需要用到导航电子地图的,都需要在软件中加入国家保密算法,将COM口读出来的真实的坐标信号,加密转换成国家要求的保密的坐标。这样,GPS导航仪和导航电子地图就可以完全匹配,GPS也就可以正常工作了。

比如谷歌中国,腾讯,高德都在用这个坐标体系。

3)其他坐标体系

一般都是由GCJ-02经过偏移算法得到的。

这种体系就根据每个公司的不同,坐标体系都不一样了。

比如,图吧、百度和搜狗就使用自己的坐标体系,与其他坐标体系不兼容。百度定位SDK可以返回三种坐标系,分别是bd09, bd09ll和gcj02,其中bd-09能无偏差地显示在百度地图上。bd09ll 百度又在gcj02的技术上将坐标加密就成了bd09ll坐标。

现在,您明白了吗:

在各种web端平台,或者高德、腾讯、百度上取到的坐标,都不是GPS坐标,都是GCJ-02坐标,或者自己的偏移坐标系。

比如,你在谷歌地图API,高德地图API,腾讯地图API上取到的,都是GCJ-02坐标,他们三家都是通用的,也适用于大部分地图API产品,以及他们的地图产品。

例外,百度API上取到的,是BD-09坐标,只适用于百度地图相关产品。

例外,搜狗API上取到的,是搜狗坐标,只适用于搜狗地图相关产品。

例外,谷歌地球,googleearth上取到的,是GPS坐标,而且是度分秒形式的经纬度坐标,在国内不允许使用,必须转换为GCJ-02坐标。

二、坐标格式与转换

1)坐标格式

A、经纬度。这个是球面坐标,对于北京来说,就是(116.388171,39.935961)这样的坐标。比如腾讯、高德、百度都是这样的经纬度坐标。谷歌是经纬度顺序写反的经纬度坐标。

所有坐标体系的原点,都是非洲,如图:

B、墨卡托坐标。是一种投影坐标, 又称为高斯-克吕格投影(Gauss-KrugerProjection),它不是用经纬度来表示的,数字一般都比较大,像这样的:(215362.00021333335, 99526.00034912192),多用于航海图航空图。墨卡托坐标主要用于程序的后台计算。直线距离,加加减减计算方便。比如搜狗地图API就是直接使用的墨卡托坐标。

2)度分秒坐标与经纬度的转换

比如,在GPS记录仪,或者google earth上采集到的是60进制度分秒形式113°50’40.45,那么应该怎样换算?

113.8445694444445=113+50/60+40.45/3600

反过来,知道经纬度113.844569444444怎样换算成度分秒呢?

度=113

分=(113.8445694444445-度)*60,取整数

秒=(0.8445694444445-分60)3600

3)GPS点的经纬度坐标小数点后哪一位是精确到米?

小数度:

经度0.00001度(十万分之一度,0°0’0.036"),在赤道上对应的地球表面距离约为1米稍多,但在南北极极点上,则是0米.

纬度0.00001度在地球表面任意地方对应的地球表面距离都是大约1米稍多.

度分秒:

对于纬度:一秒==30.8米,一分==1.85公里.一度==110公里

对于精度,精度的差值随着纬度的增加而减少在赤道附近两者是相同的,在其他地方是30.8X纬度的余弦

4)GPS 坐标与实际距离的转换

我想知道google地图中 GPS坐标的与实际距离的转换

例如 点p1(28.18745,121.98767)到p2(28.129762,121.91891)直线段的距离在实际中沿球面是多少距离

d=sqrt((x1-x2)(x1-x2)+(y1-y2)(y1-y2))

5)坐标偏移

如果您的坐标在转换之后,还有偏移,那么考虑以下几个方面。

A、原始坐标系弄错,比如以为自己是GPS坐标,但其实已经是GCJ-02坐标。

解决方案:请确保采集到的数据是哪个坐标体系,需要转换到哪个坐标系,再进行坐标转换。

B、原始坐标准确度不够

解决方案:如果您是GPS坐标,请确保采集GPS数据时,搜到至少4颗以上的卫星。并且GPS数据准不准,还取决于周围建筑物的高度,越高越不准,因为有遮挡。

如果本来就是GCJ-02坐标,在不同地图放大级别的时候,看到的地方可能不一样。比如你在地图级别4(国家)取到的坐标,放大到地图12级(街道)时,坐标就偏了。请确保在地图最大放大级别时,拾取坐标。

C、度分秒的概念混淆

比如,在googleearth上采集到的是39°31’20.51,那么应该这样换算,31分就是31/60度,20.51秒就是20.51/3600度,结果就是39 + 31/60 + 20.51/3600 度。

D、经纬度顺序写反了

有些公司(比如高德,百度,腾讯)是先经度,再纬度,即Point(lng, lat)。但谷歌坐标的顺序恰好相反,是(lat, lng)。

三、常见的一些问题

1)说“经纬度投影”对吗?

经纬度表示的是地理坐标系(单位是度),不是投影坐标系(单位是米),两者放一起明显不妥。

2)大地坐标系与地理坐标系有何不同?

大地坐标系和地理坐标系都是经纬度表示的坐标系,本身并不包含投影信息,很多时候,这两种说法都是相同的。

3)为什么有地理坐标系和投影坐标系之分?

由于经纬度的度数不对应某一标准长度,因此无法精确测量距离或面积,也难以在平面地图或计算机屏幕上显示数据。在使用许多(不是全部)GIS 分析和制图应用程序时,经常需要由投影坐标系提供的更稳定的平面坐标框架。与地理坐标系不同,在二维空间范围内,投影坐标系的长度、角度和面积恒定。投影坐标系始终基于地理坐标系,而后者则是基于球体或旋转椭球体的。在投影坐标系中,通过格网上的 x,y 坐标来标识位置,其原点位于格网中心。

4)通常所说的西安80,北京54是指什么?

GIS中的坐标系统定义由基准面和地图投影两组参数确定,基准面对应一个参考椭球体,我们常说的北京54、西安80、国家大地2000坐标系都是指其参考椭球体。基于这种椭球体,我们能定义出大地坐标系和投影坐标系。只说一个西安80是不能确定坐标系统的,因为没有说明有没有投影及投影信息。如果不指明投影方式,则认为西安80、北京54的表现形式为大地坐标,而不是投影平面直角坐标。

5)什么都是高斯投影 ?

高斯-克吕格投影属于横轴墨卡托投影,能小范围内保持形状不变,因此被国内普遍采用,但在表示小比例尺数据时,这种投影明显不合适。就中国来说,一般50万以上比例尺采用高斯投影,50万以下采用兰伯特投影。数据用途不同,具体的投影方式各有不同,有的是为了保持面积不变,有的是为了保持形状不变。另一种世界常用的投影是UTM(通用墨卡托投影),高斯-克吕格投影是“等角横切椭圆柱投影”,投影后经线保持长度不变,即比例系数为1;UTM投影是“等角横轴割圆柱投影”,圆柱割地球于南纬80度、北纬84度两条等高圈,投影后两条割线上没有变形,经线上长度比 0.9996。

6)北京54,西安80,WGS84,国家2000 有何不同?

54和80本质上是参心坐标系,大地原点分别在苏联和西安,原点是参考椭球的几何中心,这类坐标难以表达高度信息,精度信息等也不够,正被淘汰。84和2000本质上是地心坐标系,即以地球质量中心作为坐标系原点。54的椭球体长半轴半径是6378245米,80为6378140米,84和2000坐标系一样,都是6378137米。国家最新的2000坐标系和WGS84据说在厘米级都是一样的,但和80坐标在高纬度地区误差达十几倍。

7) Google、Microsoft、ArcGIS提供的地图服务分别采用了什么坐标系?

现在都统一为了WebMercator,即正轴墨卡托投影,和UTM(常规墨卡托)投影的主要区别是为了实现上的方便,把地球模拟为球体而非椭球体,精度理论上差别0.33%,比例尺大时基本可以忽略。同时纬度范围变成了(-85,85),南北极显示不了,但不影响正常使用,这样也减少了切图数量。

8)ArcGIS的空间参考与坐标系统?

ArcGIS的空间参考信息SpatialReference,不仅包含了坐标系统的定义,还包括容差Tolerance和分辨率Resolution等,通常由Prj文件表示。ArcGIS中的坐标系统分地理坐标系和投影坐标系,其中投影坐标系也一定包含一个地理坐标系,反之不然。

来源: 测绘人必须要掌握的GPS坐标偏移与转换知识

来源: W020191209367443005816.pdf (beidou.gov.cn)