记录Cesium中不知道的事

本文介绍了Cesium库中如何计算实体集合的可用性时间间隔,以及如何使用键盘事件、tileset的监听功能,如tileVisible、readyPromise、allTilesLoaded和tileLoad事件。

1 参考链接
重点参数记录

  • computeAvailability()
    计算得到的可用性时间间隔表示实体集合在给定时间范围内的可用性。这个信息可以帮助你更好地控制场景中的元素。

// 计算实体集合的可用性时间间隔
var entityCollection = dataSource.entities;
var availability = entityCollection.computeAvailability();

  • viewer.entities.suspendEvents() viewer.entities.resumeEvents()
    2 Cesium 中存在键盘事件
    参考地址
    在这里插入图片描述
    3 tileset常用的监听
  		 tileset.tileVisible.addEventListener(function (tile) {
          var content = tile.content;
          var featuresLength = content.featuresLength;
          console.log(featuresLength, 'tileVisible')
	  	 });
	  	 
        tileset.readyPromise.then((e) => {
          console.log(e, 'tileset.readyPromise');
        })

        // allTilesLoaded 会被调用多次  旋转、放大缩小模型时会触发这个事件,不适合用来做一次性的操作
        tileset.allTilesLoaded.addEventListener(function (e) {
          console.log(e, 'All tiles are loaded');
        });
        
        tileset.loadProgress.addEventListener(function (numberOfPendingRequests, numberOfTilesProcessing) {
          if ((numberOfPendingRequests === 0) && (numberOfTilesProcessing === 0)) {
            console.log('Stopped loading');
            return;
          }
          console.log('Loading: requests: ' + numberOfPendingRequests + ', processing: ' + numberOfTilesProcessing);
        });

   		 tileset.tileLoad.addEventListener(function (tile) {
          console.log(tile,'tileload')
        });

Cesium中,飞行数据记录可以结合同场景和需求采用同方法实现。 ### 绘制坐标点并记录姿态信息实现飞行数据记录 利用Cesium的entity实体进行绘制坐标点,并将相邻两点连线,记录每个点打点时的俯仰角和航向角等信息。在从一个点移动至另一个点的过程中,将视角也转向至另一个点的位置,从而实现第一人称飞行效果,同时完成数据记录。例如在绘制飞行路径时,每确定一个坐标点,就记录下该点的位置坐标以及对应的俯仰角和航向角等姿态信息。这些记录的数据可以用于后续的飞行轨迹复现、数据分析等操作。此方法可实现飞行过程中位置和姿态等关键数据的记录,为飞行管理和分析提供基础数据支持 [^1]。 ### 飞行管理中的数据记录 在SuperMap for Cesium的飞行管理场景中,初始化飞行管理模块时,会涉及到飞行路线相关数据的处理。如通过`Cesium.RouteCollection`从文件中加载飞行路线数据,初始化`Cesium.FlyManager`进行飞行管理。在这个过程中,可以记录飞行路线的相关信息,例如飞行路线的节点位置、站点标记等。同时,在飞行过程中,当到达某个站点时,还可以记录下站点相关信息,如站点的到达时间、当前的飞行状态等。以下是初始化飞行管理模块的示例代码: ```javascript // 定义在vue之外 var flyManager; export default { data() { return { } }, mounted() { initFlyManager(); }, methods: { //漫游相关 initFlyManager() { let routes = new Cesium.RouteCollection(viewer.entities); let fpfUrl = '/fpf/exportFlyManager.fpf'; routes.fromFile(fpfUrl); //初始化飞行管理 flyManager = new Cesium.FlyManager({ scene: scene, routes: routes }); flyManager.readyPromise.then(() => { // 飞行路线就绪 var currentRoute = flyManager.currentRoute; currentRoute.isLineVisible = false; //显示路线 currentRoute.isStopVisible = false; //显示站点标记 }) // 飞行过程中,始终看向下一个站点 flyManager.stopArrived.addEventListener(function (routeStop) { flyManager.viewToStop(routeStop); // 可在此处添加记录站点信息的代码 }); }, } } ``` 此代码在飞行管理的基础上,通过件监听可以方便地记录飞行过程中的站点信息等飞行数据 [^2]。 ### 使用CZML数据格式记录飞行数据 CZML(Cesium Markup Language)是一种基于JSON的格式,用于描述动态的地理数据,非常适合记录飞行数据。在CZML数据中,可以定义飞行对象的各种属性,如位置、时间、模型、路径等。例如,在定义飞行对象的位置时,可以通过`cartographicDegrees`数组记录同时间点的经纬度和高度信息;通过`clock`部分定义时间范围和时间乘数,从而控制飞行速度。以下是一个简单的CZML数据示例: ```json [ { "id": "document", "version": "1.0", "clock": { "interval": "2024-03-13T03:00:00Z/2024-03-13T03:12:50Z", "currentTime": "2024-03-13T03:00:00Z", "multiplier": 5 } }, { "id": "plane", "availability": "2024-03-13T03:00:00Z/2024-03-13T03:12:50Z", "viewFrom": { "cartesian": [-2080, -1715, 779] }, "model": { "gltf": "/model/plane.glb", "scale": 2 }, "orientation": { "velocityReference": "#position" }, "path": { "material": { "solidColor": { "color": { "interval": "2024-03-13T03:00:00Z/2024-03-13T03:12:50Z", "rgba": [0, 0, 205, 255] } } }, "width": [ { "interval": "2024-03-13T03:00:00Z/2024-03-13T03:12:50Z", "number": 2 } ], "show": [ { "interval": "2024-03-13T03:00:00Z/2024-03-13T03:12:50Z", "boolean": true } ] }, "position": { "interpolationAlgorithm": "LAGRANGE", "interpolationDegree": 1, "epoch": "2024-03-13T03:00:00Z", "cartographicDegrees": [] } } ] ``` 通过这种方式,可以将飞行对象在同时间的位置、姿态、外观等信息完整地记录下来,方便后续的飞行数据展示和分析 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Webgiserin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值