把地图坐标系和相关投影的知识整理一下。

一、简介

先分类:

WGS84\GCJ02\CGCS2000\BD09是地心坐标系,坐标表现形式为经度、纬度。

Pseudo-Mercator\UTM\BD09MC是投影坐标系,坐标表现形式为x、y。

WGS84\CGCS2000是原始坐标系,GCJ02\BD09是加密坐标系。

目前,谷歌、OSM等地图使用的是WGS84坐标系和Pseudo-Mercator投影坐标系;高德、腾讯等地图使用的是GCJ02坐标系和Pseudo-Mercator投影坐标系;天地图使用的CGCS2000坐标系和Pseudo-Mercator投影坐标系;百度地图使用的是BD09坐标系和BD09MC投影坐标系;UTM投影坐标系经常应用在无人驾驶及高精地图上面;国内Android系统手机采集的AGPS数据是GCJ02坐标系的;RTK和一些PDA设备采集的GPS数据是WGS84坐标系的;IOS系统手机采集的AGPS数据是WGS84坐标系的;GPS定位芯片获取的定位数据是WGS84坐标系的;北斗芯片获取的定位数据是CGCS2000坐标系的。

二、分项介绍

1.WGS84坐标系

全称,World Geodetic System-1984,既1984年的全球坐标系统。

美国GPS系统使用的是WGS84坐标系,受益于GPS系统的发展,现在全球用的最多的坐标系就是WGS84坐标系,它的EPSG编码是4326。(EPSG是大地基准面、空间参考系统、地球椭球体、坐标转换和相关度量单位的公共注册中心,它为每个坐标系都分配有一个编码)。

WGS84坐标系的坐标原点为地球质心,地心空间直角坐标系的Z轴指向BIH (国际时间服务机构)1984.0定义的协议地球极(CTP)方向,X轴指向BIH 1984.0的零子午面和CTP赤道的交点,Y轴与Z轴、X轴垂直构成右手坐标系。

它的地球椭球基本参数如下:

赤道半径:a=6378137±2(m)

扁率:f=0.003352810664=1/298.257223565

(假设,赤道半径(长半轴)为a,极半径(短半轴)为b,扁率f=(a-b)/a。)

还有几个参数为:地球引力和地球质量的乘积、正常化二阶带谐系数、地球重力场二阶带球谐系数、地球自转角速度,这几个跟大地测量和地球物理相关,很深奥,我们只要了解赤道半径和扁率就行了。

WGS84坐标系的OGC WKT描述为:

GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]

参见:https://epsg.io/4326,这个网站上可以查阅常用坐标系的各种表现形式,对常用文件格式、软件、数据库、框架都做了兼容。

小结:

WGS84坐标系的EPSG编码为4326,赤道半径为6378137,扁率为1/298.257223565,是目前应用最为广泛的坐标系统,只要跟GPS定位相关,使用的都是WGS84坐标系,谷歌、OSM也用的WGS84坐标系,很多软件(QGIS、ARCGIS)、前端脚本库(leaflet、mapbox、openlayer),在没有特别声明的时候,默认数据使用是WGS84坐标。

2.CGCS2000坐标系

China Geodetic Coordinate System 2000,2000国家大地坐标系,是我国当前最新的国家大地坐标系,它的EPSG编码为,4490。

2000国家大地坐标系的原点为包括海洋和大气的整个地球的质量中心;2000国家大地坐标系的Z轴由原点指向历元2000.0的地球参考极的方向,该历元的指向由国际时间局给定的历元为1984.0的初始指向推算,定向的时间演化保证相对于地壳不产生残余的全球旋转,X轴由原点指向格林尼治参考子午线与地球赤道面(历元2000.0)的交点,Y轴与Z轴、X轴构成右手正交坐标系。采用广义相对论意义下的尺度。

相较于WGS84,CGCS2000坐标系的区别主要在于,它采用的是2000年的地球物理和大地测量的结果平差计算而设定的,坐标系Z轴指向历元2000的地球参考极方向,这些差异对高精数据有影响,但对于精度在10m以上的数据来说,这些差异可以忽略不计。

既非高精度的大多数情况下,我们可以认为WGS84坐标系=CGCS2000坐标系。

