Openlayers:如何注册一个新的坐标系统
OpenLayers中默认支持 WGS84和Web墨卡托两种坐标系统。但是如果想将地图设置为其它的坐标系统或者使用其它的坐标系统的数据就需要进行手动注册。本文就将介绍如何在OpenLayers中注册一个新的坐标系统并使用。
1.注册新坐标系统的基本步骤
首先需要借助proj4 库来定义一个新的坐标系统,然后使用ol/proj/proj4/register
方法将新的坐标系统注册到OpenLayers中。
import { register } from "ol/proj/proj4";
import proj4 from "proj4";proj4.defs("EPSG:4547","+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +type=crs"
);
register(proj4);
补充介绍:
proj4js 是 JavaScript 实现的坐标投影转换库,可在不同地理坐标系统(如 WGS84、UTM、Web 墨卡托)间进行转换。它基于 PROJ.4 库,支持 EPSG 代码和自定义投影配置,广泛应用于 Leaflet、OpenLayers 等 GIS 工具中。
2.proj4.defs 方法
proj4.defs
是 proj4 库提供的一个方法,用于定义新的投坐标系统。它接受两个参数:
- 坐标系统的标识符,通常遵循 EPSG 标准,这里使用的是 "EPSG:4547"。EPSG 代码是一种全球通用的地理坐标系统和投影系统的标识符,方便在不同的地理信息系统(GIS)软件和数据中统一引用。
- 坐标系统的具体定义,以 proj4 字符串的形式表示。proj4 字符串是一种描述地理投影参数的文本格式,包含了投影类型、原点、缩放因子、椭球体等关键信息。
3.如何获取proj4字符串
我们在使用proj4.defs
方法定义坐标系统时,一定会遇到一个问题:不知道某个坐标系统的 proj4 字符串是什么。
其实可以在 EPSG的 官网(EPSG.io: Coordinate Systems Worldwide)中根据 WKID 查找对应的 proj4 字符串。
首先进入官网。
输入想要查找的坐标系统的 WKID ,然后点击搜索按钮。
查找到坐标系统后,点击查看详情。(根据介绍可以看到 EPSG: 4547是一个投影坐标系统,它的大地基准是 CGCS2000,使用的投影是以东经114°经线为中央经线的 3°带高斯克吕格投影)
在详情页面中拖动到最下面就可以查看到 proj4字符串或者proj4.defs
的代码:
4.使用新注册的坐标系统
注册了新的坐标系统后可以用于坐标的转换。
//将 EPSG:4326 的坐标 转换为EPSG:4547
transform([113.17756338652154, 23.701191837626297],"EPSG:4326","EPSG:4547")// 将 EPSG:4547 的GeoJSON数据转换为EPSG:4326
const features = new GeoJSON().readFeatures(data, {dataProjection: "EPSG:4547",featureProjection: "EPSG:4326",
});
或者用来作为视图的坐标系统。
const map = new Map({target: "map",layers: [],view: new View({projection: "EPSG:4547",center:transform([113.17756338652154, 23.701191837626297],"EPSG:4326","EPSG:4547"),zoom: 12,}),controls: [],});//添加天地图底图addTdtBaseLayer(map, tdt_api_key, "vec", "w", "wmts");
参考资料
- openlayers自定义坐标系&加载自定义坐标系图层_openlayers projection-CSDN博客
- Openlayers 坐标系全面解析-CSDN博客
- OpenLayers地图投影与坐标系统 (进阶三)_openlayers坐标系-CSDN博客
- openlayers 加载天地图及自定义EPSG:4490坐标系以及axisOrientation的值为enu或neu的问题_openlayers axisorientation-CSDN博客