倾斜摄影先转换成OSGB再转换成3D Tiles?

是的,倾斜摄影的典型流程就是:先通过建模软件生成 OSGB 格式,再通过转换工具将 OSGB 转换为 3D Tiles。这几乎是目前国内绝大多数项目的标准做法。下面给你详细说明原因和具体流程:1. 为什么需要“先 OSGB,再转 3D Tiles”?

  • 倾斜摄影建模软件的原生输出:
    • ContextCapture(原 Smart3D)、Pix4D、Bentley ContextCapture、DJI Terra 等主流软件,在空三(空中三角测量)和模型重建后,最常用、最稳定的输出格式就是 OSGB(OpenSceneGraph Binary)。
    • OSGB 是一种二进制场景格式,带有 LOD(细节层次)、纹理、位置信息(metadata.xml),适合本地查看和进一步编辑(修模、补飞、单体化等)。
    • 部分新版本软件(如 ContextCapture)已经支持直接输出 3D Tiles,但实际生产中仍以输出 OSGB 为主,因为 OSGB 更适合后续编辑、质量检查和轻量化处理。
  • OSGB 的局限性:
    • 文件数量极多(成千上万个小文件)、数据量巨大、不支持 Web 流式加载。
    • 浏览器(如 Cesium)无法直接高效加载 OSGB,必须转换为 3D Tiles(支持分块、HLOD、glb/b3dm 等,适合 GeoServer + Cesium 或纯前端使用)。

因此,OSGB 是中间生产/编辑格式,3D Tiles 是最终 Web 发布/可视化格式。2. 完整典型流程

  1. 数据采集:无人机多镜头倾斜摄影(五镜头系统)。
  2. 空三 + 模型重建:用 ContextCapture / Smart3D 等软件处理影像 → 生成密集点云 → 构建白膜/实景模型 → 输出 OSGB(推荐带纹理的实景模型)。
  3. (可选)OSGB 编辑/优化:
    • 使用 GISBox 等工具进行破面修复、河床下压、地形对齐、轻量化、单体化等。
  4. OSGB 转 3D Tiles(核心转换步骤):
    • 推荐免费工具:
      • GISBox(强烈推荐):免费、一站式,支持“倾斜模型切片”模块。添加 OSGB 文件夹(通常选中 Data 目录或包含 metadata.xml 的根目录)→ 设置参数(空间参考自动识别、重建顶层、存储类型选 3D Tiles 1.1 等)→ 一键转换。支持 glb(推荐)或 b3dm 输出。
      • CesiumLab:同样有“倾斜模型切片”模块,操作类似,添加 Data 文件夹,设置散列存储等。
    • 其他工具:开源命令行工具(如 fanvanzh/3dtiles)、SuperMap 等。
  5. 发布与使用:
    • 转换后的 3D Tiles 文件夹(含 tileset.json)可放入 GeoServer 的 geovolumes 目录,通过 OGC 3D GeoVolumes 模块发布。
    • 或直接用 Nginx 静态托管,前端用 Cesium.js 加载。

3. 注意事项

  • 添加文件时:大多数工具要求选中 OSGB 的 Data 文件夹(而非最外层),因为 metadata.xml 和分块结构都在里面。
  • 参数优化:大范围数据建议开启“重建顶层”、设置合适的几何误差(geometricError)、启用 Draco 压缩等,以提升 Web 加载性能。
  • 直接输出 3D Tiles 的情况:如果你的建模软件支持且不需要大量后期编辑,可以尝试直接导出 3D Tiles,跳过 OSGB 中转。但实际中,多数项目仍走“OSGB → 编辑 → 转 3D Tiles”路线,因为编辑更灵活。
  • 反向转换:GISBox 等工具也支持 3D Tiles 转回 OSGB(反切),用于需要本地编辑的场景。

总结:
是的,标准做法是先转换成 OSGB(生产阶段),再转换成 3D Tiles(发布阶段)。这样既保留了建模软件的优势,又满足了 Web 端高效流式加载的需求。

3D Tiles中包含3D白膜和其他数据,3D白膜最主要?

