仅需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(备注来意),另外也可接项目合作。

相关推荐
汪洪墩2 小时前
【Mars3d】设置backgroundImage、map.scene.skyBox、backgroundImage来回切换
开发语言·javascript·python·ecmascript·webgl·cesium
supermapsupport7 小时前
iClent3D for Cesium 实现无人机巡检飞行效果
gis·cesium·supermap·webgis
白嫖叫上我2 天前
Cesium 无人机航线规划(航点航线)
无人机·cesium
BJ-Giser4 天前
前端解析超图的iserver xml
前端·可视化·cesium
我码玄黄4 天前
在Cesium中加载OD线
前端·javascript·cesium
supermapsupport4 天前
iClient3D for Cesium 实现限高分析
3d·vue·gis·cesium·supermap·webgis
白嫖叫上我5 天前
Cesium 无人机航线规划(区域航线)
无人机·cesium
智方科技9 天前
探索 Cesium 的未来:3D Tiles Next 标准解析
前端·算法·3d·信息可视化·webgl·cesium·tilesbuilder
Allen.l11 天前
Cesium中实现仿ArcGIS三维的动态图层加载方式
javascript·arcgis·cesium