CesiumJS 导出功能 3 种方式一次说清:截图、录像、数据导出
2026/9/11 12:19:56 网站建设 项目流程

CesiumJS 导出功能 3 种方式一次说清:截图、录像、数据导出

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

做 CesiumJS 可视化项目,成果总要"带出去":放进汇报 PPT、发给评审看动态、或者归档成数据给下游工具继续用。CesiumJS 导出就围绕这三件事展开——截一张静态图、录一段动态视频、把地理数据本体存下来。它们解决的问题不同,成本和体积也差得多:截图只有几百 KB 到几 MB,录像动辄几十 MB,数据文件则和场景大小无关、几乎不占空间。下面按"你想要什么"来讲,每种方式怎么调参数、容易踩什么坑,都放在对应小节里。

先想清楚:你的成果要"存"还是"要动"

判断标准很简单。接收方不需要交互、不需要时间变化,一张图就够了,发微信、发邮件都不费劲。接收方要感受相机飞行、车辆移动、时间轴播放这类过程,才值得付出录像的体积代价。而如果你的目标是让同事换个工具还能继续编辑这批点位、轨迹和样式,那要导的是数据本体,跟画面无关。

很多人一开始想"录个屏算了",结果视频又大又模糊,最后发现其实一张高质量截图加几个角度就够用了。所以先定需求,再动手,能省不少返工。

存一张图:CesiumJS 截图这样调最省事

CesiumJS 的画面本来就画在一个 Canvas 里,截图本质就是让浏览器把这格画面导成图片,Canvas 自带的toDataURL之类的接口就能拿到 PNG 或 JPEG 数据,不需要装任何插件。工程上要调的主要是三件事:

  • 分辨率:画布多大就出多大的图。场景的pixelRatio(在 Scene.js 中定义)会按比例放大实际渲染像素,出图前调高它,出来的图会明显更细腻,代价只是那一下渲染稍慢,适合归档和印刷场景。
  • 时机:务必等场景完全渲染完再截。Cesium 的瓦片、模型是陆续加载的,急着截很容易拍到"黑块"和缺角。稳妥做法是等一次完整的渲染回调后再截,为什么这么做——就是为了保证画面和你在浏览器里看到的一致。
  • 角度:需要多个视角时,先写一组相机位姿(目标点、高度、俯仰角)存成列表,程序循环把相机设过去、渲染一帧、截一张。

批量截图怎么做:相机位姿存成一张表

上面提到的"多视角"如果不止两三个,就变成批量任务了。做法是把每个视角写成一条记录:经度、纬度、高度、俯仰、旋转,外加文件名。然后循环执行"定位相机 → 等渲染完成 → 截图 → 换下一个",最后一次性打包输出。这样有几个好处:第一,所有图的机位是确定的,下次重跑能像素级复现,方便做版本对比;第二,批量过程可以挂到定时任务或 CI 里,数据更新后自动出新图,不用人盯着。

常见坑是两个。一是镜头切换后没等场景稳定就截,画面还是上一帧,解决办法就是每个视角都等一帧渲染完成;二是批量时忘了控制画布尺寸,出图大小忽大忽小。把位姿表当成"截图配方"来管理,批量导出这件事就没有技术难度了,纯体力活而已。

录一段动态:CesiumJS 录像的参数怎么定

录像的思路是用浏览器的 MediaRecorder 这类接口,把画布的输出实时编码成视频文件,常见输出是 WebM,必要时再转成 MP4。调参就抓三个点:

  • 帧率:一般选 30fps。它比 60fps 文件小一半左右,而人眼对 3D 漫游场景基本感知不到差别;只有录快速甩镜头时才考虑 60。
  • 时长:先把相机脚本、时间轴范围跑通,确认哪段最值得看再正式录。录一整段 10 分钟的漫游,最后剪掉 9 分钟的,是最常见的浪费。
  • 码率:在"够看"的前提下取低值。评审看的是整体效果和动线,码率给太高只会让文件翻倍,给太低画面会发虚,中间取个平衡就行。

还有一个容易被忽略的点:录像期间如果同时还在加载大量瓦片和模型,主线程压力大,会出现掉帧。正式录之前先用 75% 分辨率试录一遍,确认流畅了再开全分辨率,比录完了重录省时间。

导出数据本体:GeoJSON、CZML、KML 三种格式怎么选

前面两条线导的都是"画面",这条线导的是"数据"。CesiumJS 里 GeoJSON、CZML、KML 三种格式都有对应的数据源(GeoJsonDataSource.js、CzmlDataSource.js、KmlDataSource.js),读和写是同一套结构,所以导出时直接按各自规范生成文本即可。

三种格式怎么挑,看你的数据"动不动":

  • GeoJSON:最通用,QGIS、ArcGIS、各大 Web GIS 都认。适合静态的点、线、面,加上少量属性。数据没有时间维度的话,默认选它,为什么——后续不管换什么工具,都不会有格式障碍。
  • CZML:Cesium 自家的时间序列格式,在 GeoJSON 的基础上多了时间属性、可用时间段(availability)这些概念。只要你的实体带时间动态——轨迹回放、按时间显隐、变化的属性——就用它,别的格式表达不了这些。
  • KML:对接 Google Earth 等桌面工具时的桥梁。属性多、样式复杂的场景下会有信息损耗(KML 的样式体系比 Cesium 的实体属性窄),所以一般只用在"需要给别人用 Earth 看"的场景。

导出参数与质量:出图前的最后检查

三条线共用几个质量开关,出图或录像前过一遍:

  1. 分辨率与pixelRatio:出图质量的第一变量。日常分享 1 倍就够,归档、打印、投影上大屏再调高,按需付出成本。
  2. 时间定住:场景里如果有时间驱动的实体,截图前把时钟停在目标时刻,录像前确认时间轴范围。否则同一批数据导两次,结果对不上。
  3. 图层归位:截图前确认底图、标注、辅助图层处于要展示的状态,临时调试用的东西(坐标网格、调试模型)关掉再截。
  4. 文件命名:带日期、版本、视角名。三个月后回来看一堆image1.png,没人知道哪张对应哪个版本。

最后留个可落地的动作:先拿你当前场景做最小验证——截一张图、录 10 秒片段、导一份 GeoJSON 各存一份,把三种产物发给一个同事看。他打开即懂、不需要你解释的画面,才是这次 CesiumJS 导出真正合格的输出。

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

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询