是的,3D Tiles 中确实包含 3D 白膜(或其他网格模型)作为最主要的内容,尤其在倾斜摄影应用场景中。3D Tiles 的数据组成回顾一个完整的 3D Tiles 数据集由两大部分组成:

  • tileset.json:结构文件(目录树、包围体、LOD 控制、元数据等),负责组织所有瓦片的空间层次和加载逻辑。
  • 瓦片内容(Tile Content):真正存储“看得见”的渲染数据,这是 3D Tiles 的核心 payload。

瓦片内容支持多种类型(根据 3D Tiles 规范):

  • Batched 3D Model (b3dm) —— 传统最常用(1.0 版本)。
  • glTF / glb —— 现代推荐(3D Tiles 1.1 及以后,直接使用 glTF 2.0)。
  • Point Cloud (pnts) —— 点云数据。
  • Instanced 3D Model (i3dm) —— 实例化模型(适合重复物体,如树木、路灯)。
  • Composite (cmpt) —— 复合多种格式(已逐步弃用)。

3D 白膜在其中的地位3D 白膜(或带纹理的实景网格模型)是最主要、最核心的内容,特别是倾斜摄影转换而来的 3D Tiles 数据。

  • 为什么是最主要?
    • 倾斜摄影处理后生成的 白膜(纯几何三角网格 Mesh / TIN,只有形状、无真实纹理或简单灰白材质)或实景模型(白膜 + 自动贴真实照片纹理),在转换工具(如 GISBox、CesiumLab)中通常直接打包成 b3dm 或 glb 瓦片。
    • b3dm 的内部 payload 就是 glTF,而 glTF 的核心就是 三角网格(Mesh) + 材质/纹理 + 节点层次。
    • 因此,3D 白膜的几何形状(三角面、顶点、法线) 构成了 3D Tiles 中绝大部分的渲染数据。倾斜摄影城市级模型几乎全靠这些网格来呈现建筑物、地面、植被等的立体结构。
  • 其他数据的作用(辅助但非主要):
    • Feature Table / Batch Table:存储每个“批处理要素”(如单栋建筑)的附加信息,支持单体化(单独选中一栋楼高亮、查询属性)。
    • Metadata(1.1 新增):结构化属性(如楼层、用途、语义标签),便于分析和样式化。
    • Point Cloud:少数情况下混合使用(例如精细点云细节),但远少于网格。
    • Instancing:只用于重复对象,不是主流。
    • Bounding Volume、Geometric Error:这些是结构控制数据,不是渲染内容。

一句话总结:在倾斜摄影的 3D Tiles 中,3D 白膜(Mesh 网格)是主体内容,其他数据(属性、元数据、LOD 控制)都是围绕它服务的。加载后,你看到的“城市实景3D”主要就是这些白膜/实景网格在浏览器中渲染的结果。版本差异影响

  • 3D Tiles 1.0(常见于早期转换):主要用 b3dm,内部嵌入 glTF(白膜几何 + 纹理)。
  • 3D Tiles 1.1(推荐现代做法):直接用 glb(二进制 glTF),更简洁高效,白膜网格仍是核心。

实际体现:当你用 Cesium 加载倾斜摄影 3D Tiles 时,远看是粗糙白膜/低细节网格,近看加载高细节网格 + 真实纹理,这就是因为白膜 Mesh 占据了数据量的绝大部分。如果你想进一步区分:

  • 纯白膜(无纹理):网格表面统一灰白,用于几何分析。
  • 实景模型:白膜 + 照片纹理,看起来像真实城市照片。

2D Tiles 浏览器直接加载,3D Tiles 需要Cesium?

是的,你的理解基本正确,但有细微区别。下面用清晰对比的方式说明 2D Tiles 和 3D Tiles 在浏览器加载上的差异(基于当前2026年的实际情况):1. 2D Tiles(Vector Tiles / Raster Tiles)—— 可以“浏览器直接加载”(更准确说是简单前端库即可)

  • 加载方式:
    • 浏览器通过 MapLibre GL JS、OpenLayers、Leaflet 等轻量级地图库就能直接加载和渲染。
    • 这些库原生支持 MVT(Mapbox Vector Tiles) 或影像瓦片(WMTS/TMS),不需要额外复杂引擎。
    • 示例:只需几行代码配置 style.json 或 tiles URL,就能显示矢量地图、道路、建筑轮廓等,性能高效、学习成本低。
  • 为什么“直接”:
    • 2D Tiles 本质是扁平化的瓦片(2D 或 2.5D),渲染逻辑相对简单,浏览器 WebGL 或 Canvas 就能处理。
    • 大多数现代 Web 地图应用(如许多公开地图平台)都用这类库实现。

