JavaScript实现加载导出CZML文件详解

 更新时间:2025年02月14日 09:57:36   作者:还是大剑师兰特  
CZML是一种基于 JSON 的文件格式,用于描述地理空间数据和时间动态场景,这篇文章为大家详细介绍了如何使用JavaScript实现CZML文件的加载与导出,需要的可以了解下

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 文件示例

加载 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 文件示例

创建 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 是一种灵活且强大的文件格式,适用于各种地理空间数据的可视化和分析任务。

以上就是JavaScript实现加载导出CZML文件详解的详细内容,更多关于JavaScript加载导出文件的资料请关注脚本之家其它相关文章!

相关文章

  • ECMAScript6函数默认参数

    ECMAScript6函数默认参数

    这篇文章主要介绍了ECMAScript6函数默认参数的相关资料,需要的朋友可以参考下
    2015-06-06
  • js实现随机抽奖

    js实现随机抽奖

    这篇文章主要为大家详细介绍了js实现随机抽奖功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • 如何使用JS写个方法判断当前时区是否是夏令时

    如何使用JS写个方法判断当前时区是否是夏令时

    文章介绍了如何使用JavaScript判断当前时区是否处于夏令时,由于JavaScript标准库没有直接提供此功能,可以通过比较本地时间和UTC时间的差异来推断,文章还提供了使用moment.js和moment-timezone插件进行更精确夏令时检测的示例,感兴趣的朋友一起看看吧
    2024-12-12
  • JS按钮闪烁功能的实现代码

    JS按钮闪烁功能的实现代码

    js按钮闪烁功能的实现代码分为html和js两部分代码,具体实现代码大家参考下本文
    2017-07-07
  • 原生javascript实现读写CSS样式的方法详解

    原生javascript实现读写CSS样式的方法详解

    最近学习中遇到这个问题,为了日后方便查询,本人翻阅了一些资料总结了以下方法,仅限原生JS,如有不对的地方欢迎指出!只求大家看完觉得有学到点什么就OK了!下面这篇文章主要介绍了利用原生javascript实现读写CSS样式的方法,需要的朋友可以参考下。
    2017-02-02
  • 微信小程序判断用户是否需要再次授权获取个人信息

    微信小程序判断用户是否需要再次授权获取个人信息

    这篇文章主要介绍了微信小程序判断用户是否需要再次授权获取个人信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • JavaScript字典与集合详解

    JavaScript字典与集合详解

    这篇文章主要介绍了JavaScript字典与集合详解,集合是由一组无序且不重复的元素构成。我们可以将集合看成一种特殊的数组,它的特殊之处就是无序且不重复,这也就意味着我们不能通过下标的方式进行访问,而且集合中不会出现重复的元素
    2022-07-07
  • 利用原生的JavaScript实现简单拼图游戏

    利用原生的JavaScript实现简单拼图游戏

    拼图游戏是我们大家都玩过的一款小游戏,下面这篇文章主要给大家介绍了关于如何利用原生的JavaScript实现简单拼图游戏的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-11-11
  • JavaScript仿京东放大镜效果

    JavaScript仿京东放大镜效果

    这篇文章主要为大家详细介绍了JavaScript仿京东放大镜效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • 使用selenium抓取淘宝的商品信息实例

    使用selenium抓取淘宝的商品信息实例

    下面小编就为大家分享一篇使用selenium抓取淘宝的商品信息实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02

最新评论