Cesium 如何成功离线使用

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

  • 12
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值