当前位置: 首页 > news >正文

CZML 格式详解,javascript加载导出CZML文件示例

在这里插入图片描述
示例地址:https://dajianshi.blog.csdn.net/article/details/145573994

CZML 格式详解

1. 什么是 CZML?

CZML(Cesium Zipped Markup Language)是一种基于 JSON 的文件格式,用于描述地理空间数据和时间动态场景。它专为 Cesium 平台设计,支持复杂的几何、属性和时间序列数据的表达。

2. CZML 文件结构

CZML 文件是一个 JSON 数组,其中每个元素称为一个“packet”(包)。每个 packet 包含一组属性,用于描述特定的对象或场景。

基本结构:
[{"id": "document", // 必须的根节点,标识整个 CZML 文件"version": "1.0"  // CZML 版本号},{"id": "object1",  // 对象的唯一标识符"position": {     // 定义对象的位置"cartesian": [0, 0, 0] // 使用笛卡尔坐标表示位置},"point": {        // 定义点的样式"pixelSize": 10 // 点的大小(像素)}}
]

JavaScript 加载 CZML 文件示例

1. 加载 CZML 文件

使用 Cesium 提供的 Cesium.CzmlDataSource 类来加载 CZML 文件。

代码示例:
// 初始化 Cesium Viewer
var viewer = new Cesium.Viewer('cesiumContainer');// 创建 CZML 数据源
var dataSourcePromise = Cesium.CzmlDataSource.load('path/to/your.czml');// 将 CZML 数据添加到 Viewer 中
dataSourcePromise.then(function(dataSource) {viewer.dataSources.add(dataSource);// 自动调整相机视角以聚焦于 CZML 数据viewer.zoomTo(dataSource);
}).catch(function(error) {console.log('Error loading CZML file: ' + error);
});
说明:
  • Cesium.CzmlDataSource.load 方法用于加载 CZML 文件。
  • viewer.dataSources.add 方法将 CZML 数据源添加到 Cesium 场景中。
  • viewer.zoomTo 方法自动调整相机视角以聚焦于加载的数据。

JavaScript 导出 CZML 文件示例

1. 创建 CZML 数据

可以通过 JavaScript 动态生成 CZML 数据。

代码示例:
// 创建一个 CZML 数据数组
var czml = [{"id": "document","version": "1.0"},{"id": "point1","name": "Example Point","description": "This is an example point.","position": {"cartesian": [0, 0, 0] // 地球中心点},"point": {"pixelSize": 10,"color": {"rgba": [255, 0, 0, 255] // 红色}}}
];// 将 CZML 数据转换为 JSON 字符串
var czmlString = JSON.stringify(czml, null, 2);// 创建一个下载链接并触发下载
function downloadCZML(data, filename) {var blob = new Blob([data], { type: 'application/json' });var url = URL.createObjectURL(blob);var a = document.createElement('a');a.href = url;a.download = filename;document.body.appendChild(a);a.click();a.remove();
}// 调用下载函数
downloadCZML(czmlString, 'example.czml');
说明:
  • czml 是一个包含 CZML 数据的数组。
  • JSON.stringify 方法将 CZML 数据转换为 JSON 字符串。
  • downloadCZML 函数创建一个临时的下载链接,并触发浏览器下载 CZML 文件。

完整示例:加载和导出 CZML 文件

以下是一个完整的示例,展示如何加载和导出 CZML 文件。

HTML 部分:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Cesium CZML Example</title><script src="https://cesium.com/downloads/cesiumjs/releases/1.94/Build/Cesium/Cesium.js"></script><link href="https://cesium.com/downloads/cesiumjs/releases/1.94/Build/Cesium/Widgets/widgets.css" rel="stylesheet"><style>#cesiumContainer {width: 100%;height: 100vh;margin: 0;padding: 0;overflow: hidden;}</style>
</head>
<body><div id="cesiumContainer"></div><button onclick="exportCZML()">Export CZML</button><script src="app.js"></script>
</body>
</html>
JavaScript 部分(app.js):
// 初始化 Cesium Viewer
var viewer = new Cesium.Viewer('cesiumContainer');// 加载 CZML 文件
var dataSourcePromise = Cesium.CzmlDataSource.load('path/to/your.czml');
dataSourcePromise.then(function(dataSource) {viewer.dataSources.add(dataSource);viewer.zoomTo(dataSource);
}).catch(function(error) {console.log('Error loading CZML file: ' + error);
});// 导出 CZML 文件
function exportCZML() {// 创建 CZML 数据var czml = [{"id": "document","version": "1.0"},{"id": "point1","name": "Exported Point","description": "This point was exported from the application.","position": {"cartesian": [0, 0, 0]},"point": {"pixelSize": 10,"color": {"rgba": [0, 255, 0, 255] // 绿色}}}];// 将 CZML 数据转换为 JSON 字符串var czmlString = JSON.stringify(czml, null, 2);// 下载 CZML 文件function downloadCZML(data, filename) {var blob = new Blob([data], { type: 'application/json' });var url = URL.createObjectURL(blob);var a = document.createElement('a');a.href = url;a.download = filename;document.body.appendChild(a);a.click();a.remove();}downloadCZML(czmlString, 'exported.czml');
}

总结

通过上述示例,您可以:

  1. 使用 Cesium 加载 CZML 文件并将其可视化。
  2. 动态生成 CZML 数据并通过浏览器导出为文件。

CZML 是一种灵活且强大的文件格式,适用于各种地理空间数据的可视化和分析任务。


http://www.mrgr.cn/news/90599.html

相关文章:

  • HR告诉你,机器视觉公司招聘真相!
  • AI前端开发:跨领域合作的新引擎
  • 【DuodooBMS】江苏新材料行业重资产数字化管理解决方案——从传感器到平台的全链路智能升级,赋能新材料智造新范式
  • 《Python百炼成仙》21-30章(不定时跟新)
  • 若输入超过 5 位数个时,推荐使用 scanf 输入数据。
  • 深入剖析 Vue 的响应式原理:构建高效 Web 应用的基石
  • 一文深入了解DeepSeek-R1:模型架构
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter11-期约与异步函数
  • 【R语言】方差分析
  • GLM库需要VS2013及以上
  • 游戏引擎学习第101天
  • RabbitMQ使用guest登录提示:User can only log in via localhost
  • 编译和链接【四】链接详解
  • 逻辑分析仪的使用-以STM32C8T6控制SG90舵机为例
  • Linux系统调用
  • MySQL 入门大全:数据类型
  • DataBase【MySQL基础夯实使用说明(下)】
  • 浏览器网络请求全流程深度解析
  • Llama_Index核心组件介绍
  • 【设计模式】【行为型模式】状态模式(State)