superMap for cesium 飞行管理

Web端嵌入超图飞行路线创建功能

前言

之前写过一篇 vue2.6内嵌超图11i发布的场景 的文章;当初的背景是前端使用的vue2,所以使用了超图发布在npm上的vue2对应的 @supermap/vue-iclient3d-webgl,这个前端依赖是超图5年前发布的,本地搭建的超图iserver是11i的,但vue2版本依赖的@supermap/vue-iclient3d-webgl只支持到10i,所以当时魔搭了一下,先装@supermap/iclient3d-vue-for-webgl,将包内public地下的cesium文件夹拷贝到项目public下,然后uninstall,再安装@supermap/vue-iclient3d-webgl,这样就解决了vue2项目内嵌超图11i发布的场景的问题

问题

超图官网示例展示的飞行案例是基于fpf文件的,但fpf文件是基于超图的idesktop手动打点(用过),或者基于路线生成(没用过)的。

项目做出来后总不能让用户自己去idesktop上搭建场景 →打点→导出fpf文件→上传到项目→web端漫游吧?所以就有了这篇文章!

思路

既然idesktop能创建并导出fpf,我只需要记录每次点击的场景的x,y,z,方位角,倾斜角,然后创建站点,添加到RouteCollection,再通过flymanager调用就行了,也省的生成文件再加载到内存中了;于是就搜索相关的问题,在超图官网问答版块找到了一篇类似的问题,直指优快云,但示例代码需要积分下载,就PASS掉了。

解决思路

这里笼统说下,省的各位同行浪费时间

web场景中打点 →项目内置一个空的fpf文件 →将打点数据给到RouteCollection→调用flyManager.play()

详细步骤

重点:如果你参考我之前的文章引用的@supermap/vue-iclient3d-webgl,那么你需要先安装超图发布的iclient3d-webgl

npm install @supermap/iclient3d-webgl

然后从下载的包中将Cesium拷贝到你的前端项目的public下,替换到原来从@supermap/vue-iclient3d-webgl拷贝的Cesium包

原因:@supermap/vue-iclient3d-webgl是5年前发布的,依赖的cesium比较旧,导致漫游相机视角异常和飞行结束后场景假死状态

在 Vite 项目中使用 SuperMap for Cesium 可以通过以下步骤实现,确保正确引入相关库并初始化三维场景。 ### 安装依赖 首先需要安装 CesiumSuperMap iClient3D for Cesium 的相关包。通常可以通过 CDN 或本地文件引入,也可以通过 npm 安装: ```bash npm install cesium supermap cesium-leaflet ``` 如果使用 CDN 引入方式,则可以在 `index.html` 中添加如下内容: ```html <script src="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Cesium.js"></script> <link href="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Widgets/widgets.css" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/@supermap/iclient3dforcesium@latest/dist/SuperMapCesium.min.js"></script> ``` ### 配置环境 在 `vite.config.ts` 文件中可以配置别名和全局变量,例如: ```ts import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' export default defineConfig({ plugins: [vue()], resolve: { alias: { '@': path.resolve(__dirname, './src'), }, }, }) ``` ### 初始化 Cesium Viewer 在 Vue 组件中使用 `<script setup>` 模式,并在 `onMounted` 生命周期钩子中初始化 Cesium Viewer: ```vue <template> <div id="cesiumContainer" style="width: 100%; height: 100vh;"></div> </template> <script setup> import { onMounted } from 'vue' import * as Cesium from 'cesium' import '@supermap/iclient3dforcesium' // 确保引入 SuperMap 扩展 onMounted(() => { const viewer = new Cesium.Viewer('cesiumContainer', { terrainProvider: new Cesium.CesiumTerrainProvider({ url: 'https://assets.agi.com/stk-terrain/v1/tilesets/world/tiles' }) }) // 添加 SuperMap 图层 const supermapLayer = new SuperMap.WebGLTiledImageLayer({ url: 'https://iserver.supermap.io/iserver/services/map-world/rest/maps/World', }) viewer.imageryLayers.addImageryProvider(supermapLayer) }) </script> ``` ### 样式设置 为了保证 Cesium 容器的显示效果,建议在组件样式中进行适当设置: ```vue <style scoped> #cesiumContainer { position: absolute; top: 0; left: 0; right: 0; bottom: 0; } </style> ``` 同时,也可以在全局 `main.ts` 中引入 SuperMap 相关 CSS: ```ts import 'leaflet/dist/leaflet.css' import 'path-to-supermap-css/supermap-iclient3d.css' // 如果有自定义样式 ``` ### 注意事项 - 确保在 DOM 加载完成后初始化 Cesium Viewer,推荐在 `onMounted` 中执行。 - 如果使用模块化构建工具(如 Vite),需要确认 CesiumSuperMap 的路径是否正确。 - 对于性能优化,建议按需加载图层或模型数据[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值