Cartesian3.distance - 返回NaN?

时间:2017-10-19 19:11:52

标签: javascript cesium

我试图找到鼠标点击与最近的一组广告牌之间的距离。我的代码如下:

var smallestDistance = -1;
var currentDistance = -1;
var nearestPeak;
var peakPosition;
var mousePosition = new Cesium.Cartesian3(ev.clientX, ev.clientY, 0.0);
for (var i = 0; i < peaks.length; i++) {
    peakPosition = peaks[i].position;
    currentDistance = Cesium.Cartesian3.distance(mousePosition, peakPosition);
    console.log( 'CESIUM: Distance to ' + peaks[i].name + ': ' + currentDistance + ' units.' );
    if (currentDistance < smallestDistance) {
        smallestDistance = currentDistance;
        nearestPeak = displayedPeaks[i];
    }
}
console.log( 'CESIUM: nearest peak is peak ' + nearestPeak.peakId );
if (smallestDistance != -1 && smallestDistance < 100000) {
    selectedPeak = nearestPeak;
}

问题出现在第一个console.log语句中,显示:

CESIUM: Distance to peak 1: NaN units.

根据Cesium的文档,它应该返回一个数字。我可以发誓我在过去的项目中做了类似的事情并没有遇到这个问题。我怀疑我失踪和/或遗忘了一些非常基本的东西。有人可以建议吗?

修改 我做了一些进一步的调试,我发现peakPosition.x和peakPosition.y都是未定义的,其中peakPosition = peak [i] .position。 peak [i]仍然在地球上渲染为广告牌,而peakPosition是一个对象。根据Cesium文档,它应该是Cartesian3类型的对象,它应该有x和y成员。那么为什么这些成员会被定义呢?

编辑2: 我尝试更换这一行:

peakPosition = peaks[i].position;

用这个:

peakPosition = new Cesium.Cartesian3(this.peaks[i].position.x, this.peaks[i].position.y, 0.0);

及其x,y和z成员总是0,0和0.我无法解决这个问题。

1 个答案:

答案 0 :(得分:1)

所以,根据我们的讨论,我们发现:

peaksCesium.Entity s。

的数组

position的{​​{1}}字段是Cesium.Entity,这是一个方法Cesium.PositionProperty的接口,接受getValue作为其第一个参数。所以,把所有这些放在一起,你需要的唯一变化是:

Cesium.JulianDate

peakPosition = peaks[i].position;