缘起
应用 Leaflet
做点缓冲,也就是调用“L.circle()
”绘制圆形,传入半径 100 米,绘制进去的圆却笼罩了寰球,过后就猜测,应该是把半径按 100 度来绘制了,但看了 Leaflet API
介绍,外面形容的半径单位就是用的“米”。
而后想起来这次用的地图底图为天地图,在初始化地图时,通过批改 crs
,将地图坐标系批改为了“EPSG:4490
”(通过 Proj4Leaflet 定义),而Leaflet
默认采纳的是“EPSG:3857
”,看来问题应该是出在了这里。
于是通过三角函数,将 100 米换算成度再次绘制,能够胜利绘制。
const newRadius = Math.asin(radius / 6371000) * 180 / Math.PI // 将米转为度,6371000 为地球赤道半径
而后就引发了思考,“EPSG:4490
”是天文坐标系,也叫球面坐标系,默认应该是个球,而二维地图是个立体,球要在立体展现就须要投影,那么未经投影的“EPSG:4490
”坐标系是如何绘制到立体上的呢?
接下来就钻研下天文坐标系和立体坐标系,以及未经投影的天文坐标系到底是如何显示为立体地图的。
根底概念
首先理解几个根底概念:
天文坐标系:或称球面坐标系,参考立体是椭球面,个别是指由经度、纬度和高度组成的坐标系,可能标示地球上的任何一个地位。常见的天文坐标系有WGS84
(EPSG:4326
)、CGCS2000
(EPSG:4490
)、GCS_Xian_1980
(EPSG:4610
)。
投影 :天文坐标系是三维的,而咱们要在地图或者屏幕上显示就须要转化为二维,这个过程被称为 投影。罕用的投影有墨卡托投影(Mercator
)、高斯 - 克吕格投影、伪墨卡托投影(Web Mercator
)。
投影坐标系 :通过投影后的坐标系就是投影坐标系,坐标单位个别是米、千米等。能够认为投影坐标系就是 天文坐标系 + 投影。常见的投影坐标系有EPSG:3857
(也就是WGS84
+ 伪墨卡托投影)。
经纬度等距离直投
理解下面这几个概念后,回到结尾的问题,天文坐标系“EPSG:4490
”或者“EPSG:4326
”,是如何显示到立体上的呢?
其实在咱们应用二维形式展现地图,而坐标系为天文坐标系时,用到了是一种非凡的投影形式,经纬度等距离直投。
经纬度等距离直投 :英文叫法是Platte Carre projection
,是 等距矩形投影(Equirectangular projection
)基准点纬度取 0°(赤道)时的非凡状况。它的特点是雷同的经纬度距离在屏幕上的间距相等,没有简单的坐标变换。咱们可简略的了解为,在笛卡尔坐标系中,将赤道作为 X 轴,子午线作为 Y 轴,而后把原本应该在南北两极相交的经线一根一根屡直了,成为了相互平行的经线,而每条纬线的长度也在这个过程中都变为与赤道等长。
在经纬度等距离直投中,经度范畴是 -180
到180
,纬度范畴是 -90
到90
,因而他的地图是长方形,且长宽比是2:1
。
在地图 API
中,当定义地图坐标系为天文坐标系时,个别会默认采纳这种投影形式,这也是咱们能看到天文坐标系的立体地图的起因。
然而经纬度等距离直投有个很显著的毛病,就是在低纬度地区长度、角度、面积、形态变动比拟小,越向高纬度,程度间隔变长越大,很小的纬圈都变得和赤道一样长,然而经线长度始终保持不变。这样就导致因素通过投影后会角度会发生变化,比方十分规范的十字路口,两条路“十分垂直”,而通过“经纬度等距离直投”投影后,两条路成了斜交。
正是因为经纬度直投的这些毛病,特地是投影后角度的变动,导致它在一些畛域是无奈利用的,比如说航海中航线的表白(原本的直角转弯,在地图上显示的可能是钝角或锐角)。
当然,要把球面坐标投影到立体展现,不可避免都会产生这样那样的变形,而每种地图投影也都有本人的长处和毛病,这就须要咱们依据不同的利用场景来抉择适合的投影了。
接下来咱们再理解下日常最常见的一种投影,墨卡托投影,而后再将经纬度等距离直投和墨卡托投影做下比照,这样能够更直观的察看出各自的优缺点。
墨卡托投影
墨卡托投影,又名“等角正轴圆柱投影”,荷兰地图学家墨卡托(Mercator)在 1569 年拟定,假如地球被围在一个中空的圆柱里,其赤道与圆柱相接触,而后再假想地球核心有一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体开展,这就是一幅标准纬线为零度(赤道)的“墨卡托投影”绘制出的世界地图。
墨卡托投影最大长处就是在地图上放弃方向和角度的正确,如果循着墨卡托投影地图上两点间的直线航行,方向不变,能够始终达到目的地,因而它对船舰在航行中定位、确定航向都具备有利条件,给航海者带来很大不便。这也是目前的大部分互联网地图抉择墨卡托投影(伪墨卡托投影或者基于墨卡托投影做加密偏移)的起因之一,因为人们心愿在地图上看到的地物与理论地物长得类似,并且导航方向不变。
Web Mercator
投影,也就是“EPSG:3857
”,也被称为“伪墨卡托投影”,这个投影办法是Google Map
最先创造并应用的,它的天文上的不严谨性在于,在投影过程中,将示意地球的椭球面作为正球面解决,传说中是因为谷歌程序员懒得用椭球面来编程计算屏幕坐标 … 想具体理解,能够参考 Web Mercator 公开的小机密
对于墨卡托投影来说,也有个显著的毛病,就是越到高纬度,大小扭曲越重大,到两极会被放到无限大,因而墨卡托投影并不能体现出南北两极。为了方便使用,互联网地图应用的 Web Mercator
投影,通过对两极地区的裁剪,把地图搞成一个正方形,这样在定义缩放级别、地图切图等解决时就会更清晰易懂。具体相干原理计算可参考 https://www.jianshu.com/p/434…。
通过下图,能够看到墨卡托投影下每个国家的大小和理论大小的差别。
上面两张图片来自天地图网站截图,咱们能够看出,地图层级同样是 18 级,黑龙江漠河(上图)与海南三亚(下图)的地图比例尺差异还是很大的。
经纬度等距离直投 VS 墨卡托投影
下图来自 Mercator vs. well…not Mercator (Platte Carre),活泼地阐明 经纬度等距离直投 (Platte Carre
)和 墨卡托投影(Mercator
)这两种投影下的失真状况:
左图示意地球球面上大小雷同的圆形,右上为墨卡托投影,投影后依然是圆形,然而在高纬度时物体被重大放大了。右下为经纬度等距离直投,圆的大小变动绝对较小,然而高纬度时的图像显著被拉长了。
查看天地图传统版网站 https://map.tianditu.gov.cn/2…,能够切换下投影形式,比照看一下不同投影的区别(能够把地图拖到哈尔滨地区,区别更显著)。通过上面动态图能够看出不同投影在哈尔滨地区的差别,其中“球面墨卡托”,采纳的是 web 墨卡托投影(EPSG:3857
);“经纬度”,采纳的是 EPSG:4326
的经纬度等距离直投。
总结
- 未经投影的天文坐标系之所以能够显示为立体地图,是因为它默认采纳了 经纬度等距离直投 的投影形式。
- 大部分互联网地图都是采纳
Web Mercator
(EPSG:3785
),或者是基于Web Mercator
做了加密偏移。 - 经纬度等距离直投 在高纬度地区的立体变形重大,大小和角度都会产生显著变动。
Web Mercator
在高纬度地区的立体会显著被拉大,然而角度不会发生变化。- 对于地图投影,没有最好的,只有最合适的,须要依据本人的利用场合来抉择。
参考资料:
- https://blog.csdn.net/kikitam…
- https://idvux.wordpress.com/2…
- https://en.wikipedia.org/wiki…
- https://en.wikipedia.org/wiki…
- https://en.wikipedia.org/wiki…
- https://www.jianshu.com/p/434…
原文地址:http://gisarmory.xyz/blog/index.html?blog=gis-coordinate-projection
欢送关注《GIS 兵器库》
本文章采纳 常识共享署名 - 非商业性应用 - 雷同形式共享 4.0 国内许可协定 进行许可。欢送转载、应用、从新公布,但务必保留文章署名《GIS 兵器库》(蕴含链接:http://gisarmory.xyz/blog/),不得用于商业目标,基于本文批改后的作品务必以雷同的许可公布。