当前位置:   article > 正文

vue中安装使用cesium,亲测版_vue-cli-plugin-cesium

vue-cli-plugin-cesium

前提:

最近想写一个自己关于cesium的demo库,发现网上用法很多,加在自己项目中却各种不行,最后选择了最方便的vue-cli-plugin-cesium

vue-cli-plugin-cesium

专门为脚手架vue-cli3.0和2.0打造的针对Cesium的VueCli扩展插件,自动化包括:

  1. 自动扩展 VueCLI 中 Cesium 相关的 webpack 配置

  2. 添加一个 cesium 别名,以便我们在项目中轻松的引入 Cesium 文件资源
    使 Cesium 对象实例可在每个 Vue 模块中使用而无须 import 引入
    使 webpack 可正常打包 Cesium
    允许 webpack 友好地在 Cesium 中使用 require,解决 require 引入警告
    开发环境生成 sourcemap,生产环境取消 sourcemap
    生产环境抽取公共模块执行压缩
    生产环境 loader 切换到优化模式

  3. 自动在全局 main.js 中引入Widgets.css,可选

  4. 自动在 components/ 文件夹下生成示例文件,可选

安装步骤:

使用方式1:

推荐使用 vue add 这种方式安装,一步到位,简单便捷
vue add vue-cli-plugin-cesium
// 非全局安装的vue-cli可以
npx vue add vue-cli-plugin-cesium
  • 1
  • 2
  • 3
  • 4

使用方式2:

首先安装 vue-cli-plugin-cesium 插件,推荐使用 yarn 安装,因为它更简洁
// npm
npm install --save-dev vue-cli-plugin-cesium
// yarn
yarn add vue-cli-plugin-cesium
复制代码
安装完成后我们要使用 vue invoke 来初始化这个插件
vue invoke vue-cli-plugin-cesium
// 非全局安装的vue-cli可以
npx vue invoke vue-cli-plugin-cesium
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

安装过程中出现的3个问题:
(1)版本选择最新版本
(2)是否全局引入样式,该操作将自动在main.js引入widgets.css? yes
(3)是否添加示例组件到项目components目录? yes

出现问题:

/node_modules/cesium/Source/ThirdParty/zip.js" 这个文件不能打包
解决办法:package.json中"dependencies": { "cesium": "1.80.0" }版本切换为1.80.0,目前1.85.0会报错
  • 1
  • 2

配上vue.config.js

// vue.config.js
const CopyWebpackPlugin = require("copy-webpack-plugin");
const webpack = require("webpack");
const path = require("path");

let cesiumSource = "./node_modules/cesium/Source";
let cesiumWorkers = "../Build/Cesium/Workers";

module.exports = {
  // 基本路径
  publicPath: "./",
  // 输出文件目录
  outputDir: "dist",
  // eslint-loader 是否在保存的时候检查
  lintOnSave: false,
  // webpack-dev-server 相关配置
  devServer: {

   open: process.platform === "darwin",
    host: "0.0.0.0",
    port: 8082,
    https: false,
    hotOnly: false
  },
  configureWebpack: {

   output: { sourcePrefix: " " },
   amd: { toUrlUndefined: true },
   resolve: {
   	alias: {
        vue$: "vue/dist/vue.esm.js",
        "@": path.resolve("src"),
        cesium: path.resolve(__dirname, cesiumSource)
      }
   },
   plugins: [
      new CopyWebpackPlugin([
        {
          from: path.join(cesiumSource, cesiumWorkers), to: "Workers"
        }
      ]),
      new CopyWebpackPlugin([
        {
          from: path.join(cesiumSource, "Assets"), to: "Assets"
        }
      ]),
      new CopyWebpackPlugin([
        {
          from: path.join(cesiumSource, "Widgets"), to: "Widgets"
        }
      ]),
      new CopyWebpackPlugin([
        {

          from: path.join(cesiumSource, "ThirdParty/Workers"),
          to: "ThirdParty/Workers"
        }
      ]),
      new webpack.DefinePlugin({
		CESIUM_BASE_URL: JSON.stringify("./")
      })
    ],
    module: {

      //解决Critical dependency: require function is
      // used in a way in which dependencies cannot be statically extracted的问题
      unknownContextCritical: false
    }
  },
  chainWebpack: config => {
    const oneOfsMap = config.module.rule('scss').oneOfs.store
    oneOfsMap.forEach(item => {
      item
        .use('sass-resources-loader')
        .loader('sass-resources-loader')
        .options({
          // Provide path to the file with resources
          // 要公用的scss的路径
          resources: './src/assets/css/global.scss'
        })
        .end()
    })
  },
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84

可以直接引入我的vue.config.js,显示插件未安装时,只需要删除依赖包,直接yarn重新下载依赖即可

最后贴上我的页面使用代码:

<template>
  <div class="map-box">
    <div id="cesiumContainer"></div>
  </div>
</template>

<script> 
export default {
  name: "", 
  mounted() {
    // var viewer = new Cesium.CesiumWidget('cesiumContainer')

    // eslint-disable-next-line no-undef
    var viewer = new Cesium.Viewer("cesiumContainer");
    
    // eslint-disable-next-line no-console
    console.log(viewer)
  }
};
</script> 
<style scoped>
  .map-box{
    width: 100%;
    height: 100%;
  }
  #cesiumContainer{
    width: 100%;
    height: 100%;
  }
