Cesium 去掉默认瓦片和地形,解决网络不好时地图加载缓慢的问题

抽丝剥茧,找到真凶

甲方反馈地图经常出现偶发性加载缓慢的问题

我寻思在我本地开发环境很快啊,上了测试环境也没毛病,咋个部署到正式环境就地图慢了?

经过排查发现每次地图加载缓慢时 endpoint 接口都在报错(控制台也提示 net::ERR_CONNECTION_TIMED_OUT),并且百度也无法访问(甲方项目部署在内网,访问公网不太流畅)

破案了!罪魁祸首就是这两个接口请求在报错(图片无错误是因为我网络好,这里假装它在报错)

https://api.cesium.com/v1/assets/1/endpoint?access_token="你的token" https://api.cesium.com/v1/assets/2/endpoint?access_token="你的token"

这两个接口请求分别是加载 cesium 默认的地形数据和地图瓦片(其中 assets/1 是地形,assets/2 是瓦片)由于 cesium 服务器在国外,所以网络波动等原因会导致访问不稳定,从而影响地图加载速度

哪怕你是调用了第三方的地图瓦片,比如天地图瓦片服务,如果网络不稳定也会出现此错误,它会阻塞地图的正常加载

要想彻底解决只有将它禁用

禁用 cesium 默认地图瓦片

默认地图瓦片默认是启用的,需要手动禁用

arduino 复制代码
const viewer = new Cesium.Viewer('CesiumViewer', {
  ...
  imageryProvider: false // 不加载默认底图
  ...
})

我们来测试下效果,这里放图片(算了不放了,节约文章空间)

禁用 cesium 默认地形数据

地形默认是不启用的,如果你自己启动了,把它注释了就可以了

arduino 复制代码
const viewer = new Cesium.Viewer('CesiumViewer', {
  ...
  terrain: Cesium.Terrain.fromWorldTerrain(), // 使用Cesium官方的地形服务 全球地形数据
  ...
})

注意:我的 Cesium 版本为 1.128,不同版本的启动地形和加载默认地图方法会不一样,请根据你项目中的版本去官方查找对应的 api 进行修改

刚接触三维地图的朋友可能会问,地形是个什么玩意?开启与关闭有何区别?这里我放两张截图来作对比(采用同样的视角)

这是加载地形的效果:可以看见,山势有明显的高低起伏

这是关闭地形的效果:可以看见,山的高度没了,地图的 3D 立体变成了二维扁平

结语

细心的朋友可能会问,既然地形对于三维地图如此重要,那么把他禁用了那岂不是效果大打折扣吗?是的,那么有什么办法,既能解决网络不好时报错,又能使地形存在呢?

办法是有的,那就是自己部署地形服务并调用,不从 cesium 官方获取地形接口即可

具体如何操作?如果有人感兴趣的话就下次再写吧

相关推荐
华仔啊9 小时前
这 10 个 Vue3 性能优化技巧很实用,但很多项目都没用上
前端·vue.js
手握风云-9 小时前
JavaEE 进阶第九期:Spring MVC - Web开发的“交通枢纽”(三)
前端·spring·java-ee
天问一10 小时前
Cesium 处理屏幕空间事件(鼠标点击、移动、滚轮)的示例
前端·javascript
@PHARAOH10 小时前
WHAT - Vercel react-best-practices 系列(五)
前端·react.js·前端框架
bjzhang7510 小时前
使用 HTML + JavaScript 实现多会议室甘特视图管理系统
前端·javascript·html
qiqiliuwu10 小时前
VUE3+TS+ElementUI项目中监测页面滚动scroll事件以及滚动高度不生效问题的解决方案(window.addEventListener)
前端·javascript·elementui·typescript·vue
LawrenceLan10 小时前
16.Flutter 零基础入门(十六):Widget 基础概念与第一个 Flutter 页面
开发语言·前端·flutter·dart
喔烨鸭10 小时前
antdv编辑表格,根据选择时间区间展示动态列
前端·vue·表格编辑
天天向上102410 小时前
el-table 解决一渲染数据页面就卡死
前端·javascript·vue.js
bjzhang7510 小时前
使用 HTML + JavaScript 实现单会议室周日历管理系统
前端·javascript·html