一,前期准备
本文中 ol 版本为 7.5.2
众所周知,CGCS2000 = EPSG:4490
首先安装proj4
:
yarn add proj4
# 二选一
npm install proj4
坐标系信息我们使用epsg.io来查询
搜索ESPG 4490
后得到一个结果 :2000中国大地坐标系
翻阅 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"]]
二,代码实现
得到坐标系定义之后编写代码:
import proj4 from 'proj4'
import { register } from 'ol/proj/proj4'
import { Projection, addProjection } from 'ol/proj'
// OGC WKT 坐标系定义
proj4.defs('EPSG:4490', '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"]]')
register(proj4)
// 重写projection4490,
let projection4490= new Projection({
code: 'EPSG:4490',
units: 'degrees',
axisOrientation: 'neu'
})
projection4490.setExtent([-180, -90, 180, 90])
projection4490.setWorldExtent([-180, -90, 180, 90])
addProjection(projection4490)
使用:
import { Map, View } from 'ol'
import { fromLonLat } from 'ol/proj'
import TileLayer from 'ol/layer/Tile'
import XYZ from 'ol/source/XYZ'
// 初始化地图
const map = new Map({
target,
layers: [
new TileLayer({
title: key,
source: new XYZ({
url: 'cgcs2000图层地址',
// 使用 project4490 (cgcs2000)
projection: projection4490
})
})
],
view: new View({
center: fromLonLat(center),
zoom: 12
}),
controls: []
})
加载成功!
举一反三也可以解决其他地图引擎(如Cesium,Mapbox)中的类似问题