1.加载cgcs2000服务
openlayers 默认支持的坐标系有4326(基于wgs84坐标系)和3857(墨卡托投影)两种。所以如果我们想要使用比如4490坐标系,就需要先注册。
是否需要调用
addProjection
?
大多数情况下:在
proj4
注册后,OpenLayers 会自动处理投影的添加和更新。所以通常不需要显式调用addProjection
。什么时候需要手动调用
addProjection
?如果你手动定义了一个新的投影或者需要修改 OpenLayers 默认的投影配置,你才需要调用
addProjection
。但对于proj4
已经注册过的投影,OpenLayers 会自动管理投影的添加。
npm install proj4 --save
将投影重新注册,图层方法加载禁用事业群框架方法,事业群框架默认4326.也可以在框架地图初始化时重新注册proj4,将新投影赋值给new View
import proj4 from "proj4";
import { register } from "ol/proj/proj4";
import {Projection,addProjection,} from "ol/proj";
cgcs4490() {
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);
const projection = new Projection({
code: "EPSG:4490",
units: "degrees",
axisOrientation: "neu",
});
projection.setExtent([-180, -90, 180, 90]);
projection.setWorldExtent([-180, -90, 180, 90]);
addProjection(projection);
}
// 加载服务
createLayerByUrl(url, name, params = {}) {
let tokenStr = "";
if(url.includes('tianditu')){
let index = url.indexOf("?");
if (index === -1) {
tokenStr = "?token=" + newToken;
} else {
tokenStr = "&token=" + newToken;
}
}
let source = new XYZ({
url: url + tokenStr,
projection: params.projection || "EPSG:4490",
maxZoom: 18,
});
let layer = new Tile({
preload: Infinity,
zIndex: params.zIndex || 10,
name,
title: params.title||name,
visible: params.visible,
source,
serverStyle: params.serverStyle || null,
serverUrlName: params.serverUrlName || null,
});
// source.setTileLoadFunction(wmtsTileLoadFunction);
//将绘制层添加到地图容器中
this.map.addLayer(layer);
return layer;
}
2.2000介绍
2000国家大地坐标系,是中国当前最新的国家大地坐标系,英文名称为China Geodetic Coordinate System 2000,英文缩写为CGCS2000。
2000国家大地坐标系的原点为包括海洋和大气的整个地球的质量中心;2000国家大地坐标系的Z轴由原点指向历元2000.0的地球参考极的方向,该历元的指向由国际时间局给定的历元为1984.0的初始指向推算,定向的时间演化保证相对于地壳不产生残余的全球旋转,X轴由原点指向格林尼治参考子午线与地球赤道面(历元2000.0)的交点,Y轴与Z轴、X轴构成右手正交坐标系。采用广义相对论意义下的尺度。ol 默认不支持2000坐标系,但是很多项目中使用的就是2000坐标系。具体定义方式如下。
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"]]'
);
ol.proj.proj4.register(proj4);
//重写projection4490,
var projection = new ol.proj.Projection({
code: "EPSG:4490",
units: "degrees",
axisOrientation: "neu",
});
projection.setExtent([-180, -90, 180, 90]);
projection.setWorldExtent([-180, -90, 180, 90]);
ol.proj.addProjection(projection);
2.投影介绍
EPSG 用于标识不同的地理空间参考系统,包括坐标系统、地理坐标系、投影坐标系等。这些标识符可用于许多应用程序和地理信息系统软件,以确保数据在不同系统之间的正确转换和处理。现在,EPSG已被Open Geospatial Consortium(OGC)承认并管理,成为了一个全球性的标准。
EPSG 是将常用的坐标系、投影、地理坐标系等地理空间参考系统的名称、参数、定义等信息进行标准化,并赋予一个唯一编码。
关系表
查询方式
查询EPSG,使用这个网站:https://epsg.io/