cesium:Transforms

发布时间 2023-04-10 18:41:09作者: MARSHBAN

Transforms类提供了一些用于坐标变换的方法,可以帮助我们在不同的参考系之间转换点或向量。
cesium中最常用的transforms类有以下几个:
Transforms.eastNorthUpToFixedFrame(origin, ellipsoid, result)
这个方法接受一个原点参数、一个椭球体参数和一个可选的结果参数,返回一个4x4的变换矩阵,将一个点或向量从东北上(ENU)局部坐标系变换到地球固定系。这个方法可以用于创建以某个位置为中心的局部参考系。
例如,以纽约市某点为原点,建立局部坐标系到地固坐标系的转换关系。
下面的代码分别在x,y和z轴上创建了三个椭球,给的是局部坐标系坐标,但是position配置项中使用transform转换矩阵转到了地固坐标。

//代码可以复制到cesium沙盒中直接运行
// Create a scene
const viewer = new Cesium.Viewer("cesiumContainer");

// Get the position of New York City in Cartesian coordinates
var origin = Cesium.Cartesian3.fromDegrees(-74.01881302800248, 40.69114333714821);

// Get the transform matrix from ENU frame to Earth fixed frame
var transform = Cesium.Transforms.eastNorthUpToFixedFrame(origin);

// Add a red sphere of radius 5 meters at the origin of the local frame
const entity=viewer.entities.add({
name: "originPoint",
position: new Cesium.ConstantPositionProperty(origin),
ellipsoid: {
radii: new Cesium.Cartesian3(5.0, 5.0, 5.0),//椭球半径
material: Cesium.Color.WHITE,
},
});

var originX=new Cesium.Cartesian3(30.0, 0.0, 0.0);
const entity2=viewer.entities.add({
name: "xAxios",
position: new Cesium.ConstantPositionProperty(
Cesium.Matrix4.multiplyByPoint(transform, originX,new Cesium.Cartesian3())
),
ellipsoid: {
radii: new Cesium.Cartesian3(5.0, 5.0, 5.0),
material: Cesium.Color.RED,
},
});

var originY=new Cesium.Cartesian3(0.0, 30.0, 0.0);
const entityY=viewer.entities.add({
name: "yAxios",
position: new Cesium.ConstantPositionProperty(
Cesium.Matrix4.multiplyByPoint(transform, originY,new Cesium.Cartesian3())
),
ellipsoid: {
radii: new Cesium.Cartesian3(5.0, 5.0, 5.0),
material: Cesium.Color.GREEN,
},
});

var originZ=new Cesium.Cartesian3(0.0, 0.0, 30.0);
const entityZ=viewer.entities.add({
name: "zAxios",
position: new Cesium.ConstantPositionProperty(
Cesium.Matrix4.multiplyByPoint(transform, originZ,new Cesium.Cartesian3())
),
ellipsoid: {
radii: new Cesium.Cartesian3(5.0, 5.0, 5.0),
material: Cesium.Color.BLUE,
},
});
viewer.flyTo(entity);