openlayers-坐标系

288 阅读2分钟

前置信息(术语)

坐标系

  • 地理坐标系

    地理坐标系是使用三维球面来定义地球表面位置,简单一点理解,地理坐标系就是用经度、纬度、高程这三个值来描述空间中一个点的位置信息。其中,应用较为广泛的地理坐标系就是WGS-84坐标,而它的代号也就是EPSG:4326。

    当前比较普遍的地理坐标系有以下三类

    1. WGS-84:GPS坐标系,是国际标准,GPS坐标(Google Earth使用、或者GPS模块)

    2. GCJ-02:火星坐标系,国测局02年发布的坐标体系,中国坐标偏移标准,Google Map、高德、腾讯使用

    3. BD-09:百度坐标系,百度自研,百度地图使用。

  • 投影坐标系

    投影坐标系的地图单位通常为米,它是从地球的近似椭球体投影得到的。在WEBGIS开发中,常用的投影坐标系就是web墨卡托投影,而它的代号也就是EPSG:3857。

  • 坐标转换

    在openlayers中,地理坐标系和投影坐标系之间的转换非常简单,ol提供了两种方式进行转换:transform、fromLonLat。

    代码示例:

    //方法一:ol.proj.transform
    let point = ol.proj.transform([100, 50], "EPSG:4326", "EPSG:3857");
    //输出:[11131949.079327358, 6446275.841017158]
    //方法二:ol.proj.fromLonLat---第二个参数可以不传,默认为EPSG:3857,并且fromLonLat也是基于transform封装的
    let point = ol.proj.fromLonLat([100, 50], "EPSG:3857");
    //输出:[11131949.079327358, 6446275.841017158]

源码

/**
 * Transforms a coordinate from longitude/latitude to a different projection.
 * @param {import("./coordinate.js").Coordinate} coordinate Coordinate as longitude and latitude, i.e.
 *     an array with longitude as 1st and latitude as 2nd element.
 * @param {ProjectionLike} [projection] Target projection. The
 *     default is Web Mercator, i.e. 'EPSG:3857'.
 * @return {import("./coordinate.js").Coordinate} Coordinate projected to the target projection.
 * @api
 */
export function fromLonLat(coordinate, projection) {
  disableCoordinateWarning();
  return transform(
    coordinate,
    'EPSG:4326',
    projection !== undefined ? projection : 'EPSG:3857'
  );
}

参考资料

关于六种坐标系的一些理解-地理信息系统(GIS)-地信网论坛