GIS坐标系介绍和常用地图引擎介绍

参考:常用坐标系及投影:WGS84\GCJ02\CGCS2000\BD09\Pseudo-Mercator\UTM\BD09MC

【GIS - 地理信息系统】WGS 84 坐标系和 GCJ-02 坐标加密偏移 ( 大地坐标系 和 加密坐标系 | WGS 84 坐标体系简介 | GCJ-02 坐标加密偏移 )

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

开发地图需要了解的基本知识:前端开发大屏地图?必知必会的基本知识

1 简介

分类:

  • 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坐标系的。

2 坐标系分类介绍

2.1 WGS84坐标系(EPSG:4326):无偏移

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轴垂直构成右手坐标系。

小结:

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

WGS84 采用 经度 ( Longitude ) 和 纬度 ( Latitude ) 的形式表示地球表面上的位置 :

  • 经度表示东西方向上的位置 , 取值范围是 -180 度到 +180 度 ;
  • 纬度表示南北方向上的位置 , 取值范围是 -90 度 到 +90度 ;

2.2 CGCS2000坐标系(EPSG:4490):无偏移,地图:天地图

地图: 天地图

天地图使用的是:CGCS2000坐标系和Pseudo-Mercator投影坐标系(球面墨卡托投影)。

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坐标系,这样也便于传输和查阅。

小结:

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

2.3 GCJ02坐标系:偏移,地图:谷歌中国、高德、腾讯

GCJ02坐标系是为了数据安全和保密,通过地形图非线性保密处理算法(俗称火星加密)加密过的WGS84坐标系,是“中国国家测绘局加密坐标”, 俗称 国测局坐标系,又称为 火星坐标系。由中国国家测绘局制定的地理坐标系统 , 在中国境内进行定位和地图制作 , 必须使用该坐标。

在这里插入图片描述

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

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

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

小结:

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

注意:

  • 在使用高德地图API和百度地图API的时候,如果要加载地图服务如WMS,WMTS等,这些地图服务常用的投影坐标系是EPSG:3857。加载上去会发现存在偏移,因为投影坐标系不一致。
  • 高德的坐标系是GCJ-02,而百度的坐标系是在GCJ-02再次偏移的BD-09,这些坐标系是没有收录在EPSG中的,所以无法用Proj.4库来做坐标转换。

示例:

在中国境内 , 手机获取的 GPS 坐标 , 是 WGS 84 坐标 , 这是准确的坐标 , 但是如果想要显示在地图上的正确位置 , 需要加入非线性随机偏差 , 效果如下 :

在这里插入图片描述
上述偏移后的坐标,距离原坐标点有几百米误差。

由于偏移是非线性随机的,因此想要根据火星坐标倒推出真实坐标是无法实现的。
在这里插入图片描述
手机上获取的 WGS 84 坐标是准确的坐标,但是将该坐标放到地图上,就有很大的偏移。

手机的坐标是准确坐标,地图上的坐标是经过偏移后的坐标,要想将手机的坐标准确的显示到地图上,需要将手机的 WGS 84 准确坐标转为 GCJ-02 国测局加密坐标,才能准确的显示到地图上。

2.4 BD09坐标系:偏移,地图:百度地图

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

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

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

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

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

小结:

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

2.5 墨卡托投影法

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

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

小结:

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

2.6 Pseudo-Mercator投影(又称:Web-Mercator)(EPSG:3857):地图-天地图

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

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

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

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

小结:

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

2.7 BD09MC投影(BD09坐标系的Web-Mercator投影坐标系)

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

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

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

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

小结:

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

2.8 UTM投影

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

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

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

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

具体情况如下图︰
在这里插入图片描述
在网格编码的基础上,某一点的UTM坐标表示为该点所在的网格编码,加上该点由网格西南角起向北和向东的距离(细分网格数)。

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

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

小结:

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

3 表格分类展示

在这里插入图片描述

坐标系坐标格式说明
WGS84 (EPSG:4326)[lng,lat]WGS-84坐标系,GPS设备获取的经纬度坐标,它是一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。
CGCS2000 (EPSG:4490)[lng,lat]CGCS2000坐标系即 2000国家大地坐标系,是我国当前最新的国家大地坐标系,在非高精度(精度在10m以上)的大多数情况下,我们可以认为WGS84坐标系=CGCS2000坐标系。使用该坐标系的常见地图有:天地图(经纬度投影)
GCJ02[lng,lat]GCJ-02坐标系,又称火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。google中国地图、soso地图、aliyun地图、mapabc地图和高德地图所用的经纬度坐标。高德地图、腾讯地图 以及 谷歌中国区地图 使用的是GCJ-02坐标系。
BD09[lng,lat]BD-09坐标系,百度地图 采用的经纬度坐标,在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标。
BD09LL[lng,lat]同BD09
BD09MC[x,y]BD-09米制坐标,百度地图采用的米制坐标,单位:米
BD09Meter[x,y]同BD09MC
WebMercator (EPSG:3857)[x,y]Web Mercator投影,球面墨卡托投影,同EPSG3857,单位:米
EPSG900913[x,y]Web Mercator投影,同WebMercator,单位:米。使用该坐标系的地图有:天地图(球面墨卡托投影)

