现在使用了udp接收数据(经度纬度高度和时间等数据),已经有一个飞机移动方法
//改成飞机位置
editModelPos(data) {
for (let item of data) {
let modelFJ = window.sceneIdMap[item.id]
// 飞机老位置
let onePosFJ = modelFJ.onePos;
let pos = {x: item.x, y: item.y, z: item.z};
let julianDate2 = this.addSampleData(modelFJ, pos, item.time);
if (modelFJ.linkId) {
for (let linkItem of modelFJ.linkId) {
// 获取天线
let modelTX = window.tianXianMap[linkItem];
if(!modelTX){
continue
}
// 天线老位置
let onePosTx = modelTX.onePos;
// 最终方向
let orientation = modelFJ.orientation.getValue(julianDate2);
// 最终位置
let position = modelFJ.position.getValue(julianDate2);
let chaju = Cesium.Cartesian3.subtract(onePosTx, onePosFJ, new Cesium.Cartesian3());
let zuizhongPos = Cesium.Cartesian3.add(chaju, position, new Cesium.Cartesian3());
// let p2 = this.toDegrees(zuizhongPos.x, zuizhongPos.y, zuizhongPos.z);
// 绿盒子的位置
var A = zuizhongPos;
// 飞机的位置
var B = position;
var localToWorld_Matrix = Cesium.Transforms.eastNorthUpToFixedFrame(B);
//求世界坐标到局部坐标的变换矩阵
var worldToLocal_Matrix = Cesium.Matrix4.inverse(localToWorld_Matrix, new Cesium.Matrix4());
//B点在局部坐标的位置,其实就是局部坐标原点
var localPosition_B = Cesium.Matrix4.multiplyByPoint(worldToLocal_Matrix, A, new Cesium.Cartesian3());
//A点在以B点为原点的局部的坐标位置
var localPosition_A = Cesium.Matrix4.multiplyByPoint(worldToLocal_Matrix, B, new Cesium.Cartesian3());
var m3 = Cesium.Matrix3.fromQuaternion(orientation);
var m4 = Cesium.Matrix4.fromRotationTranslation(m3);
// 计算盒子A点相对B点的向量
var A1 = Cesium.Cartesian3.subtract(localPosition_A, localPosition_B, new Cesium.Cartesian3());
//对A1向量应用旋转矩阵
var p = Cesium.Matrix4.multiplyByPoint(m4, A1, new Cesium.Cartesian3());
// 新的A的坐标
var p2 = Cesium.Cartesian3.subtract(B, p, new Cesium.Cartesian3());
let p3 = this.toDegrees(p2.x, p2.y, p2.z);
this.addSampleData(modelTX, {x: p3.x, y: p3.y, z: p3.z}, item.time);
}
}
}
}
然后利用发过来的实时数据飞行以及显示飞行驶过轨迹
求大佬救命
可以用czml描绘轨迹还是其他方法
模型使用 路径的方式添加到场景中 , 处理position 用回调的方式, 实时处理你udp接收的 位置信息, 进行刷新飞机位置
我想知道这个功能实现了吗