资讯动态

WebODM Cesium Ion 插件完全指南:将航测成果一键上云,以 3D Tiles 流式分发

发布时间:2026/10/15 20:39:46 来源:尧图企业网站定制
后端前端图像处理GIS3D建模【免费下载链接】WebODMUser-friendly, commercial-grade software for processing aerial imagery. ✈️ Download it for free!项目地址https://gitcode.com/gh_mirrors/we/WebODM点击查看免费下载导读本指南围绕 WebODM 内置的Cesium Ion核心插件版本 1.3.0代码位于 coreplugins/cesiumion/展开讲解如何把 WebODM 处理完成的 DOM/DSM/DTM、点云与纹理模型一键上传到 Cesium Ion 账户借助 Cesium 客户端如 CesiumJS以 3D Tiles 形式在任意设备上流式加载多 GB 级三维模型。读完本文你将掌握插件的启用与 Token 配置、端到端上传操作流程、KTX2 纹理压缩新特性并能从源码层面理解上传uploading与处理processing两阶段流水线的工作原理及常见故障的排查方法。1. 插件定位为什么需要 Cesium IonCesium Ion 是面向地理空间数据的托管式流式服务平台。WebODM 的 Cesium Ion 插件打通了两端的链路WebODM 负责航拍影像的摄影测量处理生成正射影像、高程模型、点云与三维纹理模型Cesium Ion 负责把这些成果转换为可流式加载的 3D Tiles 瓦片集并托管到云端使多 GB 级模型无需下载即可在浏览器、移动端等任意 Cesium 客户端中流畅浏览。插件在 WebODM 前端通过PluginsAPI.Dashboard.addTaskActionButton向每个任务注入操作按钮见 templates/load_buttons.js后端则通过 REST API 与https://api.cesium.com/v1定义于 globals.py交互实现在 manifest.json 中声明的Upload and tile ODM assets with Cesium ion这一核心能力。2. 前置条件在启用插件前需要确认以下三项WebODM 版本 ≥ 2.5.0插件的webodmMinVersion声明为2.5.0见 manifest.json旧版本无法使用Cesium Ion Token需在 Cesium Ion 账户中生成一个 API Token并授予权限。README 要求至少包含assets:list, assets:read, assets:write而插件自带的 Token 配置页 templates/app.html 更进一步要求全部权限assets:list, assets:read, assets:write, geocodegeocode用于地形类资产上传时解析基准地形稳定的互联网连接上传与处理状态轮询均依赖网络。3. 初始设置启用插件与配置 Token3.1 启用插件登录 WebODM进入Administration → Plugins管理页找到 Cesium Ion 插件并启用默认随 WebODM 分发disabled标记文件为空表示未被禁用见 coreplugins/cesiumion/disabled启用后左侧导航栏会出现Cesium Ion菜单项菜单注入逻辑见 plugin.py 的main_menu()。3.2 设置 Token点击左侧 Cesium Ion 菜单进入插件主页在 cesium.com/ion/tokens 生成 Token建议勾选全部权限将 Token 粘贴到页面表单中点击Set Token保存。Token 并非全局共享而是按用户存储HomeView通过plugin.get_user_data_store(request.user)将 Token 写入当前用户的 Data Store见 app_views.py再次提交空 Token 则会重置。每次页面加载时load_buttons.js 会把 Token 注入到任务操作按钮组件的 props 中——若未设置 Token按钮不会被渲染。4. 端到端使用流程README 给出如下完整操作路径在 WebODM 仪表盘dashboard创建新项目上传航拍影像编辑任务选项务必开启texturing-single-material启动 WebODM 处理耗时较长处理完成后点击任务上的Tile in Cesium Ion下拉按钮从可用资产列表中选择要上传的成果在弹出的对话框中可为资产重命名、添加描述与署名attribution并可按资产类型启用对应的 Cesium Ion 选项确认后提交上传开始后可通过View Ion Tasks按钮随时查看上传与处理进度处理完成后通过View in Cesium Ion下拉按钮在新浏览器标签页中打开并查看 Cesium Ion 中的资产。注意Cesium 任务包含两个阶段——上传与处理。上传uploading是把 WebODM 处理好的数据传送到 Cesium Ion处理processing是 Cesium Ion 将数据切片/渲染为可流式加载的模型。两者都在同一个任务视图中显示进度。4.1 可用资产类型与文件映射前端下拉列表中的可用资产由任务产出的文件决定。后端在ShareTaskView.get中遍历task.available_assets通过文件名校验哪些资产可上传见 api_views.py映射关系如下资产类型AssetType对应 WebODM 产物文件Cesium Ion 输出类型ORTHOPHOTO正射影像orthophoto.tifIMAGERYTERRAIN_MODEL地形模型/DTMdtm.tifTERRAINSURFACE_MODEL表面模型/DSMdsm.tifTERRAINPOINTCLOUD点云georeferenced_model.laz3DTILESTEXTURED_MODEL纹理模型textured_model.zip3DTILESsourceType 为 3D_CAPTURE前端 TaskView.jsx 依据isExported/isTask/isError三个状态将资产分为待上传、已导出可查看与处理中三类分别呈现为 Tile / View 两个下拉按钮以及 View ion Tasks 进度弹窗。4.2 上传对话框选项说明上传对话框UploadDialog.jsx包含通用字段与按资产类型区分的专属选项通用字段Name默认预填为项目名 | 任务名 — 资产类型数据来自项目 API、Description、Attribution地形类资产DTM/DSM专属选项——Base Terrain选择基准地形默认 Mean Sea Level或从用户 Ion 账户中类型为 TERRAIN 的资产中选择。提交时后端自动补充toMeters: 1、heightReference: WGS84、waterMask: false参数纹理模型专属选项——Use KTX2 Compression选择 Yes/No对应上传时的textureFormat取值为KTX2或AUTO。4.3 为什么必须开启 texturing-single-materialCesium Ion 的 3D_CAPTURE 资产类型只接受单纹理材质的模型。README 明确警告必须在新任务的 WebODM 处理选项中开启texturing-single-material因为 WebODM 会把先前处理过的纹理模型缓存在同一个odm_textured数据目录中——若复用旧任务的缓存即使后续勾选了该选项上传的仍是旧的未合并纹理模型导致上传成功但无法处理/渲染。该选项在 WebODM 预设 UI 中位于 texturing → texture-opts 分组见 EditPresetDialog.jsx 中的定义。5. 源码级原理上传两阶段流水线点击提交后前端向/api/.../task/pk/share发送 POST携带 Token、资产类型、名称、描述、署名与选项后端ShareTaskView.post与异步任务upload_to_ion协同完成整条流水线5.1 上传前准备后端 API 层通过task.get_asset_download_path()定位资产文件路径对纹理模型TEXTURED_MODEL若任务存在deferred_compress_dir延迟压缩目录先生成延迟压缩资产随后自动计算任务边界取dsm_extent/dtm_extent把模型中心经纬度写入options.position高度置 0因为模型已做偏移供 Cesium Ion 定位将任务标记为 upload.active并通过run_function_async把upload_to_ion投递到 Celery 异步执行以上逻辑见 api_views.py 的ShareTaskView.post。5.2 纹理模型预处理对于纹理模型upload_to_ion首先调用 model_tools.py 中的to_ion_texture_model对textured_model.zip进行重打包解压后删除.conf、.vec、.spt等不兼容文件仅保留*_geo.obj地理参考模型若无_geo文件则抛出IonInvalidZip回退使用原始文件最后以 ZIP_DEFLATED 重新压缩以减少体积。5.3 上传与处理轮询异步任务层uploader.py 中的upload_to_ion是核心执行者步骤为若环境缺少boto3自动通过 pip 安装调用POST {ION_API_URL}/assets创建资产请求从响应中取出assetMetadata资产 ID、uploadLocationAWS S3 临时凭据、endpoint、bucket、prefix与onComplete回调信息用 boto3 的upload_file把资产文件上传到 Ion 分配的 S3 存储TaskUploadProgress回调按字节数实时计算上传百分比并写入插件 Data Store上传完成后调用onComplete回调通知 Ion进入处理阶段轮询每 2 秒请求一次GET {ION_API_URL}/assets/{ion_id}解析status与percentComplete更新处理进度直到进度达到 100% 或状态进入 ERROR整个流程的状态上传/处理进度、active 标记、错误信息都持久化在插件级GlobalDataStore中键名形如task_id_ASSET_TYPE供前端定时刷新展示。5.4 进度展示与状态清理前端TaskView.jsx中TaskFetcher每 4 秒打开任务弹窗时 2 秒自动刷新资产状态TasksDialog.jsxTasksDialog.jsx把每个资产的 upload/process 进度与错误渲染为进度条列表RefreshIonTaskView/task/pk/refresh会清理两类陈旧状态Ion 侧已不存在HTTP 非 200的资产记录以及 Celery 中已不活跃的僵尸任务记录ClearErrorsTaskView/task/pk/clear用于一键清除失败记录对应任务弹窗中的Remove Failed Tasks按钮通过 Django 信号监听task_removed/task_completed任务被删除或重新处理时自动清空该任务的全部资产信息保证可重新分享见 api_views.py 的oam_cleanup。6. v1.3.0 新特性KTX2 纹理压缩插件 1.3.0manifest.json随 Cesium Ion 流式管线升级而引入新特性Cesium Ion 自动将瓦片集升级为1.1版本即新标准的 3D Tiles 瓦片集规范新版本支持KTX2Khronos 组织的纹理容器格式支持 Basis Universal 超级压缩作为纹理压缩选项可生成更小的瓦片集获得更好的流式传输性能。在 WebODM 端用户只需在上传纹理模型3D_CAPTURE时在弹出对话框的Use KTX2 Compression选项中选择Yes后端即会把textureFormat设置为KTX2选择 No 则为AUTO由 Ion 自动决定。前端该选项的帮助文案也说明了其用途使用 KTX2 压缩创建更小的瓦片集以获得更好的流式性能见 UploadDialog.jsx。注意 README 中该小节标题的 KVX 2.0 为笔误实际指 KTX2。7. 故障排查与 FAQ7.1 常见问题纹理模型上传成功但无法处理/渲染现象纹理模型成功上传到 Cesium Ion但处理或渲染失败。原因Cesium Ion 的 3D_CAPTURE 仅接受单纹理材质模型而 WebODM 在odm_textured目录中缓存了先前处理过的多纹理模型。解决在新任务上开启texturing-single-material后再进行 WebODM 处理切勿复用旧任务缓存。7.2 常见错误提示的代码依据上传过程中若 Cesium Ion API 返回 HTTP 错误插件会写入明确的错误信息见 uploader.py401 →Invalid ion token!Token 无效或已过期请重新生成并在插件页更新404 →Missing permissions on ion token!Token 缺少所需权限如assets:write请按第 3 节重新生成并授予全部权限。7.3 常见问题Token 设置不生效 / 按钮不出现Token 按用户存储且每次页面加载注入若任务上未出现 Tile in Cesium Ion 按钮请确认当前登录用户已设置 Token、任务存在可用资产orthophoto.tif / dsm.tif / dtm.tif / georeferenced_model.laz / textured_model.zip 之一。若资产列表为空任务页还会显示Refresh Available ion Assets按钮用于手动刷新。7.4 FAQ能否在旧版 WebODM 上使用不能。插件仅兼容WebODM 2.5.0 及以上版本README 明确说明且manifest.json的webodmMinVersion亦为 2.5.0。8. 延伸阅读插件声明与版本信息manifest.json插件注册、菜单与挂载点plugin.py后端 API 视图share / refresh / clearapi_views.py上传异步任务实现uploader.py纹理模型预处理model_tools.pyToken 配置页模板templates/app.html前端任务按钮视图TaskView.jsx上传对话框与任务进度弹窗UploadDialog.jsx、TasksDialog.jsx赞分享后端前端图像处理GIS3D建模【免费下载链接】WebODMUser-friendly, commercial-grade software for processing aerial imagery. ✈️ Download it for free!项目地址https://gitcode.com/gh_mirrors/we/WebODM点击查看免费下载相关推荐Kepler.gl 3D Tile Layer 实战指南加载 OGC 3D Tiles、Google 实景与 Cesium Ion 三维瓦片Kepler.gl 3D Tile Layer 实战指南加载 OGC 3D Tiles、Google 实景与 Cesium Ion 三维瓦片 导读 Keple数据可视化前端GIS突破3D渲染瓶颈CesiumJS与Cesium Ion云端流式传输方案详解突破3D渲染瓶颈CesiumJS与Cesium Ion云端流式传输方案详解 你是否还在为大型3D模型加载缓慢而烦恼是否因客户端性能限制无法展示精细地理数据前端3D渲染图形学数据可视化Zotero Style为学术研究注入美学与效率的插件革命Zotero Style为学术研究注入美学与效率的插件革命 在学术研究的世界中Zotero作为一款开源的文献管理工具已经成为无数研究者的必备软件。然而随桌面应用知识管理科研上一篇【告别连接难题】SQLline高效运维指南从小白到专家下一篇联想拯救者Y7000系列BIOS隐藏设置解锁工具释放硬件潜能的实用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