</style>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

完整使用代码:

<template>
  <div class="cc-model-move-">
    <cc-header :headtitle="'ModelMove(模型移动)'" />
    <cc-scroll>
      <div class="map-box">
        <div id="cesiumContainer"></div>
      </div>
      <!-- <CesiumViewer /> -->
    </cc-scroll>
  </div>
</template>
<script>
const COMPONENT_NAME = "dialog-from";
// import * as Cesium from "cesium";
// import "cesium/Build/Cesium/Widgets/widgets.css";
// import CesiumViewer from '../../components/CesiumExample/No01-init'
import ccHeader from "../../components/cc-header/cc-header.vue";
import ccScroll from "../../components/cc-scroll/cc-scroll.vue";
export default {
  name: COMPONENT_NAME,
  components: {
    ccHeader,
    ccScroll,
    // CesiumViewer
  },
  props: {},
  data() {
    return {};
  },
  mounted() {
    this.initView();
  },
  methods: {
    initView() {
      // var viewer = new Cesium.Viewer("cesiumContainer")
      // console.log(viewer, "viewer");
      const vmodels = Cesium.createDefaultImageryProviderViewModels()
      var token = "0b018552994f71a9467d24461a8f8238";
      Cesium.Ion.defaultAccessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIzZjQ0Mjg3Yy05ZDcxLTQyZDAtYTY3Yy03YmI0MDM3MDZhMjgiLCJpZCI6NzI3NjQsImlhdCI6MTYzNjM2MDU3MH0.yEsenwMWNDoP9-4CoT77mLJpJNJKtbiDSaD9jiv5O8s";
      var viewer = new Cesium.Viewer("cesiumContainer", {
        geocoder: true,
        // homeButton:视角返回初始位置
        homeButton: true,
        // sceneModePicker:选择视角的模式,分别为3d,2d,哥伦布视图
        sceneModePicker: true,
        // baseLayerPicker:图层选择器,选择要显示的地图服务和地形服务
        baseLayerPicker: true,
        // navigationHelpButton:导航帮助按钮,显示默认的地图控制帮助
        navigationHelpButton: true,
        // animation:动画器件,控制视图动画的播放速度
        animation: true,
        // creditContainer:版权显示,显示数据归属,必选
        // creditContainer: "credit",
        // timeline: 时间线设置,控制视图动画的播放速度
        timeline: true,
        // fullscreenButton: 全屏按钮
        fullscreenButton: true,
        // vrButton: vr按钮
        vrButton: true,
        imageryProviderViewModels: vmodels,
        // selectedImageryProviderViewModel: 选择基础图象层的视图模型
        selectedImageryProviderViewModel: vmodels[1],
      });
      viewer.scene.debugShowFramesPerSecond = true; // 显示帧速(fps)
    }
  }
};
</script>
<style scoped>
.map-box {
  width: 100%;
  height: 100%;
}
#cesiumContainer {
  width: 100%;
  height: 100%;
}
</style>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78

效果图:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/629743
推荐阅读
相关标签
  

闽ICP备14008679号