vue中安裝使用cesium方式(親測可用)
前提
最近想寫一個(gè)自己關(guān)于cesium的demo庫,發(fā)現(xiàn)網(wǎng)上用法很多,加在自己項(xiàng)目中卻各種不行,最后選擇了最方便的vue-cli-plugin-cesium
vue-cli-plugin-cesium
專門為腳手架vue-cli3.0和2.0打造的針對Cesium的VueCli擴(kuò)展插件,自動(dòng)化包括:
1.自動(dòng)擴(kuò)展 VueCLI 中 Cesium 相關(guān)的 webpack 配置
2.添加一個(gè) cesium 別名,以便我們在項(xiàng)目中輕松的引入 Cesium 文件資源
- 使 Cesium 對象實(shí)例可在每個(gè) Vue 模塊中使用而無須 import 引入
- 使 webpack 可正常打包 Cesium
- 允許 webpack 友好地在 Cesium 中使用 require,解決 require 引入警告
- 開發(fā)環(huán)境生成 sourcemap,生產(chǎn)環(huán)境取消 sourcemap
- 生產(chǎn)環(huán)境抽取公共模塊執(zhí)行壓縮
- 生產(chǎn)環(huán)境 loader 切換到優(yōu)化模式
3.自動(dòng)在全局 main.js 中引入Widgets.css,可選
4.自動(dòng)在 components/ 文件夾下生成示例文件,可選
自動(dòng)擴(kuò)展 VueCLI 中 Cesium 相關(guān)的 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 安裝,因?yàn)樗啙? // npm npm install --save-dev vue-cli-plugin-cesium // yarn yarn add vue-cli-plugin-cesium 復(fù)制代碼 安裝完成后我們要使用 vue invoke 來初始化這個(gè)插件 vue invoke vue-cli-plugin-cesium // 非全局安裝的vue-cli可以 npx vue invoke vue-cli-plugin-cesium
安裝過程中出現(xiàn)的3個(gè)問題:
- (1)版本選擇最新版本
- (2)是否全局引入樣式,該操作將自動(dòng)在main.js引入widgets.css? yes
- (3)是否添加示例組件到項(xiàng)目components目錄? yes
出現(xiàn)問題
/node_modules/cesium/Source/ThirdParty/zip.js" 這個(gè)文件不能打包
解決辦法:package.json中"dependencies": { "cesium": "1.80.0" }版本切換為1.80.0,目前1.85.0會(huì)報(bào)錯(cuò)
配上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 是否在保存的時(shí)候檢查
lintOnSave: false,
// webpack-dev-server 相關(guān)配置
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,顯示插件未安裝時(shí),只需要?jiǎng)h除依賴包,直接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(模型移動(dòng))'" />
<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:圖層選擇器,選擇要顯示的地圖服務(wù)和地形服務(wù)
baseLayerPicker: true,
// navigationHelpButton:導(dǎo)航幫助按鈕,顯示默認(rèn)的地圖控制幫助
navigationHelpButton: true,
// animation:動(dòng)畫器件,控制視圖動(dòng)畫的播放速度
animation: true,
// creditContainer:版權(quán)顯示,顯示數(shù)據(jù)歸屬,必選
// creditContainer: "credit",
// timeline: 時(shí)間線設(shè)置,控制視圖動(dòng)畫的播放速度
timeline: true,
// fullscreenButton: 全屏按鈕
fullscreenButton: true,
// vrButton: vr按鈕
vrButton: true,
imageryProviderViewModels: vmodels,
// selectedImageryProviderViewModel: 選擇基礎(chǔ)圖象層的視圖模型
selectedImageryProviderViewModel: vmodels[1],
});
viewer.scene.debugShowFramesPerSecond = true; // 顯示幀速(fps)
}
}
};
</script>
<style scoped>
.map-box {
width: 100%;
height: 100%;
}
#cesiumContainer {
width: 100%;
height: 100%;
}
</style>
效果圖:

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- vue中使用Cesium加載shp文件、wms服務(wù)、WMTS服務(wù)問題
- Vue2中配置Cesium全過程
- cesium開發(fā)之如何在vue項(xiàng)目中使用cesium,使用離線地圖資源
- 使用開源Cesium+Vue實(shí)現(xiàn)傾斜攝影三維展示功能
- vue2.0項(xiàng)目集成Cesium的實(shí)現(xiàn)方法
- vue實(shí)現(xiàn)滾動(dòng)條到頂部或者到指定位置
- Vue列表如何實(shí)現(xiàn)滾動(dòng)到指定位置樣式改變效果
- vue keep-alive列表頁緩存 詳情頁返回上一頁不刷新,定位到之前位置
- vue?cesium加載點(diǎn)與定位到指定位置的實(shí)現(xiàn)方法
相關(guān)文章
Vue?3?使用moment設(shè)置顯示時(shí)間格式的問題及解決方法
在Vue?3中,因?yàn)檫^濾器(filter)已經(jīng)被廢棄,取而代之的是全局方法(global?method),本文給大家介紹Vue?3?使用moment設(shè)置顯示時(shí)間格式的問題及解決方法,感興趣的朋友一起看看吧2023-12-12
element-ui配合node實(shí)現(xiàn)自定義上傳文件方式
這篇文章主要介紹了element-ui配合node實(shí)現(xiàn)自定義上傳文件方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
vue+egg+jwt實(shí)現(xiàn)登錄驗(yàn)證的示例代碼
這篇文章主要介紹了vue+egg+jwt實(shí)現(xiàn)登錄驗(yàn)證的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
vue實(shí)現(xiàn)的上傳圖片到數(shù)據(jù)庫并顯示到頁面功能示例
這篇文章主要介紹了vue實(shí)現(xiàn)的上傳圖片到數(shù)據(jù)庫并顯示到頁面功能,結(jié)合實(shí)例形式分析了基于vue.js的數(shù)據(jù)庫操作及頁面圖片顯示相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
詳解Vue3.0中ElementPlus<input輸入框自動(dòng)獲取焦點(diǎn)>
這篇文章主要給大家介紹了關(guān)于Vue3.0中ElementPlus<input輸入框自動(dòng)獲取焦點(diǎn)>的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用vue3.0具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-04-04
Vue+webpack+Element 兼容問題總結(jié)(小結(jié))
這篇文章主要介紹了Vue+webpack+Element 兼容問題總結(jié)(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08
vue實(shí)現(xiàn)驗(yàn)證用戶名是否可用
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)驗(yàn)證用戶名是否可用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-01-01

