如何在 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 版本之间更改,恕不另行通知。