标题说明了一切,即使它的位置在移动,我也无法让一个实体在视觉上在全球范围内移动。此代码将重现Sandcastle中的问题:
router.get('/test', cors(), function(req,res)
{
res.set("Access-Control-Allow-Origin", "*"); //set header here
res.render('exampleSearch', {title: 'FM | Test'});
});
如果在演示中选择球体,您将看到绿色选择指示器将在全球范围内移动,但球体将卡在一个位置。我想有一些简单的函数调用我不见了,但我一直在谷歌搜索过去几个小时,我找不到解决方案。
我已经看过Sandcastle的Picking演示了,但似乎没什么关系。我正在寻找的功能只是让一个形状无限期地循环通过同一组坐标,所以我无论如何都不能使用var viewer = new Cesium.Viewer('cesiumContainer');
var e = viewer.entities.add({
name : 'Sphere',
position: Cesium.Cartesian3.fromDegrees(-100, 30.0, 300000.0),
ellipsoid : {
radii : new Cesium.Cartesian3(200000.0, 200000.0, 200000.0)
}
});
viewer.scene.postRender.addEventListener(function(scene, time) {
var pos = e.position._value;
var cart = Cesium.Ellipsoid.WGS84.cartesianToCartographic(pos);
pos = Cesium.Cartesian3.fromRadians(cart.longitude + (1 * Math.PI / 180), cart.latitude, cart.height);
e.position = pos;
});
。
答案 0 :(得分:1)
我怀疑这个原因有点棘手:在Cesium中,椭圆体几何体是由Web Worker异步构建的。通过要求每个postRender
事件的位置发生变化,您基本上都会打破工作人员,在下一个请求开始之前,它无法完成一个请求。因此,我们最终永远不会看到职位更新。如果你稍微放松一下速度,你会发现位置确实更新了。
例如,在postRender
取代{400}的setInterval
后再次输入您的代码。这更像是时钟滴答而非平滑动画,但它显示了正在更新的位置:
var viewer = new Cesium.Viewer('cesiumContainer');
var e = viewer.entities.add({
name : 'Sphere',
position: Cesium.Cartesian3.fromDegrees(-100, 30.0, 300000.0),
ellipsoid : {
radii : new Cesium.Cartesian3(200000.0, 200000.0, 200000.0)
}
});
window.setInterval(function() {
var pos = e.position._value;
var cart = Cesium.Ellipsoid.WGS84.cartesianToCartographic(pos);
pos = Cesium.Cartesian3.fromRadians(cart.longitude + (1 * Math.PI / 180), cart.latitude, cart.height);
e.position = pos;
}, 400);
当工作人员完成更新几何体时,目前无法从Entity API中了解。您可能必须将此示例移出Entity API并改为使用Primitive API。