Cesium和umi.js框架整合记录

1,848 阅读2分钟

前言

最近在学习Cesium三维框架过程中,想把Cesium框架和umi框架相结合,在搭建过程中也遇到一些问题,下面是搭建的过程自己记录一下

安装umi

安装过程假设已经安装node环境,开始安装umi,官网地址

  • 创建项目

mkdir cesiumdemo && cd cesiumdemo

  • 通过官方工具构建项目

yarn create @umijs/umi-app

  • 安装依赖

yarn

  • 启动项目

yarn start

项目启动成功,在浏览器输入http://localhost/8000 即可看到页面

安装ceium

npm install cesium

  • 项目整体结构图

image.png

  • 配置环境

1.在工程目录下新建public文件夹,用于存放cesium的静态资源文件。 将 node_modules\cesium\Build\Cesium 路径下的Cesium文件夹复制值新建的public文件夹中,如下图

image.png

2.在umi配置文件umirc.ts添加以下信息

const cesiumSource = 'node_modules/cesium/Source';
const cesiumWorkers = '../Build/Cesium/Workers';
const path = require('path');

#defineConfig 中添加copy对象
 copy: [
    { from: path.join(cesiumSource, cesiumWorkers), to: 'Cesium/Workers' },
    { from: path.join(cesiumSource, 'Assets'), to: 'Cesium/Assets' },
    { from: path.join(cesiumSource, 'Widgets'), to: 'Cesium/Widgets' },
  ],

3.新建场景容器组件 在组件中引入

import * as Cesium from 'cesium';
import 'cesium/Build/Cesium/Widgets/widgets.css';

#这里配置的是刚才拷贝至public中的Cesium静态文件目录
window.CESIUM_BASE_URL = '../Cesium/';

以上配置已经完成 4.附上页面完整代码

import styles from './index.less';
import * as Cesium from 'cesium';
import 'cesium/Build/Cesium/Widgets/widgets.css';
import { useEffect, useState } from 'react';
import { Button } from 'antd';
import ToolBar from '../ToolBar';
import LongLatInfo from '../LongLatInfo';

window.CESIUM_BASE_URL = '../Cesium/';

export default function CesiumView() {
  const [viewer, setViewer] = useState(null as any);
  useEffect(() => {
    let config = {
      geocoder: false, // 位置查找工具
      homeButton: true, // 视角返回初始位置
      sceneModePicker: true, // 选择视角的模式(球体、平铺、斜视平铺)
      baseLayerPicker: false, // 图层选择器(地形影像服务)
      navigationHelpButton: true, // 导航帮助(手势,鼠标)
      animation: false, // 左下角仪表盘(动画器件)
      timeline: false, // 底部时间线
      fullscreenButton: true, // 全屏
      vrButton: true, // VR
    };

    const Viewer: any = new Cesium.Viewer('cesiumContainer', config);
    Viewer.scene.globe.depthTestAgainstTerrain = true;

    Viewer._cesiumWidget._creditContainer.style.display = 'none';
    setViewer(Viewer);
  }, []);

  return (
    <>
      <div id="cesiumContainer" className={styles.cesiumContainer}></div>
      {viewer && <LongLatInfo viewer={viewer} />}
    </>
  );
}

5.刷新页面,即可看见三维地图

image.png 以上简单配置完成