# OpenCesium **Repository Path**: cesium-developer/open-cesium ## Basic Information - **Project Name**: OpenCesium - **Description**: 本项目开源市面上常见的各种基础功能 - **Primary Language**: JavaScript - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-23 - **Last Updated**: 2025-12-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OpenCesium - 三维空间可视化平台 [English](./README.en.md) | 中文 ## 📖 项目介绍 OpenCesium 是一个基于 Vue 3 + Cesium 的开源三维空间可视化平台,旨在为开发者提供丰富的三维地理信息功能模块,便于快速构建和实现应用。本项目采用模块化设计,支持插件式开发,开发者可以轻松添加自定义功能模块。 ### 核心特性 - 🎯 **模块化架构**:采用组件化设计,功能模块独立,易于扩展和维护 - 🚀 **插件式开发**:通过配置文件即可添加新功能,无需修改核心代码 - 🎨 **现代化 UI**:基于 Element Plus 的现代化界面设计 - 📦 **开箱即用**:内置多种常用三维功能模块 - 🔧 **易于扩展**:清晰的代码结构,便于二次开发 ### 📚 相关文档 - 📖 [开发快速参考指南](./DEVELOPMENT.md) - 快速查找常用代码片段和开发技巧 - 🤝 [贡献指南](./CONTRIBUTING.md) - 详细的贡献流程和代码规范 - 🌐 [English Documentation](./README.en.md) - English version of this documentation ## 🛠️ 技术栈 - **前端框架**: Vue 3 (Composition API) - **三维引擎**: Cesium - **状态管理**: Pinia - **路由管理**: Vue Router 4 - **UI 组件库**: Element Plus - **构建工具**: Vite 6 - **样式预处理**: Sass/SCSS - **HTTP 客户端**: Axios ## 📁 项目结构 ``` open-cesium/ ├── public/ # 静态资源目录 │ ├── config/ # 配置文件目录 │ │ ├── cesium-config.json # Cesium 功能配置(工具列表) │ │ └── icons-config.json # 图标配置 │ ├── data/ # 数据文件(模型、纹理等) │ ├── Image/ # 图片资源 │ └── sdk/ # 第三方 SDK(Cesium) │ ├── src/ # 源代码目录 │ ├── api/ # API 接口 │ │ └── auth.js # 认证相关接口 │ │ │ ├── components/ # 全局组件 │ │ ├── CesiumSpace.vue # Cesium 空间容器组件 │ │ └── UserInfo.vue # 用户信息组件 │ │ │ ├── libs/ # 第三方库封装 │ │ └── ammo/ # Ammo.js 物理引擎封装 │ │ │ ├── router/ # 路由配置 │ │ └── index.js # 路由定义 │ │ │ ├── store/ # 状态管理 │ │ ├── index.js # Pinia 实例 │ │ ├── spaceStore.js # 空间状态管理 │ │ └── userStore.js # 用户状态管理 │ │ │ ├── utils/ # 工具函数 │ │ ├── assets.js # 资源路径处理 │ │ ├── requests.js # HTTP 请求封装 │ │ └── cesium/ # Cesium 相关工具 │ │ ├── core/ # 核心功能 │ │ ├── entity/ # 实体相关 │ │ ├── model/ # 模型相关 │ │ ├── terrain/ # 地形相关 │ │ ├── water/ # 水体相关 │ │ └── ... # 其他功能模块 │ │ │ └── views/ # 页面组件 │ ├── Login/ # 登录页面 │ │ └── index.vue │ └── Home/ # 主页面 │ ├── index.vue # 主页面入口 │ ├── UI/ # UI 组件 │ │ ├── AppHeader.vue # 顶部导航栏 │ │ ├── AppSidebar.vue # 侧边栏(工具列表) │ │ ├── AppFooter.vue # 底部栏 │ │ ├── CyberLoader.vue # 加载动画 │ │ └── CyberNotification.vue # 通知组件 │ └── components/ # 功能组件 │ ├── CesiumComponents.vue # Cesium 组件容器 │ └── Cesium/ # Cesium 功能组件 │ ├── terrain/ # 地形相关组件 │ │ ├── TerrainExcavation.vue │ │ ├── HeightMap.vue │ │ └── ... │ └── model/ # 模型相关组件 │ ├── ModelLoad.vue │ ├── 3dTileControlPanel.vue │ └── ... │ ├── .env # 环境变量配置(需要创建) ├── vite.config.js # Vite 配置 ├── package.json # 项目依赖 └── README.md # 项目文档 ``` ## 🚀 快速开始 ### 环境要求 - Node.js >= 18.17.1 - npm >= 7.0.0 或 yarn >= 1.22.0 或 pnpm >= 9.10.0 ### 安装步骤 1. **克隆项目** ```bash git clone https://gitee.com/cesium-developer/open-cesium.git cd open-cesium ``` 2. **安装依赖** ```bash npm install # 或 yarn install ``` 3. **配置环境变量** 在项目根目录创建 `.env` 文件: ```env # API配置 VITE_API_BASE_URL=http://192.168.31.179/prod-api VITE_API_TIMEOUT=30000 # 应用配置 VITE_APP_TITLE=3D Space VITE_APP_DESCRIPTION=Cesium空间可视化平台 VITE_APP_HEADER_TITLE=GISer的三维空间 ``` 4. **启动开发服务器** ```bash npm run dev # 或 yarn dev ``` 访问 http://localhost:3003 5. **构建生产版本** ```bash npm run build # 或 yarn build ``` ## 📚 开发指南 > 💡 **提示**: 需要快速查找常用代码片段?请查看 [开发快速参考指南](./DEVELOPMENT.md) ### 如何添加新功能模块 本项目的核心设计理念是**插件式开发**,所有功能模块通过配置文件注册,无需修改核心代码。 #### 步骤 1: 创建功能组件 在 `src/views/Home/components/Cesium/` 目录下创建你的功能组件: ```vue ``` **重要提示**: - 组件文件路径必须遵循:`src/views/Home/components/Cesium/{category}/{ComponentName}.vue` - 组件必须支持 `@close` 事件或调用 `spaceStore.setSelectedTool(null)` 来关闭面板 - 通过 `useSpaceStore()` 获取 `viewer` 实例来操作 Cesium #### 步骤 2: 注册功能到配置文件 编辑 `public/config/cesium-config.json`,添加你的功能配置: ```json { "token": "your-cesium-token", "tabs": [ { "key": "your-category", "name": "你的分类名称", "tools": [ { "key": "yourFeature", "name": "你的功能名称", "icon": "fa-solid fa-icon-name", "componentPath": "your-category/YourFeature" } ] } ] } ``` **配置说明**: - `key`: 功能的唯一标识符 - `name`: 在侧边栏显示的名称 - `icon`: Font Awesome 图标类名(参考 https://fontawesome.com/icons) - `componentPath`: 组件路径(相对于 `Cesium/` 目录,不包含 `.vue` 扩展名) #### 步骤 3: 使用工具函数(可选) 如果你的功能需要用到 Cesium 工具函数,可以在 `src/utils/cesium/` 目录下创建工具文件: ```javascript // src/utils/cesium/yourFeature.js export function createYourFeature(viewer, options) { // 你的功能实现 return { // 返回功能对象 } } ``` 然后在组件中引入使用: ```javascript import { createYourFeature } from '@/utils/cesium/yourFeature' const feature = createYourFeature(viewer, { /* options */ }) ``` ### 文件放置规范 #### 组件文件 - **功能组件**: `src/views/Home/components/Cesium/{category}/{ComponentName}.vue` - **UI 组件**: `src/views/Home/UI/{ComponentName}.vue` - **全局组件**: `src/components/{ComponentName}.vue` #### 工具函数 - **Cesium 工具**: `src/utils/cesium/{feature}/{fileName}.js` - **通用工具**: `src/utils/{fileName}.js` #### 配置文件 - **功能配置**: `public/config/cesium-config.json` - **图标配置**: `public/config/icons-config.json` #### 静态资源 - **图片**: `public/Image/` - **模型**: `public/data/model/` - **数据**: `public/data/` ### 访问 Cesium Viewer 所有功能组件都可以通过 `spaceStore` 访问 Cesium viewer: ```javascript import { useSpaceStore } from '@/store/spaceStore' const spaceStore = useSpaceStore() const viewer = spaceStore.viewer // 使用 viewer 进行操作 if (viewer) { viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(116.39, 39.9), point: { pixelSize: 10, color: Cesium.Color.YELLOW } }) } ``` ### 状态管理 #### SpaceStore `spaceStore` 提供了以下状态和方法: ```javascript // 状态 spaceStore.viewer // Cesium viewer 实例 spaceStore.activeSpace // 当前活动空间(固定为 'cesium') spaceStore.selectedTool // 当前选中的工具 spaceStore.sidebarTabs // 侧边栏工具列表 spaceStore.isFullscreen // 全屏状态 // 方法 spaceStore.setSelectedTool(tool) // 设置选中的工具 spaceStore.clearAllEffects() // 清除所有效果 ``` #### UserStore 用户相关的状态管理: ```javascript import { useUserStore } from '@/store/userStore' const userStore = useUserStore() await userStore.userLogin(loginForm) await userStore.userRegister(registerForm) ``` ## 🔧 配置文件说明 ### cesium-config.json 功能模块配置文件,定义侧边栏的工具列表: ```json { "token": "Cesium Ion Token", "tabs": [ { "key": "category-key", "name": "分类名称", "tools": [ { "key": "tool-key", "name": "工具名称", "icon": "fa-solid fa-icon", "componentPath": "category/tool-component" } ] } ] } ``` ### icons-config.json 图标配置文件,定义分类图标: ```json { "categoryIcons": { "terrain": "fa-solid fa-mountain", "model": "fa-solid fa-cube" }, "defaultIcon": "fas fa-tools" } ``` ### .env 环境变量配置: ```env # API 配置 VITE_API_BASE_URL=http://your-api-url VITE_API_TIMEOUT=30000 # 应用配置 VITE_APP_TITLE=应用标题 VITE_APP_DESCRIPTION=应用描述 VITE_APP_HEADER_TITLE=头部标题 ``` ## 📖 API 使用说明 ### 认证 API ```javascript import { login, register, logout, getCaptcha } from '@/api/auth' // 获取验证码 const captcha = await getCaptcha() // 用户登录 const result = await login({ username: 'user', password: 'pass', code: 'captcha', uuid: 'captcha-uuid' }) // 用户注册 await register({ username: 'user', email: 'user@example.com', password: 'pass', confirmPassword: 'pass', code: 'captcha', uuid: 'captcha-uuid' }) // 退出登录 await logout() ``` ### HTTP 请求 ```javascript import request from '@/utils/requests' // GET 请求 const data = await request.get('/api/endpoint') // POST 请求 const result = await request.post('/api/endpoint', { key: 'value' }) ``` ## 🤝 贡献指南 > 💡 **详细指南**: 请查看 [贡献指南文档](./CONTRIBUTING.md) 获取完整的开发流程、代码规范、提交规范等详细信息。 > 🚀 **快速参考**: 需要快速查找代码片段和开发技巧?请查看 [开发快速参考指南](./DEVELOPMENT.md)。 ### 开发流程 1. **Fork 项目** ```bash # Fork 到你的账号 ``` 2. **创建功能分支** ```bash git checkout -b feature/your-feature-name ``` 3. **开发功能** - 按照上述"如何添加新功能模块"的步骤开发 - 遵循项目代码规范 - 添加必要的注释 4. **提交代码** ```bash git add . git commit -m "feat: 添加新功能描述" git push origin feature/your-feature-name ``` 5. **创建 Pull Request** - 在 Gitee 上创建 Pull Request - 详细描述你的功能变更 - 附上截图或演示视频(如有) ### 代码规范 - 使用 ESLint 进行代码检查 - 遵循 Vue 3 Composition API 最佳实践 - 组件命名使用 PascalCase - 文件命名使用 PascalCase(组件)或 camelCase(工具函数) - 添加必要的注释和文档 ### 提交信息规范 使用约定式提交格式: - `feat`: 新功能 - `fix`: 修复 bug - `docs`: 文档更新 - `style`: 代码格式调整 - `refactor`: 代码重构 - `test`: 测试相关 - `chore`: 构建/工具相关 示例: ``` feat: 添加地形开挖功能 fix: 修复模型加载时的内存泄漏问题 docs: 更新开发文档 ``` ## 📝 常见问题 ### Q: 如何获取 Cesium viewer 实例? A: 通过 `useSpaceStore()` 获取: ```javascript import { useSpaceStore } from '@/store/spaceStore' const spaceStore = useSpaceStore() const viewer = spaceStore.viewer ``` ### Q: 组件路径配置错误怎么办? A: 确保 `componentPath` 配置正确: - 路径相对于 `src/views/Home/components/Cesium/` 目录 - 不包含 `.vue` 扩展名 - 使用 `/` 分隔目录层级 ### Q: 如何调试功能组件? A: 1. 在组件中添加 `console.log` 输出调试信息 2. 使用浏览器开发者工具查看控制台 3. 检查 Network 面板查看 API 请求 4. 使用 Vue DevTools 查看组件状态 ### Q: 如何添加新的工具分类? A: 在 `cesium-config.json` 中添加新的 `tabs` 项: ```json { "tabs": [ { "key": "new-category", "name": "新分类", "tools": [...] } ] } ``` ## 📄 许可证 本项目采用 [MIT License](./LICENSE) 许可证。 ## 🙏 致谢 感谢所有为本项目做出贡献的开发者! ## 📮 联系方式 - 项目地址: https://gitee.com/cesium-developer/open-cesium - 问题反馈: 请在 Gitee Issues 中提交 --- **Happy Coding! 🚀**