Cesium案列学习(Multi-partCZML.html)

news2024/12/25 13:14:24

 在学习这个案例之前,先花一点时间了解一下什么是CZML 

CZML Structure · AnalyticalGraphicsInc/czml-writer Wiki (github.com)

Cesium Language (CZML) 入门1 — CZML Structure(CZML的结构) - laixiangran - 博客园

CZML是JSON得一个子集,这意味着有效得CZML文档也是JSON文档,CZML文档包含一个JSON数组,其中数组中得每一个对象都是一个CZML数据包。

然后创建一个项目:先看一下代码

<script>
        window.startup=function(Cesium){
          //创建一个地图容器
          const viewer = new Cesium.Viewer("cesiumContainer", {
          shouldAnimate: true, });
          //创建一个div
          const statusDisplay = document.createElement("div");
          const fuelDisplay = document.createElement("div");
          const czmlPath = "../SampleData/";
          let vehicleEntity;
          //创建一个czmldatasource来保存多个实体
          const dataSource = new Cesium.CzmlDataSource();
          viewer.dataSources.add(dataSource);
          //创建一个数组保存几个czml流
          const partsToLoad = [
          {
            url: "MultipartVehicle_part1.czml",
            range: [0, 1500],
            requested: false,
            loaded: false,
            arguments
          },
          {
            url: "MultipartVehicle_part2.czml",
            range: [1500, 3000],
            requested: false,
            loaded: false,
          },
          {
            url: "MultipartVehicle_part3.czml",
            range: [3000, 4500],
            requested: false,
            loaded: false,
          },
        ];
        //处理czml文件到数据流中
        function processPart(part){
          part.requested=true;
          //处理数据解析为实例
          dataSource.process(czmlPath + part.url).then(function () {
            part.loaded=true;//已经加载

            
          });
        }
        //预先加载第一部分,程序写道这里已经可以看到运行得小车了
        processPart(partsToLoad[0]);



        }
        if(typeof Cesium!=="undefined"){
          window.startupCalled=true;
          window.startup(Cesium);
        }
        
        
      </script>

这些代码已经可以加载出来一个运行得小车了。但是此时小车处于一个什么状态呢,就是处于地图上得一个点,距离我们得视觉感觉特别远,下面我们继续优化代码,将小车调整到我们得视觉课时范围内。

加上这一句代码之后,再次刷新界面,小车就直接出现在最前端了。

if (!viewer.trackedEntity) {
              viewer.trackedEntity = vehicleEntity = dataSource.entities.getById(
                "Vehicle"
              );
            }

因为我们使用得是多个part,我们做个提示显示当前用的是那个part。

 //用来显示当前使用得是哪一个part
        function updateStatusDisplay() {
          let msg = "";
          //循环判断当前part是否加载成功,已经加载得显示为loaded 没有加载得显示为not needed yet
          partsToLoad.forEach(function (part) {
            msg += `${part.url} - `;
            if (part.loaded) {
              msg += "Loaded.<br/>";
            } else if (part.requested) {
              msg += "Loading now...<br/>";
            } else {
              msg += "Not needed yet.<br/>";
            }
          });
          //将字符串赋值给html
          statusDisplay.innerHTML = msg;
        }

现在得代码我们已经实现加载一个part得方法,因为我们要加载多个part。下面我们就要使用Viewer里面时钟得ontrick事件

viewer.clock.onTick.addEventListener(function(clock){
          
        })

这个事件是一直被触发得,我们现在要给这个事件添加条件,当第一个part运行快结束得时候,加载出来第二个part

     viewer.clock.onTick.addEventListener(function(clock){
          //计算提供的实例之间的时间差(以秒为单位)。
          const timeOffset = Cesium.JulianDate.secondsDifference(
            clock.currentTime,//当前时间
            clock.startTime //开始时间
          );
          //过滤掉使用过的part 然后加载新的part 
          //过滤条件 
          //比如第一个part得时候,因为已经请求成功  part.requested=true
          partsToLoad
            .filter(function (part) {
              return (
                !part.requested &&
                timeOffset >= part.range[0] - preloadTimeInSeconds &&
                timeOffset <= part.range[1]
              );
            })
            .forEach(function (part) {
              processPart(part);
            });
            if (vehicleEntity) {
            const fuel = vehicleEntity.properties.fuel_remaining.getValue(
              clock.currentTime
            );
            if (Cesium.defined(fuel)) {
              fuelDisplay.textContent = `Fuel: ${fuel.toFixed(2)} gal`;
            }
          }

        })
      

