使用铯最轻的方法是什么?

What is the lightest possible method of using Cesium?

我对使用 Cesium 构建带有自定义图块的 3D 地球很感兴趣,但是根据 "get started" instructions here,您似乎必须下载一个 30mb 的巨大目录并将整个内容包含在您的项目使其 运行 正确。这是真的?我不能只包含 Cesium.js 并得到 运行ning 吗?我不需要它们包含的 80% 的 UI 元素。

在 "get started" 教程的结尾,它们似乎表明您需要获得 运行ning 的是这些位:

<script src="Cesium/Cesium.js"></script>

@import url(Cesium/Widgets/widgets.css);

<div id="cesiumContainer"></div>

var viewer = new Cesium.CesiumViewer('cesiumContainer');

但是当我设置这些位时,我得到这个错误:"define is not defined" 和 "Cesium is not defined"。

运行铯最轻的方法是什么?

该教程肯定需要更新,我会记下来清理它。 (对于初学者来说,它的底部有一个错误,因为 Cesium.CesiumViewer 应该只是 Cesium.Viewer。)话虽这么说,这里是关于 zip 中包含的内容以及你将 want/need 用于实际开发。

  • 应用程序 -> 示例应用程序。
  • Source -> 用于基于模块开发的 AMD 模块(requirejs、browserify 等)也被示例应用程序使用。
  • 规范 -> 单元测试。
  • ThirdParty -> 以上需要第三方库。
  • Build/Apps -> 示例应用程序的构建和缩小版本。
  • Build/Documentation -> 参考文档。

这留下了两个目录,Build/CesiumBuild/CesiumUnminified,我将在一分钟。

但首先,从技术上讲,您问题的正确答案是创建尽可能轻的基于 Cesium 的应用程序,使用我们提供的 AMD 模块。这意味着您只需要在开发时包含 Source 文件夹,然后您的构建过程将创建您的应用程序的缩小和串联版本以进行部署。使用模块确保您只包含您正在使用的 Cesium 功能。这不同于 "traditional" Web 开发实践,后者通过页面底部的脚本标签以正确的顺序包含所有代码和库的缩小版本。模块每天都在获得发展势头,ES6 以及像 Babel 这样的构建系统正在慢慢接管 Web 开发领域。我们自己使用 requirejs,但那里有很多选择。

以这种方式构建的应用程序示例是 Build\Apps\CesiumViewer 中的 Cesium Viewer 示例(源代码在 Apps\CesiumViewer 中)。整个构建的应用程序(未压缩)为 8.77 兆,几乎公开了 Cesium 的所有特性和功能。其中 3.65 兆是默认提供的 Natural Earth 图像和应用程序仅在您使用触发它的功能时按需提取的其他数据文件。剩余的 JavaScript 在服务器端通过 gzipping 压缩大大减小了大小。要亲自查看,运行 最新的 Cesium 查看器 link 并在浏览器开发工具中打开网络选项卡。整个应用程序只吸收了 2.2 兆(包括从 Bing 加载的初始图像)。Cesium 部分只有大约 426kb。如果你开始加载 GeoJSON 或 KML 文件,它可能会吸收一些额外的 kb,但是不多。

由于基于模块的方法需要额外的设置并且在整个 Web 开发中仍然不常见,我们还提供了 Build/Cesium 和 Build/CesiumUnminified 文件夹。其中包括 Cesium 的完全缩小和串联版本,它们将所有模块吸收到一个文件中。但是,您需要的不仅仅是 Cesium.js 文件来进行部署。以下是这些文件夹的细分:

  • Build/Assets -> Cesium 附带的默认 imagery/assets(imagery/icons/stars/data 用于 ICRF 转换)。根据您配置 Cesium 应用程序的方式,根据需要提取此数据。它是 3.65 兆,但很可能您的应用程序只会触及其中的几 kb(取决于您使用的功能)。我建议部署整个目录,而不是尝试确定要部署到服务器的内容(但正如我所说,客户端可能永远不会检索其中的大部分内容)。
  • Build/WorkersBuild/ThirdParty -> 这些包含 Cesium 使用的串联网络工作者。这包括 imagery/terrain、几何镶嵌和 zip 文件处理使用的代码。它是按需拉下来的,即使你做了一些事情来要求所有这些,它仍然在 meg gzipped 之下。由于 WebWorkers 的性质,这些文件不能包含在主要 Cesium.js 中(我们认为这是规范中的一个缺陷)。
  • Build/Widgets -> 包含串联的 CSS,以单独的小部件形式和组合的 widgets.css 文件。我建议只包含 widgets.css 并完成它(4kb gzipped);但如果您真的很在意文件大小,您可以删除单个 css 文件。该文件夹还包含各种小部件使用的图标。再一次,只有在需要时才会从服务器检索它们。

正如他们的名字所暗示的那样,Build/CesiumBuild/CesiumUnminified 几乎是一回事。主要区别在于 Build/Cesium 已经缩小并且小得多。它也更快,因为它删除了大量调试代码以提高性能。我们的官方建议是针对 CesiumUnminified 进行开发并使用 Cesium 进行部署。这将使开发变得更容易,因为如果您的代码中存在问题,您将获得更好的错误处理和调用堆栈。

以这种方式构建的应用程序示例是 Hello World 应用程序 link。实际上,与我在上面链接的构建的 Cesium Viewer 应用程序在大小上没有太大差异,但那是因为它们本质上是相同的应用程序,以两种不同的方式构建。

所以这个答案最终比我想要的要长很多,但是 Web 开发是多种多样的,Cesium 试图尽最大努力支持它所有不同的方法。 Cesium 本身也非常雄心勃勃,因此我们必须克服许多其他项目从未遇到过的障碍。绝对有改进的余地,但我们竭尽全力确保 Cesium 在提供其所具有的功能的同时尽可能轻。我认为在 2.0 版本中我们可能会更进一步并尝试使事情更加模块化。

希望这能回答您的问题和疑虑。