news 2026/9/11 8:24:25

CesiumJS 导出:从场景截图到数据导出的保姆级教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CesiumJS 导出:从场景截图到数据导出的保姆级教程

CesiumJS 导出:从场景截图到数据导出的保姆级教程

【免费下载链接】cesiumAn open-source JavaScript library for world-class 3D globes and maps :earth_americas:项目地址: https://gitcode.com/GitHub_Trending/ce/cesium

你用 CesiumJS 搭好的三维场景,关浏览器就没了。这篇讲清 CesiumJS 导出的两条路:场景截图和 KML 数据导出,看完你能把当前视角存成 PNG,把场景数据交付给 Google Earth。

想把场景放进汇报,总不能只截个屏吧?

你八成遇到过这两种情况:演示时的三维城市视角刚调好,一关浏览器素材就没了;合作方要场景里的实体数据,可他们只用 Google Earth,读不了你的源数据。CesiumJS 导出解决的就是这两类问题:一是把当前视角存成 PNG 图片,二是把场景实体变成 KML 或 KMZ 文件(KMZ 是带附件压缩成单包的 KML)。两者都是引擎自带能力,不用装第三方库。

方向明确了,先出一张图。

📸 3 分钟出第一张:CesiumJS 导出快速跑通

存档当前视角,第一步做什么?

截图就是画布元素(页面渲染的容器)导一张图,6 行代码:

const viewer = new Cesium.Viewer("cesiumContainer"); viewer.scene.render(); const a = document.createElement("a"); a.href = viewer.canvas.toDataURL("image/png"); a.download = "cesium-view.png"; a.click();

跑完就能看到 cesium-view.png 落在下载目录,画面就是画布里当前的三维地球视角,所见即所得:

图存好了,接下来看怎么把数据交给对方。

CesiumJS KML 导出,这 4 个参数必须调对

调用 Cesium.exportKml 之前,参数该怎么调?真正要盯的只有 4 个:

参数作用推荐值常见坑
entities要导出的实体集合dataSource.entities漏传直接抛 "entities is required"
kmzKML 连同附件压缩成单文件true设 false 只返回 KML 字符串和外部文件 Blob
modelCallbackglTF 模型转换回调场景有模型时必传不传会抛 RuntimeError
sampleDuration时变属性采样间隔(秒)60太小文件膨胀,太大轨迹稀疏

参数理顺了,再看看还能玩出什么花样。

进阶组合:多角度批量截图与模型 KMZ 交付

一张图不够用,还有两种玩法。

多角度批量截图

每次拍照前先用viewer.camera.setView把相机转到预设方位,等一帧渲染完成再 toDataURL,循环即可。俯视、斜视、特写,5 个角度出 5 张图,全程脚本完成。适合做汇报、交付需要多角度素材的人。

把三维模型装进 KMZ

KML 不认识 glTF,需要在 modelCallback 里返回一个 Collada(Google Earth 认的三维模型格式)路径,把模型和纹理的 Blob 塞进 externalFiles,引擎会自动打包进 KMZ,官方示例 export-kml 里就有可跑通的 demo:

适合需要把带模型的场景交付给 Google Earth 用户的人。

图和文件都齐了,但有几个地方最容易翻车。

做 CesiumJS 导出的人踩过的坑,替你排好了

  1. 截图是空白图 → 首帧没渲染完就调了 toDataURL → 截图前先调 render(),或等场景加载完成。
  2. 报 "entities is required" → 没传 entities 参数 → 传对应数据源的集合,如 viewer.dataSources[0].entities。
  3. 场景里有模型就抛异常 → KML 不支持 glTF 且未传 modelCallback → 回调里返回 .dae 路径并嵌入模型文件。
  4. 时变轨迹导出后变成一个静态点 → 时变属性只按 options.time 取值 → 传入合适的 time,或调 sampleDuration 控制采样密度。
  5. KMZ 在 Google Earth 打不开 → 模型 href 写成了 glTF 链接 → 换成内嵌在 KMZ 里的本地 Collada 文件。

汇报的图、交付的数据,两条路都通了。想弄清哪些实体类型能导出,去看 exportKml 源码,注释里写得很细。

【免费下载链接】cesiumAn open-source JavaScript library for world-class 3D globes and maps :earth_americas:项目地址: https://gitcode.com/GitHub_Trending/ce/cesium

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 8:22:56

堆的基本存储:完全二叉树与数组的天然映射

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 8:19:52

Bruno API 调试:装完 5 分钟发出你的第一个请求

Bruno API 调试:装完 5 分钟发出你的第一个请求 【免费下载链接】bruno Opensource IDE For Exploring and Testing APIs (lightweight alternative to Postman/Insomnia) 项目地址: https://gitcode.com/GitHub_Trending/br/bruno Bruno 是一款开源 API 客户…

作者头像 李华
网站建设 2026/9/11 8:17:59

Jackett 评分筛选:一次搜出 50 条结果,哪几条值得下载

Jackett 评分筛选:一次搜出 50 条结果,哪几条值得下载 【免费下载链接】Jackett API Support for your favorite torrent trackers 项目地址: https://gitcode.com/GitHub_Trending/ja/Jackett 在 Jackett 里搜一部《沙丘》,回来五十多…

作者头像 李华
网站建设 2026/9/11 8:15:30

豆瓣电影Top250数据爬取与分析全流程实战

1. 项目背景与核心价值电影数据分析一直是互联网内容挖掘的热门方向。豆瓣电影Top250榜单作为中文互联网最具公信力的电影评分集合,包含了大量有价值的结构化数据:从基础的电影名称、评分、评价人数,到导演、主演、类型、制片国家&#xff0c…

作者头像 李华