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

2023-10-31

 在学习这个案例之前,先花一点时间了解一下什么是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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cesium案列学习(Multi-partCZML.html) 的相关文章

  • 感应(异步)电机磁场定向控制速度环PI控制参数设计

    电机控制系列文章 感应 异步 电机磁场定向控制MATLAB Simulink建模 感应 异步 电机磁场定向控制电流环PI控制参数设计 目录 电机控制系列文章 前言 一 速度环开环传递函数 二 速度环开环传递函数零极点配置 三 速度环闭环性能
  • 【Twinkle】简历小问题

    在制作简历的时候 很多人都把心思放在如何撑满一张纸 当然 这确实很重要 但是在重内容的同时 我们容易忽略一些小问题 而这些小问题在HR的眼中其实是基本功的体现 更甚 这些小问题反倒是最扎眼的 比如字体 字号 行间距等 这些都是超脱于内容之外

随机推荐

  • [1199]npm常用命令

    文章目录 npm常用的安装命令 npm镜像源如何设置 npm将软件包安装到哪里 npx命令 npm文档 https docs npmjs com cli install npm常用的安装命令 npm i 就是npm install 简写 n
  • STL迭代器失效的场景总结

    一 序列式容器迭代器失效的场景 序列式容器以vector为例 分别有以下情况会失效 1 push back 使迭代器失效 在容器末尾添加一个元素 如果容器有剩余空间 capacity gt size 则直接添加新元素到容器尾部 此时 原迭代
  • 【产品经理实战项目系列教程】笔记004:产品经理应该具备的能力及如何学习;

    一 产品经理应该具备的能力 1 产品设计的能力 设计功能 业务 app 网站 小程序 后台等等 2 文档撰写 3 逻辑思维能力 需要在实战项目中不断的锻炼 激发自己的思考能力 4 业务梳理能力 难点在于梳理清楚业务与业务之间的闭环 5 沟通
  • flashFXP乱码解决

    菜单 命令 原始命令 输入 opts utf8 off 回车 或点确定 再刷新服务端的目录列表 即正常显示
  • 记一次Oracle RAC一节点重启后出现故障的处理

    因为存储的相关操作 客户需要手动重启rac节点 然而 这个重启导致了接下来的事故 由于是远程跟我沟通 我回复rac环境下可以重启一个节点 客户就自信重启了 出现的故障如下所示 grid hxdb01 srvctl start nodeapp
  • 使用VUE3.0版本搭建H5模板

    使用VUE3 0版本搭建H5模板 仓库地址 有需要的可以参考参考 https gitee com young frivolous vue3 app template tree master 为了方便每次写项目都要去搭建一个框架 今天使用vu
  • vue 实现鼠标移入移出表格,显示影藏图标, 并弹出提示内容

    效果 1 Table代码
  • NLP task2 _ 自然语言处理中N-Gram模型的Smoothing算法

    使用N Gram模型时的数据平滑算法 背景 为什么要做平滑处理 零概率问题 就是在计算实例的概率时 如果某个量x 在观察样本库 训练集 中没有出现过 会导致整个实例的概率结果是0 在文本分类的问题中 当一个词语没有在训练样本中出现 该词语调
  • 出圈

    题目描述 设有n个人围坐一圈并按顺时针方向从1到n编号 从第1个人开始进行1到m的报数 报数到第个m人 此人出圈 再从他的下一个人重新开始1到m的报数 如此进行下去直到所剩下一人为止 输入 输入多行 每行2个数 分别表示n和m 输出 计算每
  • AntDesign技术指南:构建优雅的前端界面

    引言 AntDesign是一款优秀的前端UI组件库 它提供了丰富的组件和功能 帮助我们快速构建漂亮 易用的前端界面 本篇博客将详细介绍AntDesign的使用方法和技巧 并展示完整的代码示例 无论你是初学者还是有经验的开发者 本篇博客都将为
  • ISAKMP报文解密

    使用wireshark抓包 No Time Source Destination Protocol Length Info 3 1 735352000 192 168 1 102 192 168 1 101 ISAKMP 878 IKE S
  • react中使用useEffect模拟componentDidUpdata(使 useEffect 在渲染时不执行,只在数据变更时执行)

    背景介绍 在列表搜索条件变化时 需要保存搜索条件 但是保存搜索条件这个方法不需要在组件挂载时执行 即如何使 useEffect 在渲染时不执行 只在数据变更时执行 即模拟类组件的componentDidUpdata 问题描述 如果是使用监听
  • Spring_Accepting request input

    Spring MVC provides several ways that a client can pass data into a controller s handler method These include 1 Query pa
  • Python模块和包

    目录 模块 1 1 导 模块 1 1 1 导 模块的 式 1 1 2 导 式详解 1 2 制作模块 1 2 1 定义模块 1 2 2 测试模块 1 2 3 调 模块 1 2 4 注意事项 1 3 模块定位顺序 1 4 all 包 2 1 制
  • Java项目:二手图书商城平台(java+SSM+JSP+JS+jquery+Mysql)

    源码获取 俺的博客首页 资源 里下载 项目介绍 用户角色包含以下功能 用户登录 查看商品详情 按分类查看 查看我的书架 上传二手书等功能 PS 这个没有管理员角色 环境需要 1 运行环境 最好是java jdk 1 8 我们在这个平台上运行
  • windows安装基于Apache的SVN服务器(包括SSL配置)

    原文地址 http bbs iusesvn com thread 158 1 1 html 参考文章 http blog 163 com shihua 23 blog static 23337594201010564847772 翻译整理
  • idea:父工程的pom.xml中的依赖爆红,下载刷新也没反应

    问题 在创建父工程的时候 使用dependencyManagement管理jar包时 发现有些爆红了 此时的版本号是由 和properties属性来维护的 参考备注掉的红色部分 于是去刷新下载 发现没反应 怎么刷新都不下载jar包 这种问题
  • java8 stream().map().collect()用法

    有一个集合 List
  • Java基础13--面向对象:继承

    Java基础13 面向对象 继承 文章目录 Java基础13 面向对象 继承 继承的概念 生活中的继承 类的继承格式 继承类型 继承的特性 继承关键字 extends关键字 implements关键字 super 与 this 关键字 fi
  • Cesium案列学习(Multi-partCZML.html)

    在学习这个案例之前 先花一点时间了解一下什么是CZML CZML Structure AnalyticalGraphicsInc czml writer Wiki github com Cesium Language CZML 入门1 CZ