很多软件和框架都还没有兼容CGCS2000坐标系,我们在使用CGCS2000坐标系的数据的时候,可以设置为WGS84坐标系,这样也便于传输和查阅。

它的椭球基本参数:

赤道半径: a=6378137m

扁率:f=1/298.257222101

CGCS2000坐标系的OGC WKT描述为:

GEOGCS["China Geodetic Coordinate System 2000",DATUM["China_2000",SPHEROID["CGCS2000",6378137,298.257222101,AUTHORITY["EPSG","1024"]],AUTHORITY["EPSG","1043"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4490"]]

参见:

https://epsg.io/4490

小结:

大多数情况下,我们可以认为CGCS2000坐标系=WGS84坐标系,很多软件和框架都还没有兼容CGCS2000坐标系,我们在使用CGCS2000坐标系的数据的时候,可以设置为WGS84坐标系,这样也便于传输和查阅。

3.GCJ02坐标系

为了数据安全和保密,通过地形图非线性保密处理算法(俗称火星加密)加密过的WGS84坐标系,俗称国测局坐标系,或火星坐标系。

GCJ02坐标系与WGS84坐标系之间的偏差大概在50-700m左右。

目前国内大部分地图底图和矢量数据(除了LBS服务的坐标数据,还包括Android手机的定位数据)都使用GCJ02坐标系,为了使GCJ02坐标系的底图与数据和WGS84坐标系的底图与数据适配,通常会使用坐标系纠偏算法,将坐标系统一。

各种形式的纠偏算法,JavaScript、java、python等,都可以在网上搜索到,数据处理和webgis开发,坐标系纠偏与数据融合统一是很重要的环节。

通过对原始数据和加偏后的数据进行分析,猜测加偏的算法大概是,使用克拉索夫斯基椭球的参数,将原始坐标对应经线和纬线上的偏差转为弧度后,与原始坐标相加,形成加偏坐标。

这个算法非常优秀,它既能保证GCJ02坐标系,相对于WGS84坐标系的线性单调性;又能保证GCJ02坐标系在伪距墨卡托投影下,相对于WGS84坐标系在伪距墨卡托投影下的线性单调性;既能保证数据在加偏后,仍能维持实际的空间相对位置,又能保证数据可以无损的纠偏回去。

(因为我自己曾经写过一个数据加密算法,既不能保证空间单调性,又不能保证投影单调性,还不能无损还原,自此之后,我对火星加密算法就非常佩服了。)

小结:

GCJ02坐标系是一种加密坐标系,目前国内大部分地图底图(高德、腾讯)和矢量数据(图商的LBS服务和Android手机的定位数据)都使用的是GCJ02坐标系,GCJ02的加密算法非常精妙,地图底图和矢量数据在使用之前,需要将坐标系进行统一。

4. BD09坐标系

BD09坐标系是百度地图使用的地心坐标系,2009年,百度地图在GCJ02的基础上,做了二次加密,形成了BD09坐标系。

(坐标系的命名规则是首写字母+年份,BD09是2009年提出的,GCJ02是2002年提出的,CGCS2000是2000年提出的,WGS84是1984年提出的。)

BD09坐标系大概是先将GCJ02坐标转为极坐标后,添加一个常量做偏移值,再将偏移后的极坐标转回到直角坐标。

这种加偏算法,仅能保证相对于GCJ02坐标系的线性单调性,无法保证投影后的线性单调性,所以百度地图的墨卡托投影需要分区域进行。

百度地图提供WGS84、GCJ02坐标系向BD09坐标系的转换API:https://lbsyun.baidu.com/index.php?title=webapi/guide/changeposition;在前端,百度地图也支持声明数据坐标系,以自动适配百度地图底图:https://lbsyun.baidu.com/index.php?title=jspopularGL/guide/coorinfo。

除了百度自己的API外,网上也能搜索到BD09、GCJ02、WGS84坐标系之间的转换方法:https://blog.csdn.net/sinat_41310868/article/details/113791826

因为在GCJ02坐标系的基础上,又做了一次加密,所以百度地图与其他地图的数据兼容性变得很不好。但作为国内硕果仅存的还在做街景的商业地图平台,加之其与echart开源JavaScript库的良好结合,我们很多时候,还需要使用百度地图,这时候,虽然麻烦,但还是需要对它的底图和数据进行坐标系统一。

小结:

BD09坐标系是在GCJ02坐标系基础上二次加密而成,仅有百度地图在用,但百度地图有街景、有三维、有echart,很多情况下,我们需要使用百度地图的底图和数据,这时候,就需要对坐标系进行统一了,百度地图webAPI和js API都支持坐标系的转换。

5.墨卡托投影法

在说其他投影坐标系之前,我们先来了解一下墨卡托投影法,因为它是所有网络地图投影的基础。

墨卡托投影法,又称麦卡托投影法、正轴等角圆柱投影,是一种等角的圆柱形地图投影法。

本投影法得名于法兰德斯出身的地理学家杰拉杜斯·墨卡托,他于1569年发表长202公分、宽124公分以此方式绘制的世界地图。在以此投影法绘制的地图上,经纬线于任何位置皆垂直相交,使世界地图可以绘制在一个长方形上。由于可显示任两点间的正确方位,航海用途的海图、航路图大都以此方式绘制。在该投影中线型比例尺在图中任意一点周围都保持不变,从而可以保持大陆轮廓投影后的角度和形状不变(即等角);但墨卡托投影会使面积产生变形,极点的比例甚至达到了无穷大。

墨卡托投影法公式:

其中x和y是平面笛卡尔坐标,λ是经度,φ是纬度,λ0是地图的中央经线。

逆推公式为:

在制作小比例尺地图的时候,近似认为地球是正球体,将上述中的x和y乘以地球半径,即可形成对应地点的墨卡托投影相对坐标,在制作大比例尺地图的时候,要考虑到地球扁率。

小结:

墨卡托投影法是一种等角圆柱形地图投影,它的投影公式计算简单,可以将地球投影到一张长方形图上,它是Web-Mercator投影的基础。

6. Pseudo-Mercator投影

Pseudo-Mercator又称Web-Mercator,是墨卡托投影的一种变体,是WGS84坐标系的伪距墨卡托投影,是网络地图应用的标准投影。自从2005年,谷歌地图使用Web-Mercator投影发布自己的瓦片地图起,后续的图商OSM、高德、腾讯、百度都沿袭了这种投影方法发布自己的地图。它的EPSG编码为3857。

墨卡托投影在大比例下会考虑地球扁率,但Web-Mercator在所有比例尺下都使用球面公式,会导致局部地区的地图偏离同一比例尺下的椭球面墨卡托地图。离赤道越远,偏差就越明显,在地面上可以达到40 km。

因为很多人不知道Web-Mercator和墨卡托投影有这样的差别,导致两者经常被乱用,为了避免投影乱用,致使数据混淆,很多官方机构规定正规途径禁用Web-Mercator投影。

通常情况,Web-Mercator投影仅在网络地图上使用。

Web-Mercator投影公式与标准球面墨卡托的公式基本相同,但将世界坐标调整为左上角为(0, 0),右下角为(256, 256)的正方形,假设地图投影在一个256像素*256像素的图幅上:

其中x和y是像素坐标,λ是经度,φ是纬度,pixel是像素,zoom level是地图瓦片比例尺层级。

Web-Mercator投影的数据覆盖范围在经度[-180°,180°],纬度[-85.051129°, 85.051129°]之间,这有两个好处,其一是避免将极点投影到无穷远处,其二是能将整个投影地图变成正方形;虽然它会把部分南北极地区截掉,但毕竟,除了极为特殊的情况外,企鹅和北极熊不看网络地图。

Web-Mercator投影的缺点是变形失真比较严重,不适用于大比例尺、高精度数据的显示;但优点也很明显,投影公式计算简单,投影结果是正方形,切图方便,坐标结果是各层级的像素坐标。

Web-Mercator投影坐标系的OGC WKT描述为:

PROJCS["WGS 84 / Pseudo-Mercator",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["X",EAST],AXIS["Y",NORTH],EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext  +no_defs"],AUTHORITY["EPSG","3857"]

参见:

https://epsg.io/3857

小结:

Web-Mercator投影坐标系是网络地图的投影坐标系,几乎所有的网络地图都使用这种投影,它的投影结果是正方形的,计算简单,切图方便。

7. BD09MC投影

BD09MC是BD09坐标系的Web-Mercator投影坐标系。

前文已经说过,GCJ02坐标系是WGS84坐标系的加密结果,GCJ02坐标系相对于WGS84坐标保证了投影后的线性单调性,所以GCJ02坐标系可以直接使用Web-Mercator投影,但作为GCJ02坐标系的二次加密结果BD09坐标系没有做到投影后的线性单调性,为了保障投影后的线性单调性,百度地图基于Web-Mercator投影进行了修改,加入了常量矩阵,分区域对投影结果进行纠正。

因为BD09坐标系采用极坐标加常量的方法进行偏移,所以BD09MC投影不是基于正球体的,而是椭球,其椭球赤道半径a=6378206m,极半径b=6356584.314245179m,数据覆盖范围与Web-Mercator投影一致。

BD09MC投影坐标系与Web-Mercator投影坐标系之间的转换可参见:https://blog.csdn.net/sinat_41310868/article/details/113791826。

地图底图瓦片栅格的转换,考虑到精度要求不需要太高,通常情况下,仅需进行瓦片中心点坐标的平移即可。

小结:

因为BD09坐标系是极坐标加常量加密,无法保证投影后的线性单调性,所以BD09MC投影坐标系需要在BD09坐标系进行Web-Mercator投影后,进行坐标纠正。因为精度不需要太高,地图瓦片的坐标纠正,仅需进行瓦片中心点坐标的平移即可。

8. UTM投影

Universal Transverse Mercator,通用横轴墨卡托投影,是一种国际标准化的地图投影法。使用笛卡尔坐标系,标记南纬80°至北纬84°之间的所有位置,它的坐标基础是WGS84坐标系,因为UTM是一种分度带投影,所以不同经度区间的UTM投影坐标系的EPSG编码不同。

UTM采用网格编码,每个网格的编码经度在前,纬度在后。

经度区间,每6°被编排为一经度区间。每一个经度区间均以一个数字表示,由西向东数以01至60编排。

纬度区间,从南纬80°开始,每8°被编排为一个纬度区间,而最北的纬度区间(北纬74°以北)则被延伸至北纬84°,以覆盖世界上大部分陆地。每一个纬度区间均以一个英文字母表示,由南向北数以C至X编排。

具体情况如下图︰

在网格编码的基础上,某一点的UTM坐标表示为该点所在的网格编码,加上该点由网格西南角起向北和向东的距离(细分网格数)。

坐标可由不同位数的数字组成,根据精确度而定。

如下图,假设在一个大网格(例如17T)中,网格被不断以10*10的尺度被细分(第一次细分为100*100)。

A点的UTM细分坐标为17T 11 83,B点的UTM细分坐标为17T 106 827,C点的细分坐标为17T 1085 8255。

通常,一些自动驾驶项目采集的高精地图数据(点云、街景)是UTM投影坐标系的。某些网站上的卫星影像和自然资源数据,也使用UTM投影编码进行索引。

小结:

UTM是通用横轴墨卡托投影,以细分网格的方式表示地球上的区间,一些高精地图数据使用的是UTM投影坐标系,某些网站上的卫星影像和自然资源数据,也是用UTM投影编码进行索引。

三、总结

地球是复杂的,表示地球的手段也是多样的,全球在用的坐标系与投影成千上万,以上仅仅是一些应用比较广的地图坐标系和投影,但这些坐标系和投影,已经涵盖了绝大多数地图的网络数据与应用。

常用坐标系及投影:WGS84\GCJ02\CGCS2000\BD09\Pseudo-Mercator\UTM\BD09MC相关推荐

  1. 【GIS坐标系介绍】WGS84坐标系、Web墨卡托、GCJ02坐标系、BD09坐标系

    目录 地球坐标系与投影坐标系的区别 WGS84坐标系.Web墨卡托.GCJ02坐标系.BD09坐标系区别以及使用的地图 1.WGS84 无偏移 2.CGCS2000 无偏移 3.GCJ02坐标 偏移 ...

  2. [转]地理投影,常用坐标系详解、WGS84、WGS84 Web墨卡托、WGS84 UTM、北京54坐标系、西安80坐标系、CGCS2000坐标系...

    转自:http://www.rivermap.cn/docs/show-1829.html 常用坐标系详解 (一)WGS84坐标系 WGS-84坐标系(World Geodetic System一19 ...

  3. Python3 Wgs84\gcj02\bd09\mercator\bd09mc坐标系转换与投影

    最基础的一组经纬度坐标转换,在网上找到过JavaScript和java版本的,但是没有找到python版本的,把JavaScript版本的改成了python版本的,能凑合用. "" ...

  4. 关于坐标系、投影与瓦片切片(Web墨卡托,WGS84,CGCS2000,TMS,谷歌XYZ)

    地理学的人掌握坐标系和投影知识就应该像计算机的人掌握计算机原理和操作系统原理一样,但近几年工作发现很少有人能说清楚这些皮毛. 此文将包含:地理坐标系.投影方法.切片规则等内容,内容可能来自网络.书籍和 ...

  5. 【Java代码】坐标系说明+WGS84\GCJ02\BD09坐标系转换工具+Java坐标系转换及验证源代码分享(粘贴可用)

    1. 坐标系说明 开发地图应用服务时,一定会接触到各种坐标系,而保证坐标系的正确与合理是一切数据分析的前提,总的来说,坐标系可以分为两大类:地理坐标系GCS(Geographic Coordinate ...

  6. WGS84、GCJ02、BD09坐标系互转

    各坐标系简介与转换,包括WGS84(地球坐标系).GCJ02(火星坐标系)和BD09(百度坐标系) 一.各坐标系简介与转换 背景:从GPS和北斗卫星定位得到的定位数据采用的都是WGS84坐标系,即地球 ...

  7. wgs-84,gcj-02,bd-09的相互转换,高德,世界测量,百度坐标系的相互转换,坐标系转换

    高德使用的是gcj-02坐标系,百度使用的是bd09坐标系,注意其间的相互转换 1.首先创建一个GPS对象类 public class Gps {private double wgLat;privat ...

  8. PostgreSQL和PostGISWGS84和CGCS2000与GCJ02和BD09坐标系与之间互转

    – 如果转换后结果为null,查看geom的srid是否为4326或者4490 WGS84转GCJ02 select geoc_wgs84togcj02(geom) from test_table G ...

  9. Java实现坐标系转换(WGS84、GCJ02、BD09)

    进行坐标系转换,主要是WGS84(大地坐标系,如谷歌地图).GCJ02(国测局坐标系,如高德地图).BD09(百度坐标系)三种主流坐标系之间的转换. 当然,如高德地图.百度地图都提供了在线的坐标转换服 ...

最新文章

  1. 7、Zabbix微信告警
  2. Open-E DSS V7 应用系列之六 构建软件iSCSI
  3. Shell教程(六):函数、联机帮助
  4. Linux运维常用命令总结
  5. linux 子目录 挂载,linux – NFS4 – 挂载多个子目录
  6. Java 的布局管理器GridBagLayout的使用方法【图文说明】
  7. qtdesigner页面布局
  8. android camera拍照录像切换功能
  9. UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte xx in position xx: invalid continuation byte
  10. 一个年轻程序员的成长,提升时间利用效率,第十四周总结
  11. QT 代码行统计工具
  12. Android 仿小米的全面屏手势-侧滑返回
  13. 阿里巴巴2016校园招聘 研发工程师(二)详解
  14. c语言中汉字编码,【C语言学习】C语言汉字编码。。。C语言中汉字的输入
  15. php可以用scanf,PHP可以使用“scanf”来打印输出结果( )。
  16. Redis安装(Windows 最新版本redis 5.0.9,以及redis 4.0)
  17. JS 苹果手机日期显示NaN问题
  18. Troubleshooting Office Web Apps with SharePoint 2013
  19. python爬取某壁纸网站壁纸
  20. Only老K说-爬取妹子图片(简单入门)

热门文章

  1. remote: Incorrect username or password ( access token ) fatal: Authentication failed for
  2. vim实用指南(一):光标移动(2)——行内、行间移动
  3. 计算机基础知识的判断题,计算机基础知识判断题(12)
  4. 揭开爆火小咖秀背后的神秘力量
  5. 吴恩达机器学习[18]-大规模机器学习
  6. 在网页中打开pdf文件
  7. [SDOI2010]魔法猪学院(k短路)
  8. matlab中logistic多元回归,matlab实现logistic回归
  9. 【Python爬虫案例】全套爬虫案例+数据可视化项目汇总零基础入门全套爬虫案例-案例三
  10. Linux服务器安装Windows虚拟机