Skip to content

Cesium 是一款开源的基于 JavaScript 的 3D 地图框架。

Cesium 官网中描述写到:

CesiumJS is a geospatial 3D mapping platform for creating virtual globes. Our mission is to create the leading web-based globe and map for visualizing dynamic data. We strive for the best possible performance, precision, visual quality, ease of use, platform support, and content.

CesiumJS 是一款用于创建虚拟场景的 3D 地理信息平台。目标是用于创建以基于 Web 的地图动态数据可视化。目前尽力提升平台的性能、准确率、虚拟化能力、易用性以及平台的各种支持。

1. Cesium 的作者:AGI 公司

Cesium 隶属于 AGI 公司,该公司一直致力于时空数据业务。正如很多开源项目都有一个个性化的名字,Cesium 也不例外。Cesium 原意是化学元素铯,铯是制造原子钟的关键元素,通过命名强调了 Cesium 产品专注于基于时空数据的实时可视化应用。 AGI 的英文全称为 Analytical Graphics Incorporation,三位创始人曾在通用公司宇航部的供职工程师,提供 STK(System/Satellite Toolkit Kit)和 Cesium 两款产品。该公司是航天分析软件的领导者,而 STK 则是该公司的旗舰产品。经过多年来在时空数据的积累,AGI 公司逐渐掌握了大量 3D 可视化技术,也感受到各行各业对海量 3D 数据的强烈需求,因此于 2012 年创建了 cesiumjs 开源项目,围绕 Cesium 生态圈打造了一套安全可靠易扩展且平台独立的企业级解决方案。

2. Cesium 官方网站

建议大家将 Cesium 官网的博客都读一遍,博客大概分为三类,主要是技术类,比如性能优化,调度算法等,一类是定期的新版本特性,能够了解 Cesium 新功能和新特性,还有一类是大事记,比较轻松,不妨感受一下 Cesium 的团队文化。

Cesium 官网官方博客团队成员介绍

3. Cesium 的源码

Cesium 遵循 Apache 2.0 许可开源协议,可以免费的用于商业和非商业用途,无论是个人还是商业用途,可以任意修改源码不用开源,需要声明该产品使用了 Cesium,比如 Cesium.js,LICENSE.MD;MODIFICATIONS.md 声明你的修改清单。

GitHub 开源地址官方教程官方示例API 文档

Cesium 目前更新比较频繁,每个月月初会发布一次版本,当前最新版本是:

Npm version

Cesium 包中的资源及代码

  • Assets:Cesium 中的静态资源,包括图片数据及 JSON 数据
  • Scene:自定义着色器指南,新手可以直接忽略
  • ThirdParty:Cesium 中使用的第三方库
  • Widgets:Cesium 中的 CSS 样式文件
  • Workers:Cesium 多线程工作代码
  • Cesium.js:Cesium 主文件

Cesium 架构图,建议使用前先熟悉整体架构图,以便能够快速使用。 新窗口查看大图架构图

4. Mars3D 与 Cesium 的关系

Cesium 库总体来说是很难用、API 接口不友好的一个 SDK,所以我们 Mars3D 对 Cesium 的类的使用做了一致性的封装,统一的 API 接口风格、并对一些事件、调度等做统一内部处理,外部使用更加简单易用。

两个 SDK 是互相独立解耦的,可以理解为 mars3d 对 Cesium 做了扩展和提升,并重新封装、并增加了很多新功能。

4.1 mars3d-Cesium 库说明

因为 cesium 本身也有一些 bug 或需要优化的地方,Mars3D 使用的 cesium 也修改了部分 cesium 源码文件。我们修改 Cesium 的原则:

  • 主要扩展都在 mars3d 类库中,没法外部扩展的,才会在内部去修改 cesium 底层;
  • 尽量不改变 ceisum 本身逻辑,通过参数来可控改变;
  • 并且所有修改都有完整注释说明。

Npm version

4.2 mars3d 中如何使用 Cesium 类

开发时如果需要 Cesium 的内部接口可以直接使用Cesium.*来调用即可,vue 等环境中也可以通过 mars3d.Cesium.* 来获取 Cesium 相关对象。

4.3 mars3d 类对象中获取原生 Cesium 对象

基本 mars3d 使用的所有 Cesium 类在其对应内部都有暴露使用的 Cesium 对象属性,

以下是我们列出的常用替代关系清单,如果你使用的一些 Cesium 原生代码也可以通过下面清单说明,直接使用 mars3d 暴露的原生 cesium 属性对象。

mars3d 类内部 Cesium 对象说明
mars3d.Mapmap.viewer地球主对象
mars3d.layer.BaseTileLayertileLayer.layertileLayer.imageryProvider瓦片图层对象
mars3d.layer.TilesetLayertilesetLayer.tileset (在 readyPromise 异步获取使用)3dtiles 三维模型图层
mars3d.graphic.BaseGraphicgraphic.czmObject (不同子类实现)矢量数据对象,不同子类中实现,比如下面 Polygon
mars3d.graphic.PolygonEntitygraphic.czmObjectgraphic.entityEntity 矢量数据对象,其他类型使用相似
mars3d.graphic.PolygonPrimitivegraphic.czmObjectgraphic.primitivePrimitive 矢量数据对象,其他类型使用相似

5. 原生 Cesium 开发 相关学习网站

最好的教程其实是官方教程官方示例,并在学习中随时查阅API 文档

教程

代码

其他