Cartesian3.distance - 返回 NaN?
Cartesian3.distance - returning NaN?
我试图找出鼠标点击与一组广告牌中最近的一个之间的距离。我的代码如下:
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.
根据铯的文档,它应该返回一个数字。我可以发誓我在过去的项目中做过类似的事情并且没有遇到这个问题。我非常怀疑我遗漏了 and/or 忘记了一些非常基本的东西。谁能给点建议?
编辑:
我做了一些进一步的调试,发现 peakPosition.x 和 peakPosition.y 都是未定义的,其中 peakPosition = peaks[i].position。 peaks[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。我这辈子都弄不明白。
因此,根据我们的讨论,我们发现:
peaks
是 Cesium.Entity
的数组。
和
Cesium.Entity
的 position
字段是一个 Cesium.PositionProperty
,它是一个具有方法 getValue
的接口,接受 Cesium.JulianDate
作为它的第一个参数。因此,将所有这些放在一起,您唯一需要的更改是:
peakPosition = peaks[i].position;
到
peakPosition = peaks[i].position.getValue(new Cesium.JulianDate());
我试图找出鼠标点击与一组广告牌中最近的一个之间的距离。我的代码如下:
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.
根据铯的文档,它应该返回一个数字。我可以发誓我在过去的项目中做过类似的事情并且没有遇到这个问题。我非常怀疑我遗漏了 and/or 忘记了一些非常基本的东西。谁能给点建议?
编辑: 我做了一些进一步的调试,发现 peakPosition.x 和 peakPosition.y 都是未定义的,其中 peakPosition = peaks[i].position。 peaks[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。我这辈子都弄不明白。
因此,根据我们的讨论,我们发现:
peaks
是 Cesium.Entity
的数组。
和
Cesium.Entity
的 position
字段是一个 Cesium.PositionProperty
,它是一个具有方法 getValue
的接口,接受 Cesium.JulianDate
作为它的第一个参数。因此,将所有这些放在一起,您唯一需要的更改是:
peakPosition = peaks[i].position;
到
peakPosition = peaks[i].position.getValue(new Cesium.JulianDate());