Cesium中的坐标系
WGS84地理坐标系统
又称世界坐标系,使用经度(longitude)、纬度(latitude)和高度(height)表示位置,其中,
- 经度范围:-180°到180°
- 纬度范围:-90°到90°
const wgs84Coordinate = {
longitude: 116.391311, // 经度
latitude: 39.907461, // 纬度
height: 0 // 高度(米)
};
Cartographic弧度坐标系
基于弧度的坐标表示方式,与WGS84类似,但使用弧度而不是角度,其中,
- 经度范围:-π到π
- 纬度范围:-π/2到π/2
// 将WGS84转换为Cartographic
const cartographicPosition = Cesium.Cartographic.fromDegrees(
wgs84Coordinate.longitude,
wgs84Coordinate.latitude,
wgs84Coordinate.height
);
// 也可以直接创建Cartographic坐标
const cartographic = new Cesium.Cartographic(
Cesium.Math.toRadians(116.391311), // 经度(弧度)
Cesium.Math.toRadians(39.907461), // 纬度(弧度)
0 // 高度(米)
);
Cartesian2屏幕坐标系
又称二维平面坐标系,以像素为单位的二维坐标系
- 原点在屏幕左上角(0,0)
- X轴向右为正,递增
- Y轴向下为正,递增
// 创建屏幕坐标点
var windowPosition = new Cesium.Cartesian2(x, y);
// 世界坐标转屏幕坐标:
// 从笛卡尔坐标转换为屏幕坐标
var windowPosition = scene.cartesianToCanvasCoordinates(cartesian3Position);
if (Cesium.defined(windowPosition)) {
console.log('屏幕坐标 X:', windowPosition.x, 'Y:', windowPosition.y);
}
//屏幕坐标转世界坐标:
// 从屏幕坐标获取射线
var ray = viewer.camera.getPickRay(windowPosition);
// 获取射线与地球表面的交点
var cartesian = viewer.scene.globe.pick(ray, viewer.scene);
Cartesian3笛卡尔空间直角坐标系
以米为单位,使用x、y、z三个分量表示三维空间中的点,其中,
- 原点在地球中心
- z轴指向北极
- x轴指向经度0度和纬度0度的交点
- y轴与x轴和z轴构成右手坐标系
// 从WGS84转换为Cartesian3
const cartesian3FromWGS84 = Cesium.Cartesian3.fromDegrees(
wgs84Coordinate.longitude,
wgs84Coordinate.latitude,
wgs84Coordinate.height
);
// 从Cartographic转换为Cartesian3
const cartesian3FromCartographic = Cesium.Cartesian3.fromRadians(
cartographic.longitude,
cartographic.latitude,
cartographic.height
);
重要转换函数:
度转弧度:
Cesium.Math.toRadians()
弧度转度:
Cesium.Math.toDegrees()
WGS84转Cartesian3:
Cesium.Cartesian3.fromDegrees()
Cartesian3转Cartographic:
Cesium.Cartographic.fromCartesian()
WGS84转Cartographic(度转弧度):Cesium.Cartographic.fromDegrees()