React项目-Cesium地图初始化

一、环境描述

        React集成Cesium地图需要注意软件兼容性问题,可以从官网或者百度文章查询React和Cesium地图的版本兼容性,

1、软件版本

        (1)create-react-app创建项目;

        (2)React版本:18.3.1;

        (3)Cesium版本:1.62.0;

        (4)copy-webpack-plugin:5.1.2;

        (5)Node版本:14.21.3

二、创建React项目

1、创建项目
npx create-react-app react-test
2、启动项目
cd react-test
npm run start
3、安装Cesium
npm i cesium@1.62.0 --save
4、安装copy-webpack-plugin
npm i copy-webpack-plugin@5 -D
5、运行npm run eject

        Cesium静态资源需要webpack配置,执行npm run eject可以生成webpack配置,运行前先查看当前git版本是否有提交,如果未提交,需要先本地提交git,否则npm run eject会执行失败。

(1)提交git(如果版本已经提交,无需执行

git add .
git commit -m "React Init"

(2)执行npm run eject

npm run eject// 执行成功后,生成的文件列表
// config/
//    jest/
//    webpack/
//    env.js
//    getHttpsConfig.js
//    modules.js
//    paths.js
//    webpack.config.js
//    webpackDevServer.config.js// scripts/
//    build.js
//    start.js
//    test.js

三、webpack配置

1、修改webpack.config.js文件
// 1、引入copy-webpack-plugin
const CopyWebpackPlugin = require('copy-webpack-plugin');// 2、引入Cesium静态资源
const cesiumSource = "node_modules/cesium/Source";
const cesiumWorkers = '../Build/Cesium/Workers';
const fileFolder = "src";// 3、在return下的output对象中添加配置
sourcePrefix: '',// 4、在return下的output对象后添加配置(与output对象同级)
amd: {toUrlUndefined: true
},// 5、在return下的resolve对象下的alias对象中添加配置
cesium: path.resolve(cesiumSource),// 6、在return下的module对象中添加配置
unknownContextCritical: false,// 7、在return下的plugins数组中添加配置
new CopyWebpackPlugin([{from: path.join(cesiumSource, cesiumWorkers),to: "Workers"
}]),
new CopyWebpackPlugin([{from: path.join(cesiumSource, 'Assets'),to: 'Assets'
}]),
new CopyWebpackPlugin([{from: path.join(cesiumSource, 'Widgets'),to: 'Widgets'
}]),new CopyWebpackPlugin([{ from: path.join(fileFolder, 'static'), to: 'Static' }
]),
new webpack.DefinePlugin({CESIUM_BASE_URL: JSON.stringify('')
}),

四、项目配置

1、路由配置

(1)路由文件配置

        在src/创建一个名为router.js的文件(文件名称和位置可以自己规划)

// 引入组件
import App from "./App";
import CesiumMapFunction from './components/CesiumMapFunction';
import CesiumMapClass from './components/CesiumMapClass';import { createBrowserRouter } from "react-router-dom";const router = createBrowserRouter([{path: "/",element: <App />,children: [{path: "",element: <CesiumMapFunction />},{path: "/cesiumFunction",element: <CesiumMapFunction />},{path: "/cesiumClass",element: <CesiumMapClass />}]},
])export default router

(2)index.js文件配置

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { RouterProvider } from 'react-router-dom';
import router from './router';const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(// <React.StrictMode> // 注意注释React严格模式<RouterProvider router={router}><App /></RouterProvider>// </React.StrictMode>
);reportWebVitals();

(3)App.js文件配置

import './App.css';
import Header from './components/Header';
import { Outlet, useNavigate } from 'react-router-dom';
import { useState } from 'react';function App() {const [isActive, setIsActive] = useState(1)const navigate = useNavigate()function clickMenu(path, menuId) {if (isActive === menuId) {return}// 保存当前点击的菜单IDsetIsActive(menuId)// 跳转路由navigate(path)}return (<div className="App"><Header clickMenu={clickMenu} active={isActive}></Header><div className="content"><Outlet /></div></div>);
}export default App;
2、地图组件配置

 (1)Header.js配置

// css文件
import "./css/Header.css"// 数据来源
const menuData = [{id: 1,label: "函数组件Cesium",path: "/cesiumFunction"},{id: 2,label: "类组件Cesium",path: "/cesiumClass"}
]// 数据过滤
function FilterData({ clickList, isActive }) {return menuData.map(row => {return (<li className={isActive === row.id ? 'isActive' : ''} onClick={() => { clickList(row.path, row.id) }} key={row.id} >{row.label}</li >)})
}// 渲染页面
export default function Header({ clickMenu, active }) {return (<ul className="menuList"><FilterData clickList={clickMenu} isActive={active} /></ul>)
}

(2)函数组件(CesiumMapFunction.js)

import Cesium from 'cesium/Cesium'
import 'cesium/Widgets/widgets.css'
import { useEffect } from "react";
import "./css/CesiumMap.css"export default function CesiumMapFunction() {useEffect(() => {Cesium.Ion.defaultAccessToken = "your_map_token";// 初始化Cesiumconst viewer = new Cesium.Viewer('cesiumContainer', {geocoder: false, //右上角搜索homeButton: false, //右上角homesceneModePicker: false, //右上角2D/3D切换baseLayerPicker: false, //右上角地形navigationHelpButton: false, //右上角帮助animation: false, //左下角圆盘动画控件timeline: true, //底部时间轴fullscreenButton: false, //右下角全屏控件vrButton: false, //如果设置为true,将创建VRButton小部件。scene3DOnly: false, // 每个几何实例仅以3D渲染以节省GPU内存infoBox: false, //隐藏点击要素后的提示信息imageryProvider: new Cesium.ArcGisMapServerImageryProvider({url: "your_map_url",}), //地图地址})// 隐藏左下角商标信息viewer._cesiumWidget._creditContainer.style.display = "none";// 隐藏底部时间轴viewer.timeline.container.style.display = "none";//开启深度检测viewer.scene.globe.depthTestAgainstTerrain = false;// 启用光照viewer.scene.globe.enableLighting = true;// 设置相机初始位置viewer.camera.setView({destination: Cesium.Cartesian3.fromDegrees(110,30,10000),// 设置相机方向,俯视和仰视的视角orientation: {heading: Cesium.Math.toRadians(0), //坐标系旋转0度pitch: Cesium.Math.toRadians(-90), //设置俯仰角度为-90度},});return () => {console.log("组件销毁前执行")}}, [])return (<div className='cesiumMap'><div id="cesiumContainer" /></div>);
}

(3)类组件(CesiumMapClass.js)

import React, { Component } from 'react'
import Cesium from 'cesium/Cesium'
import 'cesium/Widgets/widgets.css'
import './css/CesiumMap.css'Cesium.Ion.defaultAccessToken = "your_map_token"export default class App extends Component {componentDidMount() {const viewer = new Cesium.Viewer("cesiumContainer", {geocoder: false, //右上角搜索homeButton: false, //右上角homesceneModePicker: false, //右上角2D/3D切换baseLayerPicker: false, //右上角地形navigationHelpButton: false, //右上角帮助animation: false, //左下角圆盘动画控件timeline: true, //底部时间轴fullscreenButton: false, //右下角全屏控件vrButton: false, //如果设置为true,将创建VRButton小部件。scene3DOnly: false, // 每个几何实例仅以3D渲染以节省GPU内存infoBox: false, //隐藏点击要素后的提示信息imageryProvider: new Cesium.ArcGisMapServerImageryProvider({url: "your_map_url",}), //地图地址})// 隐藏左下角商标信息viewer._cesiumWidget._creditContainer.style.display = "none";// 隐藏底部时间轴viewer.timeline.container.style.display = "none";//开启深度检测viewer.scene.globe.depthTestAgainstTerrain = false;// 启用光照viewer.scene.globe.enableLighting = true;// 设置相机初始位置viewer.camera.setView({destination: Cesium.Cartesian3.fromDegrees(110,30,10000),// 设置相机方向,俯视和仰视的视角orientation: {heading: Cesium.Math.toRadians(0), //坐标系旋转0度pitch: Cesium.Math.toRadians(-90), //设置俯仰角度为-90度},});}render() {return (<div className='cesiumMap'><div id="cesiumContainer"></div></div>)}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/854704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ctfshow web七夕杯

web签到 执行命令没有回显&#xff0c;我们直接写文件就可以了 有字符长度限制 ls />a nl /*>a访问url/api/a下载文件 easy_calc <?phpif(check($code)){eval($result."$code".";");echo($result); }function check(&$code){$num1…

Golang | Leetcode Golang题解之第164题最大间距

题目&#xff1a; 题解&#xff1a; type pair struct{ min, max int }func maximumGap(nums []int) (ans int) {n : len(nums)if n < 2 {return}minVal : min(nums...)maxVal : max(nums...)d : max(1, (maxVal-minVal)/(n-1))bucketSize : (maxVal-minVal)/d 1// 存储 (…

aasist-bladedisc 音频反欺骗算法模型

AASIST 论文 参考ASIST: Audio Anti-Spoofing using Integrated Spectro-Temporal Graph Attention Networks https://arxiv.org/pdf/2110.01200.pdf 模型结构 aasist是一种开源的音频反欺诈的模型&#xff0c;主要的模型结构如下所示&#xff1a; 算法原理 环境配置 Dock…

git配置1-不同的项目使用不同用户名或邮箱

1. 全局用户名和邮箱 1.1. 设置1.2. 存储1.3. 查看 2. 针对指定项目单独设置 2.1. 设置2.2. 存储2.3. 查看 1. 全局用户名和邮箱 1.1. 设置 git config --global user.name 张三 git config --global user.email zhangsanexample.com1.2. 存储 git的全局配置一般会存在hom…

Hi3861 OpenHarmony嵌入式应用入门--总引导连接

这篇没有内容&#xff0c;只是根据内容先后顺序进行连接汇总。 Hi3861 OpenHarmony嵌入式应用入门--鸿蒙开发环境搭建_hi3861开发环境-CSDN博客 Hi3861 OpenHarmony嵌入式应用入门--基于HI-12F开发板烧写程序-CSDN博客 Hi3861 OpenHarmony嵌入式应用入门--启动流程-CSDN博客…

CVE-2023-38836(文件上传+命令执行)

简介 BoidCMS v.2.0.0 存在文件上传漏洞&#xff0c;远程攻击者可通过添加 GIF 头部绕过 MIME 类型检查&#xff0c;执行任意代码。 过程 打开靶场 对网站进行目录扫描 发现后台&#xff0c;登录弱口令账号密码 admin/password 发现文件上传位置 根据简介提示&#xff0c;…

CentOS 7.9检测硬盘坏区、实物定位(三)

系列文章目录 CentOS 7.9上创建JBOD&#xff08;一&#xff09; CentOS 7.9上创建的JBOD阵列恢复&#xff08;二&#xff09; 文章目录 系列文章目录前言一、在系统中找到硬盘对应的盘符二、使用命令定位实物1.badblocks检测坏块2.对2T以上的硬盘检测&#xff08;对本篇非必要…

我用chatgpt写了一款程序

众所周知&#xff0c;Chatgpt能够帮助人们写代码&#xff0c;前几天苏音试着完全用Chatgpt写一款Python程序 有一句话我很赞同&#xff0c;未来能代替人的不是AI&#xff0c;是会使用AI的人。 最终&#xff0c;写下来效果还不错&#xff0c;完全提升了我的办公效率。 开发前…

Linux Centos7.5 开放指定端口

在Linux中开放特定端口通常涉及配置防火墙规则或网络访问控制。以下是基本步骤&#xff1a; 使用firewalld开放端口 如果你的系统使用firewalld作为防火墙管理工具&#xff0c;可以按照以下步骤操作&#xff1a; 检查当前firewalld状态&#xff1a; sudo firewall-cmd --stat…

PCI 电源管理和设备驱动程序方案

方案 1&#xff1a;关闭设备 1.设备驱动程序&#xff1a;保存专有设备状态。 2.PCI 驱动程序&#xff1a;保存即插即用配置&#xff0c;禁用设备 (中断和 BAR) &#xff0c;并使用 PCI-PM 寄存器将设备置于 D3 中。 3.ACPI 驱动程序&#xff1a;运行 ASL 代码 (_PS3 和 _OFF&a…

0X0-基于Sklearn的机器学习入门:聚类(上)

本节及后续章节将介绍深度学习中的几种聚类算法&#xff0c;所选方法都在Sklearn库中聚类模块有具体实现。本节为上篇&#xff0c;将介绍几种相对基础的聚类算法&#xff0c;包括K-均值算法和均值漂移算法。 目录 X.1 聚类概述 X.1.1 聚类的种类 X.1.2 Sklearn聚类子模块 …

设计模式1

1、面向对象三大特性&#xff1a;封装、继承、多态 2、什么是接口&#xff1f; 3、面向对象的SOLID五大原则 4、简单工厂模式 5、工厂方法模式

网络安全:数据库安全性

文章目录 网络安全&#xff1a;数据库安全性引言数据库安全性的重要性常见的数据库安全威胁数据库安全性的最佳实践数据加密访问控制审计和监控 结语 网络安全&#xff1a;数据库安全性 引言 在前两篇文章中&#xff0c;我们讨论了SQL注入的概念和防范措施。本篇文章将聚焦于…

Python数据分析与建模库-03数据分析处理库Pandas-1.数据读取

该视频主要讲述了pandas库在数据处理中的重要性。 首先介绍了pandas库是基于numpy库封装了一些操作&#xff0c;简化了数据处理过程。然后通过读取CSV文件的例子&#xff0c;演示了如何使用pandas的read_csv函数将数据读入&#xff0c;并展示了数据类型和数据格式。 接着介绍…

HTML中的<iframe>标签及其属性

<iframe>标签在HTML中用于嵌入另一个HTML页面。它提供了一种在当前页面内展示外部内容的方式&#xff0c;而无需离开当前页面。以下是<iframe>的一些常用属性&#xff1a; src&#xff1a;指定要嵌入的页面的URL。width 和 height&#xff1a;设置iframe的尺寸。n…

又一个SQL Developer中调试存储过程的例子

此例基于OBE&#xff08;Oracle By Example&#xff09;的示例。是在SQL Developer中调试存储过程一文的进阶。复习了前文的一些基本概念&#xff0c;并纠正了官方示例的一个错误。 本文使用的是标准的HR 示例 Schema&#xff0c;调试的存储过程源代码如下&#xff1a; CREAT…

【PB案例学习笔记】-22制作一个语音朗读金额小应用

写在前面 这是PB案例学习笔记系列文章的第22篇&#xff0c;该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上传到了gite…

关于在word中使用Axmath的报错的解决

介绍 Axmath是数学公式编辑器软件。官网如下。 AxMath/AxGlyph/AxCells (amyxun.com) 支持正版。 在word中使用Axmath 点击word中的“文件”→“选项”。 选择“加载项” 选择“word加载项” 在Axmath默认的安装目录如下&#xff1a; C:\Program Files (x86)\AxMathhao&am…

论文创新点和贡献点该如何挖掘?

贡献点是怎么去挖掘&#xff0c;去写&#xff0c;去找方向。可量化层面 1>精度 2>窗口、token、频率、一些其他特征、embedding 3>时间复杂度、训练推理速度、内存开销啥的 4>时序和通道 局部-全局&#xff08;不同特征视角&#xff09; 5>多任务、数据&…

云计算 | (三)云使能技术

文章目录 📚云使能技术🐇ISP与网络互联架构⭐️Internet服务提供者(ISP)⭐️无连接分组交换(数据报网络)⭐️基于路由器的互联⭐️网络技术和商业考量👀小结🐇数据中心技术⭐️数据中心⭐️计算硬件⭐️存储硬件⭐️网络硬件👀小结🐇虚拟化技术⭐️虚拟化⭐️虚拟…