仅需3行代码!带你做一个3D卫星轨道飞行动画

大家好,我是日拱一卒的攻城师不浪,致力于技术与艺术的融合。这是2024年输出的第50/100篇文章。

前言

经常有小伙伴会在群里问,在Cesium中,如何控制模型移动,给模型定制轨道

我的回答是:那不是有手就行?哈哈哈,开个玩笑,今天我们就来看下如何用"3行"代码做一个卫星轨道场景。

czml

能用3行代码,其实得益于我们我们提前准备好的数据,嘿嘿,也就是czml文件格式,这个文件格式可以说很强大了,有了它,我们真的可以仅用几行代码,就能在cesium中实现模型运动轨迹。

我们先来认识下什么是czml

这种文件格式是一种基于JSON格式的描述语言,专门用于在Cesium动态 描述地理时间变化的数据。

它可以轻松定义和传递时间动态场景,包括实体的轨迹姿态变化样式动态更新等功能。

CZML的特点

  1. 基于JSON格式:CZML是JSON的扩展。

  2. 时间动态性:可以描述与时间相关的动态变化,如移动轨迹、属性变化等。

  3. 高扩展性:支持包括点、线、面、模型、标签、广告牌等多种实体类型,以及它们的外观、位置和时间等相关信息。


CZML的基本结构

CZML由一系列JSON对象数组组成,每个对象描述一个或多个实体。常见的字段包括:

  • id:实体的唯一标识符。
  • name:实体名称。
  • description:实体的描述信息。
  • path:定义轨道线的样式;
  • position:绘制轨道线所需的位置信息,可以是固定值或随时间变化。
  • model:3D模型配置。
  • label:标签样式配置。

比如我举一个例子:

json 复制代码
[
  {
    "id": "document",
    "name": "CZML 示例",
    "version": "1.0"
  },
  {
    "id": "point",
    "name": "动态点",
    "position": {
      "cartographicDegrees": [116.3914, 39.9075, 100]
    },
    "point": {
      "color": {
        "rgba": [255, 0, 0, 255]
      },
      "pixelSize": 10
    }
  },
  {
    "id": "path",
    "name": "移动路径",
    "availability": "2024-12-19T00:00:00Z/2024-12-19T00:10:00Z",
    "position": {
      "epoch": "2024-12-19T00:00:00Z",
      "cartographicDegrees": [
        0, 116.3914, 39.9075, 100,
        300, 116.3925, 39.9085, 100
      ]
    },
    "path": {
      "material": {
        "solidColor": {
          "color": {
            "rgba": [0, 255, 0, 255]
          }
        }
      },
      "width": 3
    }
  }
]

CZML的常见应用场景

  1. 轨迹可视化 :例如飞机船舶或者卫星的实时运动轨迹。

  2. 动态数据展示:如天气变化、物体属性随时间更新的值的变化等。

  3. 仿真场景:模拟事件的时间序列和地理变化。

  4. 数据流整合:结合后台流式数据实时更新场景。

czml的优势点

  • 动态性强,适合时间序列数据。

  • 可读性好,易于调试和扩展。

  • 无需手动编写复杂的Cesium API代码,直接定义数据结构即可。

程序化自动生成czml

可能有小伙伴会说:如果我想定义那么长的卫星轨道,那我得编辑多少位置点信息呀,这不得累惨我!有没有智能的工具自动化生成呢?

答案:当然有啦,我们总不能当一辈子生产线上的乖乖牛马吧。

tle2czml

已经有大佬提前意识到了这个问题的严重性了,所以他早早的研发了这个插件库:tle2czml,用于将 TLE(Two-Line Element set)数据转换为 CZML 格式的。

TLE 介绍

TLE(Two-Line Element Set)格式是描述卫星轨道的标准方式,每个卫星的轨道信息包含两个由数字组成的行。

TLE 数据的结构包括卫星的轨道倾角、升交点经度、偏心率、轨道周期等参数。这些参数可以用于预测卫星在未来某一时刻的位置。

tle2czml 使用

  1. 安装 tle2czml 工具

    tle2czml 可以通过 Python 环境安装,通常可以从 GitHub 或相关网站下载并运行。以下是安装步骤:

    • 首先,确保你已经安装了 Python。

    • 使用 pip 安装 tle2czml,如果工具已发布到 Python 包管理器 PyPI:

      bash 复制代码
      pip install tle2czml
  2. 准备 TLE 数据

    TLE 数据通常由卫星的发射者或卫星跟踪站提供。TLE 文件的内容通常是两行文本,就像下边这样:

    plaintext 复制代码
    ISS (ZARYA)
    1 25544U 98067A   21275.44349999  .00002360  00000-0  48447-4 0  9994
    2 25544  51.6416 352.6585 0005054  72.1119 287.9349 15.48824580267914
  3. 运行 tle2czml 工具

    运行工具时,可以使用命令行来指定 TLE 文件的路径和输出的 CZML 文件路径。例如:

    bash 复制代码
    tle2czml --tle "path/to/tlefile.txt" --output "output_file.czml"

    这条命令将会读取 TLE 文件中的数据,计算卫星在不同时间点的位置,并生成一个 CZML 格式的文件。

渲染czml

拿到czml文件后,那就简单啦,真是3行代码~

js 复制代码
let czmldata = new Cesium.CzmlDataSource.load('./wx.czml');
viewer.dataSources.add(czmldata)
// 别忘记把cesium的动画开关打开噢~
viewer.clock.shouldAnimate = true;

OK,大功告成!

最后

czml数据来源github.com/jiawanlong/...

我的课程里也有对czml字段的详解,利于自定义czml文件,可以了解下《Cesium从入门到实战》,将Cesium的知识点进行串联,让不了解Cesium的小伙伴拥有一个完整的学习路线,并最终完成一个智慧城市的完整项目,课程也在不断更新迭代中,想了解+作者:brown_7778(备注来意)了解教程细节。
有需要进可视化&Webgis交流群可以加我:brown_7778(备注来意),另外也可接项目合作。

相关推荐
二狗哈16 小时前
Cesium快速入门11:广告牌添加
3d·webgl·cesium·地图可视化
地狱为王20 小时前
Cesium for Unity 去除Cesium Logo
unity·游戏引擎·cesium
二狗哈21 小时前
Cesium快速入门10:添加物体与3D建筑
3d·webgl·cesium·地图可视化
二狗哈2 天前
Cesium快速入门9:相机动画与交互
webgl·cesium·地图可视化
GIS遥遥2 天前
如何用 Cesium 实现楼栋单体化?前端 WebGIS 实战教程
前端·javascript·cesium·三维gis开发
二狗哈2 天前
Cesium快速入门8:相机的方向与位置
webgl·cesium·地图可视化
傣味洋芋3 天前
cesium(四):Material及MaterialProperty 设置材质
材质·cesium
爱看书的小沐3 天前
【小沐学WebGIS】基于Cesium.JS绘制雷达波束/几何体/传感器Sensor(Cesium / vue / react )
javascript·vue.js·react.js·雷达·cesium·传感器·波束
二狗哈3 天前
Cesium快速入门4:天空盒
webgl·cesium·地图可视化
二狗哈3 天前
Cesium快速入门1:打造第一个Cesium应用
webgl·cesium