软件教程 2025年08月6日
0 收藏 0 点赞 698 浏览 5085 个字
摘要 :

文章目录 1.安装Cesium 建议指定1.95.0版本 2.安装loader 3.安装webpack 4.vue.config.js配置 5.创建Cesium 本文主要讲解关于Cesium+vue2 环境搭步骤建相关内容,让……




  • 1.安装Cesium
    • 建议指定1.95.0版本
  • 2.安装loader
  • 3.安装webpack
  • 4.vue.config.js配置
  • 5.创建Cesium

本文主要讲解关于Cesium+vue2 环境步骤建相关内容,让我们来一起学习下吧!

1.安装Cesium

建议指定1.95.0版本

npm install cesium@1.95.0 -s

2.安装loader

npm install @open-wc/webpack-import-meta-loader

3.安装webpack

npm install copy-webpack-plugin@10.2.4

4.vue.config.js配置

\"use strict\";
const { defineConfig } = require(\"@vue/cli-service\");
const CopyWebpackPlugin = require(\"copy-webpack-plugin\");
const CompressionPlugin = require(\"compression-webpack-plugin\");

const webpack = require(\"webpack\");
const path = require(\"path\");

const cesiumSource = \"node_modules/cesium/Source\";
const cesiumWorkers = \"Workers\";
module.exports = defineConfig({
  transpileDependencies: true,
  publicPath: process.env.NODE_ENV === \"production\" ? \"/distBulletinBoard\" : \"/distBulletinBoard\",
  outputDir: \"dist\",
  // 是否开启eslint保存检测,有效值:ture | false | \'error\'
  lintOnSave: process.env.NODE_ENV === \'development\',
  productionSourceMap: false,
  // 本地服务器配置
  devServer: {
    port: 8888,
    host: \"0.0.0.0\",
    proxy: {
      [process.env.VUE_APP_BASE_API]: {
        target: \"https://kwyd.hyyun.com/community\",
        changeOrigin: true,
        ws: true,
        pathRewrite: {
          [\"^\" + process.env.VUE_APP_BASE_API]: \"\",
        },
      },
    },
  },
  configureWebpack: {
    externals: {
      cesium: \"Cesium\"
    },
    output: {
      sourcePrefix: \" \", // 让webpack 正确处理多行字符串配置 amd参数
    },
    amd: {
      toUrlUndefined: true, // webpack在cesium中能友好的使用require
    },
    resolve: {
      extensions: [\".js\", \".ts\", \".jsx\", \".tsx\", \".json\", \".vue\"],
      alias: {
        \"@\": path.resolve(\"src\"),
        cesium: path.resolve(__dirname, cesiumSource),
      },
    },
    plugins: [
      new CopyWebpackPlugin({
        patterns: [
          { from: path.join(cesiumSource, cesiumWorkers), to: \"Workers\" },
          { from: path.join(cesiumSource, \"Assets\"), to: \"Assets\" },
          { from: path.join(cesiumSource, \"Widgets\"), to: \"Widgets\" },
          {
            from: path.join(cesiumSource, \"ThirdParty/Workers\"),
            to: \"ThirdParty/Workers\",
          },
        ],
      }),
      new webpack.DefinePlugin({
        CESIUM_BASE_URL: JSON.stringify(\"./\"),
      }),
      new CompressionPlugin({
        test: /.js$|.html$|.css/,
        threshold: 10240,
        deleteOriginalAssets: false,
      }),
    ],
    module: {
      unknownContextCritical: false,
      unknownContextRegExp:
        //cesium/cesium/Source/Core/buildModuleUrl.js/,
      rules: [
        {
          test: /.js$/,
          use: {
            loader: \"@open-wc/webpack-import-meta-loader\",
          },
        },
        {
          exclude: /node_modules/,
          include: /src/,
          test: /.js$/,
          use: \"babel-loader\",
        },
      ],
    },
  }
});

5.创建Cesium

<template>
  <div class=\"commonCesium\">
    <div id=\"cesiumContainer\"></div>
  </div>
</template>

<script>
import * as Cesium from \"cesium/Cesium\";
import \"cesium/Widgets/widgets.css\";

export default {
  name: \"CommonCesium\",
  data() {
    return {
      viewer: null, // viewer对象
    };
  },
  mounted() {
    this.$nextTick(()=>{
      this.initCesium();
    })
  },
  methods: {
    initCesium() {
      // Token
      Cesium.Ion.defaultAccessToken =
        \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI4NGZjZDNmOC0zNTgwLTQxNTUtYWIxMS0zMGY5ZjVjNmU0ZjQiLCJpZCI6MTgyNzEzLCJpYXQiOjE3MDE4MjU1Mjh9.tJzjAxvinhK-2f4T3qzTjeArrzToKdWEhCegJw0zO-I\";
      // 创建Viewer对象
      this.viewer = new Cesium.Viewer(\"cesiumContainer\", {
        infoBox: false,
        animation: false, // 是否显示动画控件
        homeButton: false, // 是否显示home键
        geocoder: false, // 是否显示地名查找控件
        baseLayerPicker: false, // 是否显示图层选择控件
        timeline: false, // 是否显示时间线控件
        fullscreenButton: false, // 是否全屏显示
        sceneModePicker: false, // 是否显示投影方式控件  三维/二维
        navigationInstructionsInitiallyVisible: false,
        navigationHelpButton: false, // 是否显示帮助信息控件
        orderIndependentTranslucency: false, //设置背景透明
        shouldAnimate: true,
        scene3DOnly: false, // 每个几何实例将只能以3D渲染以节省GPU内存
        selectionIndicator: false, // 取消点击有绿框
      });
      // 多余样式隐藏
      this.viewer.cesiumWidget.creditContainer.style.display = \"none\";
      // 地形遮挡
      this.viewer.scene.globe.depthTestAgainstTerrain = false;
      // 开启抗锯齿
      this.viewer.scene.postProcessStages.fxaa.enabled = true;
      // 获取可视区域
      this.rectangle = this.viewer.camera.computeViewRectangle();
      // 转地理坐标
      // const east = Cesium.Math.toDegrees(this.rectangle.east).toFixed(6);
      // console.log(this.rectangle, east);

      // 设置初始位置(经度、纬度和高度)
      // this.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),
      //   },
      // });
      // 加载3dtiles数据
      this.loadTilesetOnlineData();
    },
    // 模型加载[在线/本地数据]
    loadTilesetOnlineData() {
      const tileset = new Cesium.Cesium3DTileset({
        // 模型要放到public目录
        url: \"3dtis/tileset.json\",
        // url: \"http://123.57.148.132/newzhsq/tileset.json\",
        maximumScreenSpaceError: 2, //最大的屏幕空间误差
        maximumNumberOfLoadedTiles: 5000, //最大加载瓦片个数
      });
      this.viewer.scene.primitives.add(tileset);
      this.viewer.flyTo(tileset);
    },
    // 模型加载[Cesium官网数据]
    loadTilesetData() {
      const cesium3DTileset = new Cesium.Cesium3DTileset({
        url: Cesium.IonResource.fromAssetId(75343),
        maximumScreenSpaceError: 2, //最大的屏幕空间误差
        maximumNumberOfLoadedTiles: 10000, //最大加载瓦片个数
      });
      const tileset = this.viewer.scene.primitives.add(cesium3DTileset);
      // 移动到建筑位置
      this.viewer.flyTo(tileset);
      const tileset3DTile = this.viewer.scene.primitives.add(tileset);
      tileset3DTile.readyPromise.then(() => {
        tileset3DTile.style = new Cesium.Cesium3DTileStyle({
          color: {
            conditions: [
              [\"${Height} >= 300\", \"rgba(67,241,30,0.8)\"],
              [\"${Height} >= 200\", \"rgba(17,131,255,0.8)\"],
              [\"${Height} >= 100\", \"rgba(241,103,32,0.8)\"],
              [\"${Height} >= 50\", \"rgba(241,160,101,0.8)\"],
              [\"${Height} >= 0\", \"rgba(240,255,0,0.8)\"],
            ],
          },
        });
      });
    },
  },
};
</script>

<style scoped lang=\"scss\">
.commonCesium {
  width: 100%;
  height: 100%;

  // 视图的大小
  #cesiumContainer {
    width: 100%;
    height: 100%;
  }
}
</style>

以上就是关于Cesium+vue2 环境搭建步骤相关的全部内容,希望对你有帮助。欢迎持续关注潘子夜个人博客(www.panziye.com),学习愉快哦!

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/6643.html

管理员

相关推荐
2025-08-06

文章目录 一、Promise基础回顾 二、Promise 与 axios 结合使用场景及方法 (一)直接返回 axios …

270
2025-08-06

文章目录 一、模块初始化时的内部机制 二、常见导出写法的差异分析 (一)写法一:module.exports…

108
2025-08-06

文章目录 一、ResizeObserver详解 (一)ResizeObserver是什么 (二)ResizeObserver的基本用法 …

684
2025-08-06

文章目录 一、前期准备工作 (一)下载相关文件 (二)安装必要工具 二、处理扣子空间生成的文件…

340
2025-08-06

文章目录 一、官方文档 二、自动解包的数据类型 ref对象:无需.value即可访问 reactive对象:保持…

371
2025-08-06

文章目录 一、Hooks的工作原理 二、在if语句中使用Hook会出什么岔子? 三、React官方的Hook使用规…

844
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号