(一)vue3+vite+cesium部署、控件隐藏、GeoServer安装部署、加载GeoServer服务遇到的跨域问题

本文主要是记载一下在学习中遇到的问题以及解决。

一、创建项目

在目标文件夹中,打开命令窗口,输入:

pnpm create vue

按照以下进行配置:

关闭shell窗口,将刚创建的项目拖入VScode中打开,同时打开命令窗口,输入pnpm dev,启动项,查看项目是否创建成功。

二、环境同步

  1. 安装插件 ESlint,开启保存自动修复,若已安装,就跳过。
  2. 禁用插件 Prettier,若未安装就不管,安装了就禁用。
  3. 将下面代码在设置中对照修改
// ESlint插件 + Vscode配置 实现自动格式化修复
"editor.codeActionsOnSave": {
    "source.fixAll": true
},
"editor.formatOnSave": false,

配置文件 .eslintrc.cjs

  1. prettier 风格配置 https://prettier.io

    1. 单引号

    2. 不使用分号

    3. 每行宽度至多80字符

    4. 不加对象|数组最后逗号

    5. 换行符号不限制(win mac 不一致)

  2. vue组件名称多单词组成(忽略index.vue)

  3. 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 配置

  1. git初始化 git init

  2. 初始化 husky 工具配置 Husky,在git bash中输入:

pnpm dlx husky-init && pnpm install

 3.修改 .husky/pre-commit 文件

pnpm lint

lint-staged 配置

  1. 安装
pnpm i lint-staged -D
  1. 配置 package.json
{
  // ... 省略 ...
  "lint-staged": {
    "*.{js,ts,vue}": [
      "eslint --fix"
    ]
  }
}

{
  "scripts": {
    // ... 省略 ...
    "lint-staged": "lint-staged"
  }
}
  1. 修改 .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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值