示例地址
: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');
}
总结
通过上述示例,您可以:
- 使用 Cesium 加载 CZML 文件并将其可视化。
- 动态生成 CZML 数据并通过浏览器导出为文件。
CZML 是一种灵活且强大的文件格式,适用于各种地理空间数据的可视化和分析任务。