大家好,我是日拱一卒的攻城师不浪,致力于技术与艺术的融合。这是2024年输出的第50/100篇文章。
前言
经常有小伙伴会在群里问,在Cesium
中,如何控制模型移动
,给模型定制轨道
?
我的回答是:那不是有手就行?哈哈哈,开个玩笑,今天我们就来看下如何用"3行"代码做一个卫星轨道场景。
czml
能用3行代码,其实得益于我们我们提前准备好的数据,嘿嘿,也就是czml
文件格式,这个文件格式可以说很强大了,有了它,我们真的可以仅用几行代码,就能在cesium中实现模型运动轨迹。
我们先来认识下什么是czml?
这种文件格式是一种基于JSON
格式的描述语言,专门用于在Cesium
中动态 描述地理 和时间变化的数据。
它可以轻松定义和传递时间动态场景,包括实体的轨迹
、姿态变化
、样式动态更新
等功能。
CZML的特点
-
基于JSON格式:CZML是JSON的扩展。
-
时间动态性:可以描述与时间相关的动态变化,如移动轨迹、属性变化等。
-
高扩展性:支持包括点、线、面、模型、标签、广告牌等多种实体类型,以及它们的外观、位置和时间等相关信息。
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的常见应用场景
-
轨迹可视化 :例如
飞机
、船舶
或者卫星
的实时运动轨迹。 -
动态数据展示:如天气变化、物体属性随时间更新的值的变化等。
-
仿真场景:模拟事件的时间序列和地理变化。
-
数据流整合:结合后台流式数据实时更新场景。
czml的优势点
-
动态性强,适合时间序列数据。
-
可读性好,易于调试和扩展。
-
无需手动编写复杂的Cesium API代码,直接定义数据结构即可。
程序化自动生成czml
可能有小伙伴会说:如果我想定义那么长的卫星轨道,那我得编辑多少位置点信息呀,这不得累惨我!有没有智能的工具自动化生成呢?
答案:当然有啦,我们总不能当一辈子生产线上的乖乖牛马吧。
tle2czml
已经有大佬提前意识到了这个问题的严重性了,所以他早早的研发了这个插件库:tle2czml
,用于将 TLE(Two-Line Element set
)数据转换为 CZML 格式的。
TLE 介绍
TLE
(Two-Line Element Set)格式是描述卫星轨道
的标准方式,每个卫星的轨道信息包含两个
由数字组成的行。
TLE 数据的结构包括卫星的轨道倾角、升交点经度、偏心率、轨道周期等参数。这些参数可以用于预测卫星在未来某一时刻的位置。
tle2czml
使用
-
安装
tle2czml
工具tle2czml
可以通过 Python 环境安装,通常可以从 GitHub 或相关网站下载并运行。以下是安装步骤:-
首先,确保你已经安装了 Python。
-
使用 pip 安装
tle2czml
,如果工具已发布到 Python 包管理器 PyPI:bashpip install tle2czml
-
-
准备 TLE 数据
TLE 数据通常由卫星的发射者或卫星跟踪站提供。TLE 文件的内容通常是两行文本,就像下边这样:
plaintextISS (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
-
运行
tle2czml
工具运行工具时,可以使用命令行来指定 TLE 文件的路径和输出的 CZML 文件路径。例如:
bashtle2czml --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(备注来意),另外也可接项目合作。