vue中安装使用cesium方式(亲测可用)

目录
  • 前提
  • vue-cli-plugin-cesium
  • 安装步骤
  • 出现问题
  • 配上vue.config.js
  • 总结

前提

最近想写一个自己关于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/ 文件夹下生成示例文件,可选

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

安装步骤

使用方式1:

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

使用方式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

安装过程中出现的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会报错

配上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()
    })
  },
}

可以直接引入我的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>

完整使用代码:

<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>

效果图:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • vue2.0项目集成Cesium的实现方法

    安装cesium 在已有项目中执行, npm i cesium 修改配置 build/webpack.base.conf.js 1.定义 Cesium 源码路径 const cesiumSource = '../node_modules/cesium/Source' 'use strict' const path = require('path') const utils = require('./utils') const config = require('../config') const

  • vue项目中如何引入cesium

    目录 vue项目中引入cesium 安装步骤 vue项目中CDN引用cesium 总结 vue项目中引入cesium 市面上的前端框架中,Vue+Cesium 可谓是最佳搭档,一般做 Cesium B 端产品的公司都会使用 Vue,所以后续内容都将基于 Vue 通常情况下,我们要在 Vue 中使用 Cesium,首先要安装 Cesium,然后要在 vue-cli 的 webpack 配置很多东西,对一些有经验的人来说只不过麻烦些,但是对 Cesium 的初学者来说会很痛苦,因为没有使用过,也不知

  • 在vue2 中使用 tailwindcss的方法 亲测可用

    目录 1. 直接安装 2. 创建文件tailwindcss.css 3.main.js中引入 4.在项目根目录执行以下命令: 5. 测试一下 注意 : 我用我走过的坑告诉你们 , 一定要按照步骤,一步一步来 1. 直接安装 npm install -D tailwindcss@npm:@tailwindcss/postcss7-compat postcss@^7 autoprefixer@^9 2. 创建文件tailwindcss.css @import "tailwindcss/base&qu

  • Centos7安装Docker(2020最新亲测可用,直接复制粘贴即可)

    这里参考官方文档进行操作: https://docs.docker.com/engine/install/centos/ 1.卸载docker旧版本(我的centos7是新的,所以运行后不删除任何软件包) yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engi

  • Java中Https发送POST请求[亲测可用]

    1.直接建一个工具类放入即可 /** * 发送https请求共用体 */ public static JSONObject sendPost(String url,String parame,Map<String,Object> pmap) throws IOException, KeyManagementException, NoSuchAlgorithmException, NoSuchProviderException{ // 请求结果 JSONObject json = new JSO

  • vue中的proxyTable反向代理(亲测有用)

    目录 proxyTable反向代理 1.打开vue项目->config->index.js 2.打开一个vue页面 3.npm run dev 反向代理的实现原理 实现原理 程序运行过程 proxyTable反向代理 proxyTable的设置网上有的是,以前也没管过,但新公司的项目需要用到,所以就彻底研究一下,结果绕了好大的弯子! 注:每次设置完proxyTable,请一定要重启,刷新不好使   npm run dev! 开始前,请劳记上面操作,我就在这绕了很大的弯,一直以为页面刷新就行了,

  • Vue项目获取url中的参数(亲测可用)

    目录 情况一:内部页面之间互相传值 情况二:外部跳转VUE项目时自带参数 1 获取?后面的参数 2 获取不带?的URL中的参数 亲测可用,若有疑问请私信 获取url参数有两种情况: 情况一:内部页面之间互相传值 这里先讲情况一,因为同一项目内互相传值比较简单,假如要从A页面跳转到B页面,并传值.就要在A页面这么写 this.$router.push({name:"B",query:{ Id : this.tId , ... }}) 进入B页面之后,在B页面内这么写 this.Id =

  • 详解Vue项目引入CreateJS的方法(亲测可用)

    1 前 言 1.1 CreateJS介绍 CreateJS是基于HTML5开发的一套模块化的库和工具. 基于这些库,可以非常快捷地开发出基于HTML5的游戏.动画和交互应用. A suite of modular libraries and tools which work together or independently to enable rich interactive content on open web technologies via HTML5. 包含4类工具库 EaselJS

  • anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)

    1. 创建一个新的环境 打开Anaconda Navigator,找不到的win10左下角输入一下就能找到了,如下图. 这里通过列表下面的create按钮可以创建一个新的环境,这里我将新环境起名为torch,右面列表中是我安装好的包,刚创建的时候没有这么多. 2. 从pytorch官网得到获取包的命令 打开Anaconda Prompt,输入activate 刚刚创建的环境名可以切换到刚刚创建的环境.这里我用的是下面的命令,你需要根据自己创建的环境名修改相应的激活名称. activate tor

  • Tomcat部署项目的几种常见方式[亲测]

    1 /直接将web项目文件件拷贝到webapps目录中 这是最常用的方式,Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用.如果你想要修改这个默认目录,可以在conf下的server.xml文件里修改Host标签里的appBase值. 这个方法实际上和在IDE开发环境里部署项目是一样的. 用此方法的访问路径为http://localhost:8080/webname 2 /修改Server.xml文件 在conf下的server.xml文件

  • Navicat Premium 15 永久破解激活工具及安装教程(亲测可用)

    前言 Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL.SQLite.Oracle 及 PostgreSQL 资料库,让管理不同类型的资料库更加的方便. 最新版的Navicat Premium 15 已经发布了,但是此工具是收费的,学习的话买,不怎么划算,所以双手奉上白嫖版的. 页面: 下载安装包和破解工具 此处附上官网下载地址:http://www.navicat.com.cn/download/navicat-p

  • SQLyog下载、安装超详细教程(亲测永久有效)

    SQLyog 是一个易于使用的.快速而简洁的图形化管理MYSQL数据库的工具,它能够在任何地点有效地管理你的数据库. 功能: 1.快速备份和恢复数据: 2.以GRID / TEXT 格式显示结果: 3.支持客户端挑选.过滤数据: 4.批量执行很大的SQL脚本文件: 5.快速执行多重查询并能够返回每页超过1000条的记录集,而这种操作是直接生成在内存中的: 6.程序本身非常短小精悍!压缩后只有348 KB : 7.完全使用MySQL C APIs程序接口: 8.以直观的表格界面建立或编辑数据表:

随机推荐