我试图找到鼠标点击与最近的一组广告牌之间的距离。我的代码如下:
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.我无法解决这个问题。
答案 0 :(得分:1)
所以,根据我们的讨论,我们发现:
peaks
是Cesium.Entity
s。
和
position
的{{1}}字段是Cesium.Entity
,这是一个方法Cesium.PositionProperty
的接口,接受getValue
作为其第一个参数。所以,把所有这些放在一起,你需要的唯一变化是:
Cesium.JulianDate
到
peakPosition = peaks[i].position;