当前位置: 首页 > news >正文

在Next.js和React中搭建Cesium项目

在Next.js和React中搭建Cesium项目,需要确保Cesium能够与服务端渲染(SSR)兼容,因为Next.js默认是SSR的。Cesium是一个基于WebGL的地理信息可视化库,通常用于在网页中展示三维地球或地图。下面是一个基本的步骤,用于在Next.js项目中集成Cesium。

步骤1:创建Next.js项目

通过下面的命令来创建Next.js项目,过程中有一些选项根据需求选择就行:

npx create-next-app my-cesium-project
cd my-cesium-project

在这里插入图片描述

步骤2:安装Cesium

通过npm或yarn安装Cesium:

npm install cesium
# 或者
yarn add cesium

步骤3:配置Cesium

在Next.js中,自定义next.config.js以正确地包含Cesium资源,因为Cesium有一些静态资产和Webpack的特殊要求。

// next.config.js
const path = require('path');
const { DefinePlugin } = require('webpack');module.exports = {webpack: (config, { isServer }) => {// 解析cesium导入别名config.resolve.alias = {...config.resolve.alias,cesium: path.resolve(__dirname, 'node_modules/cesium/Source')};// 定义与cesium相关的全局变量config.plugins.push(new DefinePlugin({CESIUM_BASE_URL: JSON.stringify('/cesium')}));if (!isServer) {// 这是一个解决SSR(服务器端渲染)中“窗口未定义”错误的方法。config.externals = config.externals.map(external => {if (typeof external !== 'function') return external;return (context, request, callback) => {if (request.match(/^cesium/)) return callback();return external(context, request, callback);};});}return config;},// 添加服务器端重写规则,以便从/public/cesium服务于Cesium静态资源async rewrites() {return [{source: '/cesium/:path*',destination: '/cesium/:path*' // Proxy to Folder}];}
};

步骤4:在组件中使用Cesium

接下来就可以在React组件中使用Cesium了。下面是一个简单的使Cesium在浏览器环境中初始化的例子:

// src/app/page.js
"use client"
import React, { useEffect } from 'react';// Ensure Cesium is only imported in the client-side bundle
if (typeof window !== "undefined") {var Cesium = require('cesium/Cesium');require('cesium/Widgets/widgets.css');
}const CesiumMap = () => {useEffect(() => {if (typeof window !== "undefined") {// Cesium will be initialized hereCesium.Ion.defaultAccessToken = 'your_access_token';const viewer = new Cesium.Viewer('cesiumContainer', {terrainProvider: Cesium.createWorldTerrain()});// Add Cesium camera, entities, and so on...}}, []);return (<div><div id="cesiumContainer" style={{ width: '100%', height: '100vh' }} /></div>);
};export default CesiumMap;

请确保替换 ‘your_access_token’ 为你从Cesium Ion获取的有效访问令牌。

步骤5:添加Cesium静态资源

由于Cesium需要加载一些静态资源,你需要将这些资源从node_modules/cesium/Build/Cesium复制到public/cesium文件夹中。

步骤6:运行Next.js应用

运行Next.js应用,并在浏览器中查看Cesium地图:

npm run dev
# 或者
yarn dev

打开浏览器并访问 http://localhost:3000来查看你的Cesium地图。
在这里插入图片描述

相关文章:

  • 快递收发线上管理教程
  • Zookeeper 集群搭建过程中常见错误
  • Java设计模式之单例模式以及如何防止通过反射破坏单例模式
  • 基于多反应堆的高并发服务器【C/C++/Reactor】(下)
  • XML简介 (EXtensible Markup Language)
  • mybatis-plus阻止全表更新与删除
  • Wavesurfer.js绘制波形图
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • 软考高级难度排行榜,哪个科目相对较容易呢?
  • web前端游戏项目-堆木头游戏【附源码】
  • apache poi_5.2.5 实现表格内某一段单元格的复制
  • 通过 Higress Wasm 插件 3 倍性能实现 Spring-cloud-gateway 功能
  • 【ARMv8M Cortex-M33 系列 1 -- SAU 介绍】
  • 3. BlazorSignalRApp 结合使用 ASP.NET Core SignalR 和 Blazor
  • 【计算机视觉中的多视图几何系列】深入浅出理解针孔相机模型
  • Android 架构优化~MVP 架构改造
  • Cookie 在前端中的实践
  • docker python 配置
  • Docker入门(二) - Dockerfile
  • ES10 特性的完整指南
  • Fastjson的基本使用方法大全
  • golang中接口赋值与方法集
  • Java 内存分配及垃圾回收机制初探
  • js
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Vue.js-Day01
  • 回顾 Swift 多平台移植进度 #2
  • 聊聊flink的BlobWriter
  • 如何利用MongoDB打造TOP榜小程序
  • 如何优雅地使用 Sublime Text
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 小程序 setData 学问多
  • 自定义函数
  • 说说我为什么看好Spring Cloud Alibaba
  • ​如何在iOS手机上查看应用日志
  • #git 撤消对文件的更改
  • #HarmonyOS:Web组件的使用
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (¥1011)-(一千零一拾一元整)输出
  • (day6) 319. 灯泡开关
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (二)windows配置JDK环境
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (三分钟)速览传统边缘检测算子
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)memcache、redis缓存
  • ./和../以及/和~之间的区别
  • .Net Redis的秒杀Dome和异步执行
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET连接MongoDB数据库实例教程
  • .net连接oracle数据库