Cesium 如何成功离线使用

最近需要使用cesium这个开源三维地球和地图的javascript库。下载好cesium的相关文件(cesium.js,widgets.css等),下载后的目录结构如下图:

Cesium 如何成功离线使用

下面介绍如何让cesium在断开网络的情况下可以成功启动出现三维球体。cesium的源码中有几处地方是在默认情况下会向cesium ion服务发起请求获取数据。如果在没有网络的情况下,则会报如下图异常,导致地图无法成功显示。

Cesium 如何成功离线使用

这里我们就发现cesium在请求一个服务连接失败了。跟着关键字"v1/assets/"在源码中查看,可以发现到底是哪里的函数定义的请求。

找到下图的位置,发现这里就是构造请求,发起请求的地方。属于_createEndpointResource函数。

Cesium 如何成功离线使用

接着通过“_createEndpointResource”找到调用该函数的地方

Cesium 如何成功离线使用

其中一处可以看到代码是被定义在fromAssetId中。我们一层一层往上查询,找到主要有以下两个函数中有调用该方法

Cesium 如何成功离线使用

Cesium 如何成功离线使用

所以我们要避免调用这些函数。上面的第一报错就是我在代码中使用了createWorldTerrain函数。所以需要去掉或者注释掉该代码。

Cesium 如何成功离线使用

这时候还是存在另外一个错误,也就是还是有一处地方未发现。另外一个错误主要还是在上面通过“_createEndpointResource”找到,在function IonImageryProvider(options)里面有调用

Cesium 如何成功离线使用

Cesium 如何成功离线使用

而通过IonImageryProvider仔细查询可以找到在createDefaultImageryProviderViewModels函数有使用。这个函数也是最常见的一个创建默认图层的方法,将里面的所有providerViewModels.push代码注释掉或者去掉,返回空的providerViewModels

Cesium 如何成功离线使用

注释掉这个还不行,还需注意一处地方。就是createWorldImagery方法。这个方法通过创建IonImageryProvider对象也会调用ion服务请求而导致异常

Cesium 如何成功离线使用

Cesium 如何成功离线使用

在上图代码处可以知道,在初始化的时候,如果我们没有自己传入一个imageryProvider对象。那么会自动调用createWorldImagery方法。所以也就产生第二个错误了。

在我们初始化时,定义一个默认的imageProvider对象,如下图

Cesium 如何成功离线使用

最终成功出现三维地球,效果图如下:

Cesium 如何成功离线使用

离线的环境搭建好后,便可以尝试自己加载离线发布的地图图层和模型数据了。