[ Cesium ] 根据卫星位置,建立实时动态连线

2023-05-16

实现思路

  • 通过加载 czml 文件,生成卫星
  • 获取卫星实体的位置,建立连线
  • 监听卫星位置,若发生变化,则刷新连线

问题解决

连线动态变化

  • setInterval() 可以监听每一帧画面
  • 或者说当启动场景后,setInterval() 每一帧都会被调用

连线闪烁

  • 直接设置连线位置,或者删除连线后重新添加都会造成闪烁
  • 通过使用 CallbackProperty() 可以避免闪烁

完整实现代码

<body>
  <div id="cesiumContainer"></div>
  <script>
    var viewer = new Cesium.Viewer("cesiumContainer");
    viewer.scene.debugShowFramesPerSecond = true;
    let czmlDataSourcePromise = Cesium.CzmlDataSource.load('./TestData/test.czml')
    viewer.zoomTo(czmlDataSourcePromise);
    let czml;
    let llh_old;
    czmlDataSourcePromise.then(function (dd) {
      czml = dd;
      viewer.dataSources.add(czml);
      // 设置倍速
      viewer.clock.multiplier = 1000;
      var entity_2 = czml.entities.getById("Satellite/BEIDOU 2");
      var entity_3 = czml.entities.getById("Satellite/BEIDOU 3");
      var position_2 = entity_2.position.getValue(viewer.clock.currentTime);
      var position_3 = entity_3.position.getValue(viewer.clock.currentTime);
      let cartographic_2 = Cesium.Cartographic.fromCartesian(position_2);
      let cartographic_3 = Cesium.Cartographic.fromCartesian(position_3);
      let llh = [
        parseFloat(Cesium.Math.toDegrees(cartographic_2.longitude).toFixed(4)),
        parseFloat(Cesium.Math.toDegrees(cartographic_2.latitude).toFixed(4)),
        parseFloat(cartographic_2.height),
        parseFloat(Cesium.Math.toDegrees(cartographic_3.longitude).toFixed(4)),
        parseFloat(Cesium.Math.toDegrees(cartographic_3.latitude).toFixed(4)),
        parseFloat(cartographic_3.height)
      ]
      llh_old = llh;
      console.log(llh_old.toString())
      var purpleArrow = viewer.entities.add({
        id: 'purpleArrow',
        name: "Purple straight arrow at height",
        polyline: {
          positions: Cesium.Cartesian3.fromDegreesArrayHeights(llh),
          width: 10,
          arcType: Cesium.ArcType.NONE,
          material: new Cesium.PolylineArrowMaterialProperty(
            Cesium.Color.CYAN
          ),
        },
      });
    })

    setInterval(function () {
      if (czml != null) {
        var entity_2 = czml.entities.getById("Satellite/BEIDOU 2");
        var entity_3 = czml.entities.getById("Satellite/BEIDOU 3");
        var position_2 = entity_2.position.getValue(viewer.clock.currentTime);
        var position_3 = entity_3.position.getValue(viewer.clock.currentTime);
        let cartographic_2 = Cesium.Cartographic.fromCartesian(position_2);
        let cartographic_3 = Cesium.Cartographic.fromCartesian(position_3);
        let llh = [
          parseFloat(Cesium.Math.toDegrees(cartographic_2.longitude).toFixed(4)),
          parseFloat(Cesium.Math.toDegrees(cartographic_2.latitude).toFixed(4)),
          parseFloat(cartographic_2.height),
          parseFloat(Cesium.Math.toDegrees(cartographic_3.longitude).toFixed(4)),
          parseFloat(Cesium.Math.toDegrees(cartographic_3.latitude).toFixed(4)),
          parseFloat(cartographic_3.height)
        ]
        if (llh.toString() != llh_old.toString()) {
          console.log('执行操作')
          // 直接设置位置
          // viewer.entities.getById('purpleArrow').polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(llh)

          viewer.entities.getById('purpleArrow').polyline.positions =
            new Cesium.CallbackProperty(function () {
              return Cesium.Cartesian3.fromDegreesArrayHeights(llh)
            }, false)

          // 删除后,重新添加
          // viewer.entities.removeAll()
          // var purpleArrow = viewer.entities.add({
          //   id: 'purpleArrow',
          //   name: "Purple straight arrow at height",
          //   polyline: {
          //     positions: Cesium.Cartesian3.fromDegreesArrayHeights(llh),
          //     width: 10,
          //     arcType: Cesium.ArcType.NONE,
          //     material: new Cesium.PolylineArrowMaterialProperty(
          //       Cesium.Color.PURPLE
          //     ),
          //   },
          // });

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

[ Cesium ] 根据卫星位置,建立实时动态连线 的相关文章

  • HDFS入门简介

    HDFS是什么 xff1f 易于扩展的分布式文件系统运行在大量普通廉价机器上提供容错机制为大量用户提供性能不错的存取服务 设计目标 xff1a 自动快速检测应对硬件错误流式访问数据 以流的方式访问数据 xff0c 设计用于数据的批量处理 缺
  • Android对于Fragment的使用以及底部导航栏问题

    fragment 一直提示fragment类型不对 该错误是在我们创建的fragment类文件中导错了包 底部导航栏不显示文字 在该处加上app labelVisibilityMode 61 34 labeled 34 就可以全部显示了 原
  • 建立个人网站1:腾讯云域名购买,域名解析以及使用GitHub初步搭建网站

    建立个人网站1 申请域名 xff0c 域名解析以及使用GitHub初步显示 腾讯云的学生优惠申请了一个域名 然后用了GitHub的服务器搭了网站 xff0c github优点是不用备案 xff0c 域名解析把GitHub的个人域名复制过来就
  • SQL语句快查

    SQL语句 0 MYSQL登陆 mysql u root p 1 创建数据库 span class token keyword CREATE span span class token keyword DATABASE span span
  • Numpy 数据类型及转换

    今天写代码遇到数据类型相关的问题 xff0c 记忆不是很清楚 xff0c 所以总结归纳了一下 NumPy 数据类型 名称描述bool 布尔型数据类型 xff08 True 或者 False xff09 int 默认的整数类型 xff08 类
  • 安装phantomjs-prebuilt失败(已解决)

    今天使用 pyecharts snapshot 插件需要安装 phantomjs xff0c 结果报了下面得错误 xff0c 我不快乐了 xff1a 解决方法一 xff1a sudo npm i nrm g 安装nrm nrm 查看使用方法
  • 通信原理 AMI码和HDB3码的编码方式

    AMI 简介 AMI 消息码的 1 交替地变换为 43 1 和 1 xff0c 而 0 保持不变 优点 xff1a 没有直流成分 xff0c 高 xff0c 低频分量少 xff0c 编码电路简单 xff0c 可利用传号极性交替这一规律 观察
  • ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', syste

    好几天没用MySQL xff0c 今天出现了这个ERROR 2013 HY000 Lost connection to MySQL server at 39 reading initial communication packet 39 s
  • Ubuntu 10.04下安装libgtk2.0-dev

    转自 xff1a http chaoyang blog ustc edu cn index php archives 133 去看原文吧 xff0c 有些图粘不过来 好文章啊 学了一些知识 xff0c 谢谢作者 Problem 输入如下命令
  • Linux添加应用图标

    在Linux中 xff0c 有些软件因为采用源码编译或者其他的方式直接来进行安装 xff0c 一般通过bash脚本进行启动 xff0c 但对于有的用户来说 xff0c 更希望在桌面有一个桌面软件图标来方便打开 所以 xff0c 我们接下来将
  • NS2协议分析与仿真

    一 NS2安装 ns2需要的环境较为复杂 xff0c gcc版本不易过高 xff0c 以免无法编译成功 xff0c 推荐使用gcc 4 8 g 43 4 8 span class token comment 安装依赖 span span c
  • 【力扣周赛】第344场周赛

    力扣周赛 第344场周赛 6416 xff1a 找出不同元素数目差数组题目描述解题思路 6417 xff1a 频率跟踪器题目描述解题思路 6418 xff1a 有相同颜色的相邻元素数目题目描述解题思路 6419 xff1a 使二叉树所有路径
  • linux删除桌面图标

    进入 local share applications wine Programs 里面的文件命名一般是 lt 软件名称 gt desktop 删除不要的文件 xff0c 在进入 config menus applications merg
  • 初学shell脚本之-bash: /home/test/hello.sh: Permission denied

    今天学习shell脚本在windows写了个shell脚本 span class token operator span span class token operator span bin span class token operato
  • git push 失败 commit count: 3, latest commit: ****. missing Change-Id in message footer

    git push 失败 commit count 3 latest commit 76f0bdf missing Change Id in message footer 如 xff1a 76f0bdf这次提交没有id 执行 git log查
  • 【vscode】ssh通过跳板机连接内网服务器

    以防自己忘记 跟着下面的步骤 step 1 本地生成密钥 生成自己电脑的公钥和私钥 ssh keygen t ed25519 会跳出几个步骤 xff0c 第一个是指定路径用的 xff0c 可以直接回车 xff1b 后两个步骤是设置私钥密码
  • error: Missing nullability on parameter `cfg_cmd` in method 报错解决

    最近做从android9 0到11 0的代码移植工作 xff0c 需要在WifiManager java中添加接口 xff0c 添加以后编译报错 xff1a frameworks base wifi java android net wif
  • Android中为button控件添加点击事件的方式

    Android中为Button控件添加点击事件的方式 这里用三个按钮分别演示三个不同的方式实现按钮的点击事件 布局 span class token operator lt span span class token operator sp
  • Mariadb----字符类型 (五)

    MYSQL数据类型 字符串类型 可以使用命令查看常见编码所占字节数 MariaDB none gt SHOW CHARACTER SET 查看默认字符 SHOW VARIABLES LIKE 39 character 39 xff0c 发现
  • 在数组中,指针+1指的是什么?

    在数组中 xff0c 指针 xff0b 1指的是什么 xff1f eg xff1a int arr 10 61 1 2 3 p 43 43 p 61 10 那么在这个程序片段中p 43 43 究竟是什么意思 xff1a xff08 1 xf

随机推荐