每个地图数据在Web端加载显示时,都需要设罝其投影坐标系。众所周知,地图是不规则的椭球体,如果我们将其展开到二维平面上,会发现地图与实际情况有出入。所以,人们提出 投影的方式来尽量减小失真的程度。
openlayers的使用中,通常有两种坐标系,即 EPSG:4326 和 EPSG: 3857 ,未指定的情况下,默认为 EPSG: 3857 。
EPSG:4326 (WGS84)
世界大地测量系统1984 (World Geodetic System of 1984) 是 GPS 用来描述地球上位置的地理学坐标系统(三维)。WGS84 通常使用 GeoJSON 作为坐标系统的单位,GeoJSON 中使用数字作为经度和纬度的单位。大部分时候,当你描述一个经纬度坐标的时候,它就是基于 EPSG:4326 坐标系统的。
EPSG:4326 的数据一般是这种的。[22.37,114.05]。利于存储,可读性高
所以我们常常看到和用到的坐标系数据往往不是墨卡托坐标,而是EPSG:4326坐标系下的坐标数据。因为易读和存储小。
EPSG: 3857 (Pseudo-Mercator)
Pseudo-Mercator 投影系统将 WGS84 坐标系统投影在平面上(这个投影规则也被称之为球面墨卡托或者 web 墨卡托)。但是这个投影系统并不是包含地球上所有的位置,北纬和南纬的85.06度以上的地区不会展示。这个投影首次是被使用在 Google 地图上,加上几乎所有的 Web 地图,但是有趣的一点是,这些投影(EPSG:3857)内部都是使用的 WGS84 坐标系统 – 即使用的 WGS84 椭球体构建,但是将它们(EPSG:3857)的坐标是投射在一个球面上。
对于墨卡托投影来说,越到高纬度,大小扭曲越严重,到两极会被放到无限大,所以,墨卡托投影无法显示极地地区。下图来自维基百科,可以看到墨卡托投影下每个国家的大小和实际大小的差异。但是 conformality(正形性) 和 straight rhumb lines 这两个特点,让它非常适合于航海导航。
OpenLayers坐标转换相关函数
import { fromLonLat, toLonLat, transform } from “ol/proj”;
4326转换为3857坐标
fromLonLat(coordinate, opt_projection):
如: fromLonLat([104.912777, 34.730746])
3857转换为4326坐标
toLonLat(coordinate, opt_projection)
如:toLonLat([12914838.35,4814529.9])
3857、4326坐标互相转换
transform (coordinate, source, destination):
coordinate的坐标是source坐标,转换为destination的坐标。
如:transform ([104.912777, 34.730746], ‘EPSG:4326’, ‘EPSG:3857’)