代码地址在:https://gitee.com/parrotfamily/cesium-study/tree/master/Multi-part%20CZML

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/11891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?我竟然回答不上来...

一道经典的面试题是从 URL 在浏览器被被输入到页面展现的过程中发生了什么&#xff0c;大多数回答都是说请求响应之后 DOM 怎么被构建&#xff0c;被绘制出来。但是你有没有想过&#xff0c;收到的 HTML 如果包含几十个图片标签&#xff0c;这些图片是以什么方式、什么顺序、建…

什么是 Element NFT 市场和 NFT 聚合?

Oct. 2022, Vincy Data Source: Footprint Analytics - Element NFT Marketplace NFT 交易市场 Element 在 2021 年 7 月 1 日作为解决了大多数 DeFi 项目利息的波动问题以及用户存款后本金流动性的问题推出。 8 月 15 日&#xff0c;该平台正式推出 2.0 版本&#xff0c;与原…

【树莓派不吃灰】命令篇③ 学习Shell脚本

目录1. Shell 脚本2. Shell 环境3. 运行 Shell 脚本3.1 方式13.2 方式24. Shell变量4.1 定义变量4.2 使用变量4.3 只读变量4.4 删除变量4.5 字符串4.5.1 获取字符串长度4.5.2 提取子字符串4.5.3 查找子字符串4.6 Shell 数组4.6.1 定义数组4.6.2 读取数组4.6.3 获取数组的长度4.…

100天精通Python(基础篇)——第8天:字符串的三种定义

文章目录字符串的三种定义方法示例代码如何想定义的字符串本身含有单引号&#xff0c;双引号&#xff0c;如何写呢&#xff1f;字符串的三种定义方法 1.单引号定义法 name ‘我是无敌的’ 2.双引号定义法 name “我是无敌的” 3.三引号定义法 name “”“我是无敌的”“” …

html实现扫雷小游戏(附源码)

文章目录实现功能1.扫雷设计1.1 主界面1.2 扫雷难度1.3 附带功能2.效果和源码2.1 动态效果2.2 源代码源码下载作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/127886480 html实现扫雷小游戏(附源码)&#xff0c;html扫雷…

神经网络编译器TVM

市面上&#xff0c;关于神经网络的提速方案&#xff0c;可谓八仙过海各显神通 英伟达搞了tensorRT facebook依托着pytorch也做了 libtorch c 的相关部署方案 谷歌在他原有的tensorflow的生态做了tensorflow c以及tensorflow lite相关的方案 这些方案各有优劣&#xff0c;各…

Redis数据结构之——intset

写在前面 以下内容是基于Redis 6.2.6 版本整理总结 一、整数集合&#xff08;intset&#xff09; 当一个集合只包含整数值元素&#xff0c;并且元素的个数不多时&#xff0c;Redis会使用整数集合作为集合键的底层实现。 1.1 整数集合的实现 整数集合可用保存的数据类型有&a…

MetersPhere提取信息头token并设置为全局变量

MetersPhere提取信息头token并设置为全局变量 我们需要登录接口的token参数&#xff0c;如下 在下面这一行了 Set-Cookie: tokenIdA552326CDC8F4A19B454DADF8938980B; path/参考了其他的文章&#xff0c;再加上自己的理解&#xff0c;现在提供两种方法,先把先驱的脚本拿出来…

Dragonframe是一个全功能的动画制作工具,专为满足电影,广播电视和电影的要求设计。

将 Dragonframe 置于您下一部定格动画电影的核心位置。 动画片 让您的动画栩栩如生。用于精确移动的专业屏幕工具。步进、播放、捕捉、重复。 摄影 使用相机控制、测试镜头和高级图像查看工具来构图和点亮完美的镜头。 声音的 导入和编辑多个音轨。对多个角色进行对话曲目阅读。…

我的力扣刷题顺序(参考代码回忆录)

