136 lines
2.8 KiB
Markdown
136 lines
2.8 KiB
Markdown
|
---
|
|||
|
title: 使用npm方式(vue-cli)
|
|||
|
author: ac
|
|||
|
date: 2022-01-14
|
|||
|
tags:
|
|||
|
- CesiumJS
|
|||
|
categories:
|
|||
|
- GIS
|
|||
|
---
|
|||
|
|
|||
|
> 在vue项目中使用npm的方式安装cesium
|
|||
|
|
|||
|
### 1. 创建vue项目
|
|||
|
|
|||
|
```javascript
|
|||
|
//安装vue-cli脚手架
|
|||
|
npm install -g @vue/cli
|
|||
|
|
|||
|
//创建learning-cesium项目
|
|||
|
vue create learning-cesium
|
|||
|
```
|
|||
|
|
|||
|
### 2. 安装Cesium
|
|||
|
|
|||
|
```javascript
|
|||
|
npm i cesium
|
|||
|
```
|
|||
|
|
|||
|
### 3. 配置Cesium
|
|||
|
|
|||
|
先将下列资源拷贝一份到 `public` 文件下。
|
|||
|
|
|||
|
- `node_modules/cesium/Build/Cesium/Workers`
|
|||
|
- `node_modules/cesium/Build/Cesium/ThirdParty`
|
|||
|
- `node_modules/cesium/Build/Cesium/Assets`
|
|||
|
- `node_modules/cesium/Build/Cesium/Widgets`
|
|||
|
|
|||
|
这里为了方便管理,新建了一个名为`cesiumjs`的文件夹,用于存放上面的资源:
|
|||
|
|
|||
|

|
|||
|
|
|||
|
在入口文件 `main.js` 中配置cesium的静态资源路径:
|
|||
|
|
|||
|
```javascript
|
|||
|
import Vue from 'vue'
|
|||
|
import App from './App.vue'
|
|||
|
import 'cesium/Build/Cesium/Widgets/widgets.css'
|
|||
|
|
|||
|
Vue.config.productionTip = false
|
|||
|
window.CESIUM_BASE_URL = '/cesiumjs'
|
|||
|
|
|||
|
new Vue({
|
|||
|
render: h => h(App)
|
|||
|
}).$mount('#app')
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
|
|||
|
在 `components`文件夹下创建 `CesiumView.vue`组件:
|
|||
|
|
|||
|
```javascript
|
|||
|
<template>
|
|||
|
<div id="cesiumContainer"></div>
|
|||
|
</template>
|
|||
|
|
|||
|
<script>
|
|||
|
import * as Cesium from 'cesium'
|
|||
|
export default {
|
|||
|
methods: {
|
|||
|
initCesium () {
|
|||
|
Cesium.Ion.defaultAccessToken = 'your_access_token'
|
|||
|
|
|||
|
// Initialize the Cesium Viewer in the HTML element with the "cesiumContainer" ID.
|
|||
|
const viewer = new Cesium.Viewer('cesiumContainer', {
|
|||
|
terrainProvider: Cesium.createWorldTerrain()
|
|||
|
})
|
|||
|
|
|||
|
// Fly the camera to San Francisco at the given longitude, latitude, and height.
|
|||
|
viewer.camera.flyTo({
|
|||
|
destination: Cesium.Cartesian3.fromDegrees(-122.4175, 37.655, 400),
|
|||
|
orientation: {
|
|||
|
heading: Cesium.Math.toRadians(0.0),
|
|||
|
pitch: Cesium.Math.toRadians(-15.0)
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
},
|
|||
|
mounted () {
|
|||
|
this.initCesium()
|
|||
|
}
|
|||
|
}
|
|||
|
</script>
|
|||
|
<style scoped></style>
|
|||
|
```
|
|||
|
|
|||
|
在App.vue组件中将helloWorld.vue组件去掉,换成 `CesiumView.vue` 组件。
|
|||
|
|
|||
|
```javascript
|
|||
|
<template>
|
|||
|
<div id="app">
|
|||
|
<!-- <img alt="Vue logo" src="./assets/logo.png"> -->
|
|||
|
<!-- <HelloWorld msg="Welcome to Your Vue.js App"/> -->
|
|||
|
<CesiumView></CesiumView>
|
|||
|
</div>
|
|||
|
</template>
|
|||
|
|
|||
|
<script>
|
|||
|
// import HelloWorld from './components/HelloWorld.vue'
|
|||
|
import CesiumView from '@/components/CesiumView.vue'
|
|||
|
export default {
|
|||
|
name: 'App',
|
|||
|
components: {
|
|||
|
// HelloWorld,
|
|||
|
CesiumView
|
|||
|
}
|
|||
|
}
|
|||
|
</script>
|
|||
|
```
|
|||
|
|
|||
|
### 4.遇到的问题
|
|||
|
|
|||
|
- Ceisum的样式文件引入失败。`Module not found: Error: Package path ./Build/Cesium/Widgets/widgets.css is not exported from package`
|
|||
|
|
|||
|
解决方法:
|
|||
|
|
|||
|
1、选择直接在项目的index.html中采用`link`标签引入
|
|||
|
|
|||
|
```html
|
|||
|
<link rel="stylesheet" href="<%= BASE_URL %>cesiumjs/Widgets/widgets.css"/>
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|