《Cesium 进阶知识点》- 监听相机变化事件:获取视高、级别和角度等场景信息

效果  

关键代码

使用对象 Camera 监听鼠标 changed事件。 

viewer.camera.changed.addEventListener(()=>{
    // 视高 km
    let alt = (viewer.camera.positionCartographic.height / 1000).toFixed(2);
    // 方位角
    let heading = Cesium.Math.toDegrees(viewer.camera.heading).toFixed(2);
    // 俯仰角
    let pitch = Cesium.Math.toDegrees(viewer.camera.pitch).toFixed(2);
    // 翻滚角
    let roll = Cesium.Math.toDegrees(viewer.camera.roll).toFixed(2);
    // 级别
    let level = 0;
    let tileRender = viewer.scene._globe._surface._tilesToRender;
    if (tileRender && tileRender.length > 0) {
        level = viewer.scene._globe._surface._tilesToRender[0]._level;
    }
    let str = `级数:${level} 视高:${alt}km  方位角:${heading}° 俯仰角:${pitch}° 翻滚角:${roll}°`;
    console.log(str);
});

延伸知识

通过视高对球做渐变透明效果,使用接口 Cesium.NearFarScalar​​​​​​​

// 视高在 400 - 200 km之间,球有一个渐变的透明效果
viewer.scene.globe.translucency.frontFaceAlphaByDistance = new Cesium.NearFarScalar(
    400 * 1000,// 最小距离,单位是 m
    0.0,     // 透明度 为 0
    200 * 1000,// 最大距离
    1.0,     // 透明度 为 1
);

是的,监听数据的变化可以通过监听数据的事件或者定时器等方式实现,当数据发生变化时,可以更新cesium场景中对应的数据。 具体来说,可以使用以下方法实现: 1. 事件监听:可以通过监听数据源(如DataSource对象)的事件来实现数据更新。例如,当数据源中的数据发生变化时,可以触发“change”事件,然后在事件处理函数中更新cesium场景中对应的数据。具体代码如下: ``` var dataSource = new Cesium.GeoJsonDataSource(); var viewer = new Cesium.Viewer('cesiumContainer'); // 将数据源添加到cesium场景中 viewer.dataSources.add(dataSource); // 监听数据源的change事件 dataSource.entities.collectionChanged.addEventListener(function() { // 数据发生变化时,更新cesium场景中对应的数据 viewer.zoomTo(dataSource.entities); }); ``` 2. 定时器:可以使用定时器来定时更新数据。例如,可以使用setInterval函数来定时获取最新的数据,并将其更新到cesium场景中。具体代码如下: ``` var dataSource = new Cesium.GeoJsonDataSource(); var viewer = new Cesium.Viewer('cesiumContainer'); // 将数据源添加到cesium场景中 viewer.dataSources.add(dataSource); // 定时器,每隔1秒钟更新一次数据 setInterval(function() { // 获取最新的数据 var newData = getNewData(); // 将新数据添加到数据源中 dataSource.entities.add(newData); // 更新cesium场景中对应的数据 viewer.zoomTo(dataSource.entities); }, 1000); ``` 需要注意的是,使用定时器更新数据时需要考虑数据更新的频率和性能问题,以避免过多的计算和渲染导致性能下降。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值