目录
(7)点、广告牌、标签(Points,Billboards,and Labels)
(10)下一步工作(Where to go from here)
(5)相机控制(Camera Controls)
前面第一个例子中,使用zoomTo控制展示到一个特定的实体。其实也可以通过按下InfoBox左上角的camera按钮或双击一个实体来完成。还有一种flyTo的方法,可以达到相同的视图效果,采用摄像机飞行的动画来完成,而不是立即跳转。除了能捕捉到单一的实体,这两种方法都可以被传递为一个EntityCollection(之后讨论哦),一个DataSource,常用来加载通用的数据格式,如GeoJSON,或者一个标准JavaScript的实体数组。
默认情况下,任何方法都将计算出一个视角,来确保整个实体是可见得。相机将被调整为朝北,45度角直视目标物。可以通过提供的heading,pith和range来定制视角。下面的代码转动相机从东面30度来直视Wyoming,由于没有定义range,使用了计算的默认值。
var heading = Cesium.Math.toRadians(90);
var pitch = Cesium.Math.toRadians(-30);
viewer.zoomTo(wyoming, new Cesium.HeadingPitchRange(heading, pitch));
zoomTo和flyTo都是异步函数,也就是说它们不能保证在返回之前已经完成。例如,飞到一个实体发生在许多动画帧。这些函数返回一个应答(Promises),这可以让用户预订在飞行或者缩放完成后执行函数。使用下面的语句替换例子中的zoomTo,这不仅会飞到wyoming,还会在飞行完后选中它。
viewer.flyTo(wyoming).then(function(result){
if (result) {
viewer.selectedEntity = wyoming;
}
});
如果飞行成功完成,那么传递给回调函数的result参数是true,如果飞行被取消,即用户初始化另一个飞行或者在完成之前缩放,或因为目标没有相应的可视化功能,即无法实现缩放,那么传递给回调函数的result参数是false。
有时,在应用于时间序列的动态数据时,希望相机集中在实体而不是地球。这种情况可以设置viewer.trackedEntity属性。追踪实体需要设置position,在第一个例子中尝试这种方式,可以给wyoming增加一个位置来追踪它:
wyoming.position = Cesium.Cartesian3.fromDegrees(-107.724, 42.68);
viewer.trackedEntity = wyoming;
通过不定义viewer.trackedEntity或者点击InfoBox消息框左上角的取消按钮可以停止追踪。调用zoomTo或者flyTo也将取消追踪,viewer.trackedEntity将成为没有定义。
对于许多用例,viewer提供的专对于实体的相机功能已经足够了,如果想进一步在应用程序中定制视图,可以查看相机教程(Camera tutorial)。
(6)管理实体(Managing Entities)
EntityCollection是一个关联矩阵,可以方便地管理和监控一组实体。以viewer.entities属性的形式已经使用过它,EntityCollection即有一些传统的方法&#