本文主要是记载一下在学习中遇到的问题以及解决。
一、创建项目
在目标文件夹中,打开命令窗口,输入:
pnpm create vue
按照以下进行配置:
关闭shell窗口,将刚创建的项目拖入VScode中打开,同时打开命令窗口,输入pnpm dev,启动项,查看项目是否创建成功。
二、环境同步
- 安装插件 ESlint,开启保存自动修复,若已安装,就跳过。
- 禁用插件 Prettier,若未安装就不管,安装了就禁用。
- 将下面代码在设置中对照修改
// ESlint插件 + Vscode配置 实现自动格式化修复
"editor.codeActionsOnSave": {
"source.fixAll": true
},
"editor.formatOnSave": false,
配置文件 .eslintrc.cjs
-
prettier 风格配置 https://prettier.io
-
单引号
-
不使用分号
-
每行宽度至多80字符
-
不加对象|数组最后逗号
-
换行符号不限制(win mac 不一致)
-
-
vue组件名称多单词组成(忽略index.vue)
-
props解构(关闭)
rules: {
'prettier/prettier': [
'warn',
{
singleQuote: true, // 单引号
semi: false, // 无分号
printWidth: 80, // 每行宽度至多80字符
trailingComma: 'none', // 不加对象|数组最后逗号
endOfLine: 'auto' // 换行符号不限制(
}
],
'vue/multi-word-component-names': [
'warn',
{
ignores: ['index'] // vue组件名称多单词组成(忽略index.vue)
}
],
'vue/no-setup-props-destructure': ['off'], // 关闭 props 解构的校验
}
基于 husky 的代码检查工作流
husky 是一个 git hooks 工具 ( git的钩子工具,可以在特定时机执行特定的命令 )
husky 配置
-
git初始化 git init
-
初始化 husky 工具配置 Husky,在git bash中输入:
pnpm dlx husky-init && pnpm install
3.修改 .husky/pre-commit 文件
pnpm lint
lint-staged 配置
- 安装
pnpm i lint-staged -D
- 配置
package.json
{
// ... 省略 ...
"lint-staged": {
"*.{js,ts,vue}": [
"eslint --fix"
]
}
}
{
"scripts": {
// ... 省略 ...
"lint-staged": "lint-staged"
}
}
- 修改 .husky/pre-commit 文件
pnpm lint-staged
三、Cesium安装
pnpm i cesium vite-plugin-cesium vite -D
//配置vite.config.js
//vite.config.js中配置如下:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import cesium from 'vite-plugin-cesium'
export default defineConfig({
plugins: [vue(),cesium()]
});
四、加入相应代码,测试运行
<script setup>
import * as Cesium from 'cesium'
import { onMounted } from 'vue'
onMounted(() => {
const viewer = new Cesium.Viewer('cesiumContainer', {
infoBox: false // 禁用沙箱,解决控制台报错
})
viewer.entities.add({
name: 'Hello World',
position: Cesium.Cartesian3.fromDegrees(105.0, 30.0, 10000000.0),
point: {
pixelSize: 10,
color: Cesium.Color.RED
}
})
})
</script>
<template>
<div id="cesiumContainer"></div>
</template>
五、Cesium默认设置关闭
Cesium.Ion.defaultAccessToken = cesiumKey // 设置cesium的access_token
// 初始化cesium
const viewer = new Cesium.Viewer(cesiumContainer.value, {
infoBox: false, // 关闭cesium右下角的信息框
animation: false, // 隐藏动画控件
baseLayerPicker: false, // 隐藏图层选择控件
fullscreenButton: false, // 隐藏全屏按钮
vrButton: false, // 隐藏VR按钮,默认false
geocoder: false, // 隐藏地名查找控件
homeButton: false, // 隐藏Home按钮
sceneModePicker: false, // 隐藏场景模式选择控件
selectionIndicator: true, // 显示实体对象选择框,默认true
timeline: false, // 隐藏时间线控件
navigationHelpButton: false, // 隐藏帮助按钮
scene3DOnly: true, // 每个几何实例将只在3D中呈现,以节省GPU内存
shouldAnimate: true, // 开启动画自动播放
sceneMode: 3, // 初始场景模式 1:2D 2:2D循环 3:3D,默认3
requestRenderMode: true, // 减少Cesium渲染新帧总时间并减少Cesium在应用程序中总体CPU使用率
// 如场景中的元素没有随仿真时间变化,请考虑将设置maximumRenderTimeChange为较高的值,例如Infinity
maximumRenderTimeChange: Infinity
})
六、安装GeoServer,以及加载数据,网上资源很多不在重复。
1.JDK下载:一定要看看GeoServer对应的JDK版本,版本不对,服务启动时有问题的。下载最新的JDK版本,GeoServer能启动,但是在图层预览时不能显示。JDK版本过低会导致GeoServer无法启动,来回安装后,导致环境变量出错,又重新设置了环境变量。我使用的最新的GeoServer2.25.0,对应的下JDK11即可。
2.跨域资源共享问题:
解决办法,参考这大佬,可以解决不同版本的问题:geoserver完美跨域解决方式(2024版) - 知乎 (zhihu.com)
解决了:
附上代码
<!--
* @Author: geo_yanglei ylshishiqiushi@foxmail.com
* @Date: 2024-03-19 18:21:22
* @LastEditors: geo_yanglei ylshishiqiushi@foxmail.com
* @LastEditTime: 2024-03-21 16:08:57
* @FilePath: \CesiumVue3Study\src\views\CesiumMap.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template>
<div class="cesiumContainer" ref="cesiumContainer"></div>
</template>
<script setup>
import { ref, onMounted } from 'vue' // 导入vue的ref和onMounted方法
import * as Cesium from 'cesium' // 导入cesium库
const cesiumContainer = ref(null) // 定义cesiumContainer变量,类型为ref
// 定义cesium的access_token
const cesiumKey =
'你的KEY'
//天地图key
const tiandituKey = '你的KEY'
const initCesium = () => {
Cesium.Ion.defaultAccessToken = cesiumKey // 设置cesium的access_token
// 初始化cesium
const viewer = new Cesium.Viewer(cesiumContainer.value, {
infoBox: false, // 关闭cesium右下角的信息框
animation: false, // 隐藏动画控件
baseLayerPicker: false, // 隐藏图层选择控件
fullscreenButton: false, // 隐藏全屏按钮
vrButton: false, // 隐藏VR按钮,默认false
geocoder: false, // 隐藏地名查找控件
homeButton: false, // 隐藏Home按钮
sceneModePicker: false, // 隐藏场景模式选择控件
selectionIndicator: true, // 显示实体对象选择框,默认true
timeline: false, // 隐藏时间线控件
navigationHelpButton: false, // 隐藏帮助按钮
scene3DOnly: true, // 每个几何实例将只在3D中呈现,以节省GPU内存
shouldAnimate: true, // 开启动画自动播放
sceneMode: 3, // 初始场景模式 1:2D 2:2D循环 3:3D,默认3
requestRenderMode: true, // 减少Cesium渲染新帧总时间并减少Cesium在应用程序中总体CPU使用率
// 如场景中的元素没有随仿真时间变化,请考虑将设置maximumRenderTimeChange为较高的值,例如Infinity
maximumRenderTimeChange: Infinity
})
//隐藏cesium的logo
viewer.cesiumWidget.creditContainer.style.display = 'none'
//开始相机加载到成都
// viewer.camera.flyTo({
// destination: Cesium.Cartesian3.fromDegrees(104.06, 30.67, 400000),
// orientation: {
// heading: Cesium.Math.toRadians(0),
// pitch: Cesium.Math.toRadians(-90),
// roll: 0
// }
// })
//删除默认bing底图
viewer.imageryLayers.remove(viewer.imageryLayers.get(0))
//添加天地图底图
const tiandituImageryProvider = new Cesium.WebMapTileServiceImageryProvider({
url: `http://t0.tianditu.com/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=
${tiandituKey}`,
layer: 'tdtBaseMap', // 图层名
style: 'default', // 样式名
format: 'image/jpeg', // 图片格式
tileMatrixSetID: 'GoogleMapsCompatible', // 瓦片矩阵集
show: false // 不显示天地图底图
})
viewer.imageryLayers.addImageryProvider(tiandituImageryProvider)
//添加天地图注记
viewer.imageryLayers.addImageryProvider(
new Cesium.WebMapTileServiceImageryProvider({
url:
'http://t0.tianditu.com/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cia&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default.jpg' +
'&tk=' +
`${tiandituKey}`,
layer: 'tdtAnnoLayer',
style: 'default',
maximumLevel: 18, //天地图的最大缩放级别
format: 'image/jpeg',
tileMatrixSetID: 'GoogleMapsCompatible',
show: false
})
)
//加载wms服务
const wmsImageryProvider = new Cesium.WebMapServiceImageryProvider({
url: 'http://localhost:8080/geoserver/cesium/wms',
layers: 'cesium:Srtm-1_V3_dem_ql', //图层名
parameters: {
format: 'image/png', //图片格式
transparent: true, //背景透明
srs: 'EPSG:4326' //投影坐标系
}
})
viewer.imageryLayers.addImageryProvider(wmsImageryProvider)
//跳到相应坐标
viewer.camera.flyTo({
destination: Cesium.Cartesian3.fromDegrees(112.3363037109375, 22.4296875, 400000)
})
}
onMounted(() => {
// 页面加载完成后执行initCesium方法
initCesium()
})
</script>
<style scoped>
</style>