一.坐标系
-
2D坐标(屏幕坐标):这个坐标也称为笛卡尔平面坐标,单位是像素,在cesium上可以用new Cesium.Cartesian2(x, y)创建。
-
3D坐标:这个是笛卡尔空间坐标,又称为世界坐标,可通过new Cesium.Cartesian3(x, y, z)创建,中心是地球的中心。
-
地理坐标(弧度):Cesium中的地理坐标单位默认是弧度制,可通过new Cesium.Cartographic(longitude, latitude, height)创建,其中这里的参数是用弧度表示的经纬度,即经度和纬度。弧度即角度对应弧长是半径的倍数。
角度转弧度 π/180×角度
弧度变角度 180/π×弧度 -
经纬度坐标(WGS84坐标):坐标原点在椭球的质心
二.坐标转换
/**
* @method 2d坐标转3d坐标系
* @param { object } position {x, y}
* @param { Viewer } viewer Viewer的实例
* @returns 3d坐标系
*/
export function coordinate2dTo3d(position, viewer) {
const cartesian3 = viewer.scene.globe.pick(
viewer.camera.getPickRay(position),
viewer.scene
);
return cartesian3
}
/**
* @method 3d坐标转cesium的弧度
* @param { object } cartesian3 {x, y, z}
* @returns 弧度的经纬度
*/
export function coordinate3dToRadians(cartesian3) {
// todo 判断是否为世界坐标
return Cesium.Cartographic.fromCartesian(cartesian3)
}
/**
* @method cesium的弧度转经纬度
* @param { object } radiansObject {longitude, latitude, height}
* @returns 经纬度
*/
export function radiansToDegrees(radiansObject) {
const trasKey = ["height", "latitude", "longitude"]
const obj = {};
for (const key in radiansObject) {
if(trasKey.includes(key)) {
obj[key] = Cesium.Math.toDegrees(radiansObject[key]);
}
}
return obj
}