如何在 Cesium Js 中获得被跟踪实体和相机之间的正确距离?
How to get correct distance between tracked entity and camera in Cesium Js?
我想以米为单位获取实体和相机之间的距离。为了实现这一点,我在 Cesium.Cartesian3.distanceSquared
中传递相机和实体的 cartesian3 位置。当实体未被跟踪时,距离似乎正在正确计算。但是即使相机几乎与被跟踪实体一起移动,被跟踪实体的距离似乎更高。
我不知道如何获得任何实体(tracked/without 跟踪)和相机之间的正确距离。
实体可以在地球上或空中的任何地方,距离不应该是行进距离。
viewer.clock.onTick.addEventListener(function (clock) {
let epos = entity.position.getValue(clock.currentTime);
let campos = viewer.camera.position;
let distancebetween = Cesium.Cartesian3.distanceSquared(epos, campos);
if (viewer.trackedEntity){
console.log("Tracked:" + distancebetween);
}else{
console.log("NotTracked:" + distancebetween);
}
});
这是我正在尝试做的 Sandcastle link。
我不知道为什么相机位置 Cartesian3 值和实体 Cartesian3 值之间的距离不正确。不过我整理了一下,将Camera的Cartographic position转换为Cartesian3是计算正确的距离。
已替换:
let campos = viewer.camera.position;
和
let camPosCart3 = Cesium.Cartographic.toCartesian(viewer.camera._positionCartographic);
它工作正常。
如果有人对此有任何解释,将不胜感激。
此致,
使用相机的“世界位置”而不是它在当前坐标系中的位置可能会更好。例如:
let campos = viewer.camera.positionWC;
我不建议使用以下划线开头的字段,例如 _positionCartographic
。这些旨在成为私有变量,并且可以在 Cesium 版本之间更改,恕不另行通知。
我想以米为单位获取实体和相机之间的距离。为了实现这一点,我在 Cesium.Cartesian3.distanceSquared
中传递相机和实体的 cartesian3 位置。当实体未被跟踪时,距离似乎正在正确计算。但是即使相机几乎与被跟踪实体一起移动,被跟踪实体的距离似乎更高。
我不知道如何获得任何实体(tracked/without 跟踪)和相机之间的正确距离。
实体可以在地球上或空中的任何地方,距离不应该是行进距离。
viewer.clock.onTick.addEventListener(function (clock) {
let epos = entity.position.getValue(clock.currentTime);
let campos = viewer.camera.position;
let distancebetween = Cesium.Cartesian3.distanceSquared(epos, campos);
if (viewer.trackedEntity){
console.log("Tracked:" + distancebetween);
}else{
console.log("NotTracked:" + distancebetween);
}
});
这是我正在尝试做的 Sandcastle link。
我不知道为什么相机位置 Cartesian3 值和实体 Cartesian3 值之间的距离不正确。不过我整理了一下,将Camera的Cartographic position转换为Cartesian3是计算正确的距离。
已替换:
let campos = viewer.camera.position;
和
let camPosCart3 = Cesium.Cartographic.toCartesian(viewer.camera._positionCartographic);
它工作正常。
如果有人对此有任何解释,将不胜感激。
此致,
使用相机的“世界位置”而不是它在当前坐标系中的位置可能会更好。例如:
let campos = viewer.camera.positionWC;
我不建议使用以下划线开头的字段,例如 _positionCartographic
。这些旨在成为私有变量,并且可以在 Cesium 版本之间更改,恕不另行通知。