2. 3D Tiles —— 强烈推荐/通常需要 Cesium,但不是绝对只能用 Cesium

  • 为什么通常需要 Cesium:
    • 3D Tiles 是专为大规模异构3D地理空间数据(倾斜摄影白膜、实景模型、点云、BIM等)设计的开放标准,包含复杂的 HLOD(层次细节)、包围体裁剪、动态流式加载、单体化、语义属性 等机制。
    • CesiumJS 是最早实现完整 3D Tiles 规范的开源库(也是事实标准),它内置了强大的 3D 地球仪引擎,能高效处理海量三角网格、纹理、LOD 切换、与全球地形/影像融合等。
    • 在实际项目中(尤其是倾斜摄影 + GeoServer 发布场景),前端几乎都用 Cesium 加载 3D Tiles(只需 new Cesium.Cesium3DTileset({ url: 'tileset.json' }))。
    • Cesium 还提供了完整的相机控制、分析工具(量测、阴影、通视等)、样式化等功能,适合数字孪生、智慧城市等复杂应用。
  • 是否可以不使用 Cesium?
    • 可以,但实现难度更高,需要额外工作:
      • MapLibre GL JS + three.js + 3d-tiles-renderer:社区有示例,通过自定义图层把 3D Tiles 渲染进 MapLibre 的 3D 地形场景中。适合想保持 2D 地图风格同时叠加 3D 的场景。
      • deck.gl 的 Tile3DLayer:支持加载 3D Tiles,适合数据可视化项目。
      • iTowns、giro3d、3DTilesRendererJS(Three.js 专用)等开源库也能解析和渲染 3D Tiles。
      • 其他平台:ArcGIS JavaScript SDK(4.29+ 支持部分 integrated mesh 3D Tiles)、Unreal Engine / Unity(通过 Cesium for Unreal/Unity 插件,但底层仍依赖 3D Tiles 加载器)、QGIS(桌面端支持查看)。
    • 局限性:这些替代方案对完整 3D Tiles 特性支持不如 Cesium 全面(例如复杂 LOD、批量属性查询、与全球坐标系完美融合等可能不完善),渲染性能或功能完整性会有差距。纯浏览器“一行代码直接加载”几乎不可能,需要写更多集成代码。

3. 总结对比(结合你的倾斜摄影 + GeoServer 场景)

  • 2D Tiles:用 MapLibre / OpenLayers 等普通 Web 地图库就能直接高效加载,适合 2D 底图、矢量叠加。
  • 3D Tiles(倾斜摄影白膜转成的):强烈推荐用 CesiumJS 加载,能获得最佳体验(流畅、功能丰富、与 GeoServer 2D 服务无缝融合)。不使用 Cesium 也可以,但需要额外集成 Three.js 等 3D 引擎,适合有前端开发能力的团队或特定轻量需求。
  • 实际推荐:
    • 如果你的项目是城市级实景3D(倾斜摄影模型),用 Cesium + GeoServer 3D GeoVolumes 是最成熟、最省事的方案。
    • 如果只想在现有 2D 地图上叠加少量 3D 对象,可尝试 MapLibre + 3d-tiles-renderer。
    • 测试时:把 3D Tiles 文件夹用本地服务器(Nginx 或 Python http.server)托管,然后在 Cesium Sandcastle(在线示例)中粘贴 tileset.json URL 就能快速验证。

MapLibre GL JS、OpenLayers、Leaflet和WebGL 或 Canvas 什么关系