4 开发过程中需要注意的事项以及地理坐标系转换工具

4.1 开发过程中需要注意的事项

在这里插入图片描述

4.2 地理坐标系转换工具

(1)Gcoord

GitHub 地址: https://github.com/hujiulong/gcoord

描述: gcoord(geographic coordinates)是一个处理地理坐标系的JS库,用来修正百度地图、高德地图及其它互联网地图坐标系不统一的问题。

(2)coordtransform 坐标转换

GitHub 地址:https://github.com/wandergis/coordtransform

描述: 一个提供了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换的工具模块。

5 常用地图引擎介绍

二维地图前端js api对比分析

WebGIS开发四大开源框架对比

WebGIS引擎现状与未来

Web上的Map API主要分类有如下5大类:

  • Charts:以 D3.js,Echarts 等为代表。
  • LBS:以高德、谷歌、百度地图等为代表。
  • WebGIS商业API:ESRI的ArcGIS API For JS,超图的IClient。
  • WebGIS开源API:Leaflet、OpenLayers、Cesium、MapboxGL等。

Charts类型在各种业务页面或后台管理页面很常见,适用业务场景是地图非页面表达的主体,且几乎没有交互,页面中同时还有其他各类主题。

LBS(基于位置的服务)广泛应用于互联网类ToC应用,在这个时代人们的衣食住行与这些地图网站、地图APP及其背后的地理信息服务日益紧密。LBS必须要在连接互联网场景中使用,只能使用地图服务商提供的数据和服务,最多支持自定义用户标记若干兴趣点的简单操作,2G、2B场景如内网离线,复杂企业级地理数据展示分析等几乎无能为力。

WebGIS通常面向复杂业务场景,通常是内网离线的2G,2B定制化应用。与Charts不同,此类应用以地图为表达中心,所有的UI都是与地图交互和联动为目的;与LBS 2C的单一需求不同,此类应用需要自建空间数据库与空间数据服务以支撑前端空间数据的维护,复杂的业务交互,个性化的主题可视化等目的。

5.1 Leaflet

官方文档: https://leafletjs.com/

中文文档:https://leafletjs.cn/

介绍:

  • Leaflet 是一个开源并且对移动端友好的交互式地图 JavaScript 库。 它的大小仅仅只有 42 KB of JS,并且拥有绝大部分开发者所需要的所有地图特性。
  • Leaflet 简单、高效并且易用。它可以高效的运行在桌面和移动平台,拥有着大量的扩展插件、优秀的文档、简单易用的 API和完善的案例,以及可读性较好的源码。

下载与使用: https://leafletjs.cn/download.html

在这里插入图片描述
在这里插入图片描述
参考: 彻底理解 leaflet 之 L.CRS + 搞定 leaflet 多坐标系拓展

Leaflet 地图默认坐标系:

Leaflet 地图默认使用的坐标系是EPSG:3857坐标系,也就是Web墨卡托投影坐标系。在创建地图对象时,可以通过设置 crs 选项来指定所需的坐标系,如下所示:

var map = L.map('map', {
	crs: L.CRS.EPSG3857,
	center: [51.505, -0.09],
    zoom: 13
})

在这里插入图片描述
Leaflet 地图支持的坐标系有:

在这里插入图片描述
Leaflet 通过使用不同的插件和扩展,还可以支持其他坐标系和投影方式。这些坐标系的选择取决于你的项目需求和所使用的地图数据。

Leaflet 坐标系转换:

Leaflet 是一个开源的 JavaScript 库,用于创建交互式的、可定制的地图应用程序。转换坐标系是在地图应用程序中常见的需求之一。

坐标系是描述地球表面上点位置的一种系统。常见的坐标系有经纬度坐标系(如WGS84和GCJ-02),以及投影坐标系(如Mercator投影和Web墨卡托投影)等。

在这里插入图片描述

5.2 天地图

官方文档: https://www.tianditu.gov.cn/

介绍: 天地图JavaScript API 4.0是一套符合HTML5.0规范的的应用程序接口,以HTML 5.0的形式提供各种地图服务和数据,如地图展示、标注、定位等。为开发者提供了快速调用天地图在线地理信息服务的通道,包括快速创建地图、调用地图、地名搜索以及在地图上添加覆盖物等。可帮助开发者在网站中构建功能丰富、交互性强的地图应用,支持PC端和移动端基于浏览器的地图应用开发,支持主流的HTML4.0和HTML5.0特性的地图开发。

