Cesium 坐标转换

1,252 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

作为开源WebGIS三维可视化领域的翘楚,Cesium中可以添加不同类型数据,这些数据可以以不同的坐标形式定位在地球上,那么这里就出现了一个问题,不同形式的坐标之间,如何转换呢?这里就介绍一下Cesium里面如何进行坐标转换。

坐标类型

要做坐标转换,首先要明白坐标有哪些表现形式,在Cesium中,有以经纬度和高形(longitude, latitude, height)式的坐标,也有笛卡尔坐标Cartesian(X, Y, Z)形式,还有平面坐标(x,y)

笛卡尔坐标系,是以椭球中心为原点,也称为空间直角坐标系,Cesium默认是使用的WGS84坐标系统。

经纬度坐标转笛卡尔空间直角坐标。

Cesium中有Cartesian3类,这个类中有一个fromDegrees方法可以将经纬度坐标转换为笛卡尔坐标。

//经纬度地理坐标再转笛卡尔世界坐标
//其中height, ellipsoid, result,是可选的,分别是高度,椭球,和转换结果
let cartesian = Cesium.Cartesian3.fromDegrees(longitude, latitude, height, ellipsoid, result)
console.log("经纬度地理坐标再转笛卡尔世界坐标:");
console.log(cartesian);

空间直角坐标转经纬度。

scene类中的globe属性的ellipsoid类有cartesianToCartographic方法,可以将笛卡尔空间直角坐标系转为经纬度高,转换后的经纬度结果是弧度制,需要将弧度转换为度。

//笛卡尔世界坐标
console.log("笛卡尔世界坐标:");
console.log(worldPosition);
//笛卡尔世界坐标转经纬度弧度坐标
let cartographic = window.viewer.scene.globe.ellipsoid.cartesianToCartographic(worldPosition);
console.log("经纬度弧度坐标:");
console.log(cartographic);
//经纬度弧度坐标转经纬度坐标
let lon = Cesium.Math.toDegrees(cartographic.longitude);
let lat = Cesium.Math.toDegrees(cartographic.latitude);
let height = cartographic.height;
console.log("经纬度地理坐标:");
console.log(lon + "," + lat + "," + height);

笛卡尔空间直角坐标转平面坐标。

Cartesian2类中有fromCartesian3类,可以将笛卡尔空间直角坐标转为平面坐标

//经纬度地理坐标转平面坐标
let panCoord = Cesium.Cartesian2.fromCartesian3(worldPosition, panCoord);
console.log("经纬度地理坐标转平面坐标:");
console.log(panCoord);