cesium(安装)

513 阅读3分钟

上文中列出了关于cesium的一些学习以及官网等很重要的链接.在学习链接中,有如何注册cesium的token的过程,此处不再赘述.以下是cesium版本1.110的安装及在页面中使用的过程.

官网中关于此过程的链接:cesium.com/learn/cesiu…

1 安装

npm install cesium

2 配置/修改cesium的文件路径

1710991974352.png

(1) 在node_modules文件夹中找到cesium文件夹,将图片中BUild/Cesium中的四个文件夹CV至public/static文件夹下. (2) vue2项目中,在vue.config.js文件中配置webpack

const cesiumSource = './node_modules/cesium/Source'
module.exports = defineConfig({
    chainWebpack: (config) => {
    config.resolve.alias.set('cesium', resolve(cesiumSource)); // 3 定义别名cesium
    config.plugin('define').tap((args) => {
      args[0]["CESIUM_BASE_URL"] =JSON.stringify('static/Cesium/')
      return args
    })
  },
  //此版本使用时需要对以下四个包进行安装及引入,否则编译时会报错:找不到以下四个包.
  configureWebpack() {
    return {
      resolve: {
        fallback: {
          http: require.resolve("stream-http"),
          https: require.resolve("https-browserify"),
          zlib: require.resolve("browserify-zlib"),
          stream: require.resolve('stream-browserify'),
        },
      },
    }
  }
})

(3) 在main.js中引入cesium

//引入cesium库
import * as Cesium from 'cesium/Cesium.js'
import 'cesium/Widgets/widgets.css'

//将cesium绑定在vue原型上,方便在页面中使用
Vue.prototype.cesium = Cesium;

3 在页面中使用

在此步骤之前,请注意:

cesium与mock.js冲突!!!

cesium与mock.js冲突!!!

cesium与mock.js冲突!!!

重要的事情说三遍.如果项目中有引入mock.js,请注释掉该引入再使用cesium.否则即使按照步骤一步一步来,页面中也无法正常加载cesium中的地球,导致页面黑暗.

注释掉mock.js后就可以在页面中正常使用了. 在需要使用cesium的文件中

<template>
  <div id="container" class="box">
    <div id="cesiumContainer"></div>
  </div>
</template>
<script>
export default{
     data() {
        return {
          _viewer:null,//加下划线定义实例对象.--vue的数据劫持与代理会降低效率,当实例对象很大时,很容易引起页面崩溃.
        };
      },
      mounted() {
        this.init();
      },
      methods:{
          init() {
            const Cesium = this.cesium;
            Cesium.Ion.defaultAccessToken = '';//此处是在cesium中注册的token
            //此处应用的是高德地图影像图.
            const baseLayer = new Cesium.ImageryLayer.fromProviderAsync(Cesium.TileMapServiceImageryProvider.fromUrl("https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}",{
                // 最小级别
                minimumLevel: 1,
                // 最大级别
                maximumLevel: 18,
                brightness:0.6,
                contrast:1.8,
                gamma:0.3,
                hue:1,
                saturation:0,
                alpha:0.3,
            }))
            this._viewer = new Cesium.Viewer('cesiumContainer',{
                orderIndependentTranslucency: true,//为true去掉地球表面的大气效果的黑圈问题
                baseLayerPicker: false, // 如果设置为false,将不会创建右上角图层按钮。
                geocoder: false, // 如果设置为false,将不会创建右上角查询(放大镜)按钮。
                navigationHelpButton: false, // 如果设置为false,则不会创建右上角帮助(问号)按钮。
                homeButton: false, // 如果设置为false,将不会创建右上角主页(房子)按钮。
                sceneModePicker: false, // 如果设置为false,将不会创建右上角投影方式控件(显示二三维切换按钮)。
                animation: false, // 如果设置为false,将不会创建左下角动画小部件。
                timeline: false, // 如果设置为false,则不会创建正下方时间轴小部件。
                fullscreenButton: false, // 如果设置为false,将不会创建右下角全屏按钮。
                scene3DOnly: true, // 为 true 时,每个几何实例将仅以3D渲染以节省GPU内存。
                shouldAnimate: false, // 默认true ,否则为 false 。此选项优先于设置 Viewer#clockViewModel 。
                // ps. Viewer#clockViewModel 是用于控制当前时间的时钟视图模型。我们这里用不到时钟,就把shouldAnimate设为false
                infoBox: false, // 是否显示点击要素之后显示的信息
                sceneMode: 3, // 初始场景模式 1 2D模式 2 2D循环模式 3 3D模式  Cesium.SceneMode
                requestRenderMode: false, // 启用请求渲染模式,不需要渲染,节约资源吧
                fullscreenElement: document.body, // 全屏时渲染的HTML元素 暂时没发现用处,虽然我关闭了全屏按钮,但是键盘按F11 浏览器也还是会进入全屏
                baseLayer: baseLayer,
                terrainProvider: new Cesium.EllipsoidTerrainProvider(), //地形图层提供者,仅baseLayerPicker设为false有意义
                showRenderLoopErrors:false,//如果设为true,将在一个HTML面板中显示错误信息
            }); 
            // 设置初始位置  Cesium.Cartesian3.fromDegrees(longitude, latitude, height, ellipsoid, result)
            const boundingSphere = new Cesium.BoundingSphere(
                Cesium.Cartesian3.fromDegrees(116.309681,39.956909),1000
            );
            // 定位到初始位置
            this._viewer.camera.flyToBoundingSphere(boundingSphere, {
                // 定位到初始位置的过渡时间,设置成0,就没有过渡,类似一个过场的动画时长
                duration: 0,
            });
            this._viewer._cesiumWidget._creditContainer.style.display = "none"; // 隐藏版权
        },
      }
}
</script> 

现在启动项目就可以在页面中看到cesium渲染出来的一个地球了.