MapLibre GL JS、OpenLayers、Leaflet 是三种流行的开源 Web 地图库(JavaScript 库),它们都用于在浏览器中创建交互式地图,但渲染底层技术(即如何把地图画到屏幕上)有明显区别。它们与 WebGL 和 Canvas 的关系可以总结为:

  • WebGL:浏览器提供的 GPU 硬件加速 渲染接口(基于 OpenGL ES),适合高性能、大数据量、复杂效果(如平滑缩放、旋转、大量矢量要素、3D 挤出)。渲染速度快,但开发更复杂。
  • Canvas(2D Context):浏览器提供的 CPU 渲染 接口(HTML5 Canvas),适合简单 2D 图形,易用但大数据时性能容易下降。
  • DOM/SVG:传统方式,用 HTML 元素 + SVG 绘制,性能最弱。

1. 渲染技术对比

地图库

主要渲染技术

特点说明

适合场景

性能特点(大数据/复杂地图)

MapLibre GL JS

WebGL(核心)

完全基于 WebGL 渲染矢量瓦片(Vector Tiles),支持 Mapbox 风格的 JSON 样式、运行时动态样式、3D 地形、平滑动画。

高性能矢量地图、大量数据、需要自定义样式、倾斜/3D 效果

最佳(GPU 加速,处理数十万要素仍流畅)

OpenLayers

Canvas(默认) + WebGL(部分支持)

默认用 Canvas 2D 渲染矢量/栅格;近年来逐步增加 WebGL 支持(如点图层、WebGLTileLayer),但不是全部功能都用 WebGL。

复杂 GIS 功能(多种投影、格式支持、WMS/WFS 等 OGC 标准)

良好(Canvas 为主,大数据时 WebGL 部分加速)

Leaflet

Canvas / DOM + SVG

主要用 HTML/CSS + SVG 或 Canvas 渲染图层;原生不支持 WebGL。可通过插件(如 Leaflet.glify、leafgl)添加 WebGL 支持。

轻量级简单地图、快速开发、大量插件生态

一般(大数据或大量 marker 时容易卡顿)

2. 详细解释

  • MapLibre GL JS
    它是 Mapbox GL JS 的开源分支,专为 WebGL 而生。
    它把地图(尤其是矢量瓦片)直接交给 GPU 渲染,因此在处理海量数据、实时样式变化、旋转/倾斜视角时性能远超传统库。
    这也是为什么在你之前的 2D Tiles vs 3D Tiles 讨论中,MapLibre 常被用来加载 2D 矢量瓦片,而 3D Tiles 更推荐 Cesium(但 MapLibre 也可通过插件集成部分 3D)。
    缺点:学习曲线稍陡,需要理解 Mapbox Style Spec。
  • OpenLayers
    功能最全面的 GIS 库,支持大量数据格式和投影。
    默认渲染是 Canvas,视觉质量高、兼容性好;但对于性能敏感的矢量渲染,官方正在逐步迁移到 WebGL(例如点要素已支持 WebGL 渲染器,栅格瓦片也有 WebGLTileLayer)。
    它不像 MapLibre 那样“全 WebGL”,而是混合使用,灵活性高。
  • Leaflet
    最轻量、最易上手,适合快速原型或简单应用。
    它不依赖 WebGL,主要靠 DOM/SVG 或 Canvas,渲染逻辑简单。
    这让它体积小、插件丰富,但遇到大量要素(如上万 marker)时性能会明显下降(这时很多人会切换到 MapLibre 或加 WebGL 插件)。

3. 实际选择建议(结合你之前的 2D Tiles / 3D Tiles 讨论)

  • 想快速加载 2D Tiles(MVT 矢量瓦片)且性能好 → 优先 MapLibre GL JS(WebGL 优势明显)。
  • 需要丰富 GIS 功能(如多种坐标系、复杂叠加分析) → OpenLayers(Canvas + 逐步 WebGL)。
  • 简单地图、移动端轻量需求 → Leaflet(Canvas/DOM 足够)。
  • 真 3D / 大规模倾斜摄影模型 → 还是推荐 Cesium(专为 3D Tiles 优化),MapLibre 可作为 2D 底图叠加。

总结关系:
这三个库都是上层封装,它们调用浏览器的底层渲染 API(WebGL 或 Canvas)来画地图。
MapLibre 最依赖 WebGL(性能最强),Leaflet 最不依赖(最简单),OpenLayers 处于中间(混合使用,正在加强 WebGL)。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