天地图JavaScript API 4.0支持HTTP和HTTPS,免费对外开放,可直接使用。使用API之前,需要申请应用Key。

下载与使用:

http://lbs.tianditu.gov.cn/

在这里插入图片描述
入门指导: http://lbs.tianditu.gov.cn/api/js4.0/guide.html

在这里插入图片描述
在这里插入图片描述
天地图支持的坐标系:

在这里插入图片描述

5.3 高德地图

官方文档: https://lbs.amap.com/api/javascript-api-v2/summary

介绍: 地图 JS API 2.0 是高德开放平台免费提供的第四代 Web 地图渲染引擎, 以 WebGL 为主要绘图手段,本着"更轻、更快、更易用"的服务原则,广泛采用了各种前沿技术,交互体验、视觉体验大幅提升,同时提供了众多新增能力和特性。

地图 JS API 2.0 与 1.x 版本的 JS API 接口基本保持一致,同时提供了适配器方便开发者以零成本将地图应用从老版本 JS API 升级至 2.0 版本。延续了 PC 端、移动端自动适配的特性,兼容 IE10 及以上的所有浏览器环境。

下载与使用:

成为开发者并创建 key

快速上手

高德地图支持的坐标系: GCJ-02坐标系。

5.4 百度地图

官方文档: https://lbsyun.baidu.com/index.php?title=jspopularGL

介绍: 百度地图JavaScript API GL 是一套由JavaScript语言编写的应用程序接口,使用了WebGL对地图、覆盖物等进行渲染,支持3D视角展示地图。帮助开发者在网站中构建功能丰富、交互性强的地图应用,支持PC端和移动端基于浏览器的地图应用开发。JavaScript API GL提供了丰富的功能接口,包括地图展示、定位、覆盖物、检索、路线规划等,适配多样化的业务场景。

百度地图JavaScript API支持HTTP和HTTPS,免费对外开放。在使用前,您需先申请密钥(ak)才可使用。在您使用百度地图JavaScript API之前,请先阅读百度地图开放平台《服务条款》。任何非营利性应用请直接使用,商业应用请参考使用须知。

百度地图支持的坐标系: BD-09坐标系。

5.5 腾讯地图

官方文档: https://lbs.qq.com/webApi/javascriptGL/glGuide/glOverview

介绍:

  • Javascript API GL是基于WebGL技术打造的3D版地图API,3D化的视野更为自由,交互更加流畅。
  • 提供丰富的功能接口,包括点、线、面绘制,自定义图层、个性化样式及绘图、测距工具等,使开发者更加容易的实现产品构思。
  • 充分发挥GPU的并行计算能力,同时结合WebWorker多线程技术,大幅度提升了大数据量的渲染性能。最高支持百万级点、线、面绘制,同时可以保持高帧率运行。
  • 同步推出基于Javascript API GL的 数据可视化 JS API,实现轨迹数据、坐标点数据、热力、迁徙、航线等空间数据的可视化展现,帮助用户洞察数据背后的规律,提供辅助决策的依据。

注意点:

也需要注册成为腾讯位置服务开发者,并创建应用和key。

在这里插入图片描述
腾讯地图支持的坐标系: GCJ-02坐标系。

5.6 OpenLayers

官网地址: https://openlayers.org/

介绍: OpenLayers可以轻松地在任何网页中放置动态地图。它可以显示从任何来源加载的地图图块、矢量数据和标记。OpenLayers的开发是为了进一步使用各种地理信息。它是完全免费的开源JavaScript,在2条款BSD许可证(也称为FreeBSD)下发布。

5.7 mapbox

官网地址: https://www.mapbox.com/

5.8 cesium

官网地址: https://www.cesium.com/

中文网: http://cesium.xin/

介绍:

  • Cesium 是一个跨平台、跨浏览器的展示三维地球和地图的 javascript 库。
  • Cesium 使用 WebGL 来进行硬件加速图形,使用时不需要任何插件支持,但是浏览器必须支持 WebGL;
  • Cesium 是基于Apache2.0许可的开源程序。它可以免费的用于商业和非商业用途。

cesium能做什么:

  • 支持2D,2.5D,3D形式的地图展示。
  • 可以绘制各种几何图形、高亮区域,支持导入图片,甚至3D模型等多种数据可视化展示。
  • 可用于动态数据可视化并提供良好的触摸支持,支持绝大多数的浏览器和mobile。
  • Cesium 还支持基于时间轴的动态数据展示。

5.8 总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值