数组 数组过于简单&#xff0c;但你该了解这些&#xff01;数组&#xff1a;二分查找数组&#xff1a;移除元素数组&#xff1a;序数组的平方数组&#xff1a;长度最小的子数组数组&#xff1a;螺旋矩阵II数组&#xff1a;总结篇 链表 关于链表&#xff0c;你该了解这些&…

当光伏巡检走向全自动化

作者 | 曾响铃 文 | 响铃说 无数的太阳能面板组成光伏发电的海洋&#xff0c;在烈日下矗立&#xff0c;为了保证它们正常运行&#xff0c;电站必须安排人力巡查&#xff0c;一块块面板全面检查&#xff0c;周而复始。 在光伏发电高速发展的这些年&#xff0c;这一幕已经成为…

餐饮美食网页设计(HTML+CSS+JavaScript)

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

hiveSql 跨N天最大连续统计

hiveSql 跨N天最大连续统计说明需求分析实现最后说明 看到标题可能没太能理解&#xff0c;什么叫跨N天连续&#xff1f;这里解释下&#xff1a; 跨N天连续定义为&#xff1a;登录相隔天数小于N 用跨2天举例&#xff08;即隔一天也算连续登录&#xff09; 例如 &#xff1a; 20…

书桌台灯怎么选?分享儿童卧室灯品牌

书桌少不了的就是台灯&#xff0c;从小到大&#xff0c;不管是学习还是工作&#xff0c;都离不开一张书桌&#xff0c;学生上学学习&#xff0c;书桌就是必不可少的一部分&#xff0c;而选择怎么样的台灯好呢&#xff1f; 最重要的是安全的的光线品质 在照明领域&#xff0c;光…

Matlab 实现 信号的基本运算

实验名称 利用 Matlab 软件的信号处理工具箱(Signal Processing Toolbox)中的专用函数来实现信号的基本运算。 包括 - * 时移、翻转、展缩 运算 实验环境 MATLAB - R2021b 实验目的 了解仿真基本的信号。 sin() 产生正弦信号 ysin(x) x 是自变量 可看做时间向量 plot() …

Quick MTF 照相机镜头图像质量测试程序-UPDATE

Quick MTF&#xff0c;图像质量测试应用程序 Quick MTF 可让您测试数字图像的质量。它具有精确的计算引擎和直观的用户界面&#xff0c;无需特殊培训即可轻松使用。只需使用 Quick MTF 打开测试图像并选择目标区域。 目的 Quick MTF 检查成像设备拍摄的图像质量&#xff0c;让…

【MySQL | 运维篇】07、MySQL 分库分表之 MyCat 管理与监控

目录 一、MyCat原理 二、MyCat管理 三、MyCat-eye 3.1 介绍 3.2 安装 1). zookeeper安装 2). Mycat-web安装 3.3 访问 3.4 配置 1). 开启MyCat的实时统计功能(server.xml) 2). 在Mycat监控界面配置服务地址 3.5 测试 A. 性能监控 B. 物理节点 C. SQL统计 …

【录用案例】CCF-B类,3区智能传感器类SCIEI,仅2个月录用

3区智能传感器类SCI&EI 【出版社】ACM 出版社 【期刊简介】IF:2.0-3.0&#xff0c;JCR3区&#xff0c;中科院4区 【检索情况】SCI&EI 双检&#xff0c;正刊&#xff0c;CCF-B类 【征稿领域】 ①智能城市的绿色通信和传感器网络与机器智能&#xff08;已截稿&#…

【刷题】二叉树遍历思路解析

二叉树遍历 &#xff08;牛客网&#xff09; 题目要求&#xff1a; 编一个程序&#xff0c;读入用户输入的一串先序遍历字符串&#xff0c;根据此字符串建立一个二叉树&#xff08;以指针方式存储&#xff09;。 例如如下的先序遍历字符串&#xff1a; ABC##DE#G##F### 其中“…

预览ppt时中文乱码

现象&#xff1a;预览ppt时中文乱码 原因&#xff1a;该后端服务部署的主机没有指定中文字体 解决&#xff1a;用root角色在主机目录 /usr/share/fonts 上传Chinese字体文件 1、上传解压后&#xff0c;去应用上测试&#xff0c;发现页面全空白的&#xff0c; 且后台服务日志…