谷歌地图的3d街景使用的是什么数据格式?

发布于:2025-06-24 ⋅ 阅读:(16) ⋅ 点赞:(0)


谷歌地图的3D街景(Google Street View)以及3D城市模型使用的不是公开标准格式,而是 Google 自定义的私有格式,以下是它们背后的主要数据格式和技术细节(基于公开资料与技术逆向分析):


🌐 一、3D 街景(Street View)

1. 图像部分

  • 格式:JPEG、WebP、或类似压缩格式(部分使用 JPEG XR、JPEG 2000)

  • 全景格式:Equirectangular(等距矩形投影),常见尺寸为 13312x6656 或类似的宽高比。

  • Tile 切片方式

    • 图像被切片成瓦片(Tiles),根据缩放级别分层加载,类似于 Google Maps 瓦片地图。
    • 切片 URL 通常通过 token+坐标的方式组合,需解码 API 请求。

2. 元数据(Metadata)

  • 格式:JSON 或 Protocol Buffers(protobuf)序列化格式

  • 包含:

    • 相机位置(GPS)
    • 朝向、视场角(pitch, yaw, fov)
    • 拍摄时间、设备信息
    • 邻近街景的 ID 列表(用于导航)

🏙️ 二、3D 城市模型(Google Earth 或 Maps 的倾斜摄影模型)

1. 模型部分

  • 格式:Google 使用的是一种叫做 “glTF-like” 的私有格式,非标准 glTF,但结构类似

  • 实际内部结构常见为:

    • .bin.pb(protobuf 二进制),包含 mesh 顶点、索引、纹理坐标等
    • .jsonmanifest 描述文件(可类比 glTF 的 scene tree)
    • 高度优化与压缩(经常使用 Google Draco、Zstandard 等压缩)

2. 瓦片划分(Tiling System)

  • 类似于 Cesium 3D Tiles 的金字塔瓦片结构(类似于 quadtree/octree)
  • 每个区域以瓦片(tile)划分,每块 tile 内包含多个 mesh 与材质贴图

3. 材质贴图

  • 使用压缩纹理(如 WebP、Basis、JPEG),并进行多级 mipmapping 优化网络加载速度

🛑 注意

谷歌并没有公开其3D模型和街景的完整格式规范,这些数据基本上都通过加密 API 或数据流加密保护,不开放下载与二次利用。部分开源项目(例如 google-maps-3d-hack)通过逆向工程获取了部分解码逻辑,但需谨慎使用,可能违反服务条款


🔄 与标准格式对比(参考)

数据类型 Google 内部格式(私有) 类似标准格式
街景全景图像 Equirectangular JPEG/WebP JPEG, equirectangular
3D Mesh Protobuf + Binary glTF, 3D Tiles
材质贴图 WebP / Basis JPEG, PNG, KTX2
瓦片结构 自定义 tile LOD 树结构 Cesium 3D Tiles

好的,我们来详细解析一下 Google 地图中 3D Mesh 使用的 Protobuf + Binary 私有格式,以及与其类似的标准格式 glTF3D Tiles,从结构、用途、优势、实现方式等方面进行对比。


✅ 一、Google 3D Mesh 使用的格式(Protobuf + Binary)

Google Earth 或 Google Maps 中的 3D 建筑、地形模型,使用了如下结构:

1. 数据结构

  • 元信息:使用 Protocol Buffers (Protobuf) 编码
  • 模型数据(Mesh、纹理):使用二进制数据(.bin),通常是自定义结构体布局
  • 切片结构:基于 四叉树(Quadtree)八叉树(Octree) 空间分层

2. 典型组成

文件类型 内容说明
.pb.pbf Protobuf 序列化的元信息(如 tile 索引、LOD、边界框、相机)
.bin.mesh 实际的顶点坐标、法线、索引、纹理坐标等
.jpg/.webp 纹理图
.manifest.json 根节点引用和层级说明

Google 使用自家优化方案对这些数据进行了压缩、加密和混淆。


✅ 二、glTF(GL Transmission Format)

glTF 是 Khronos Group 推出的现代 3D 模型标准,被称为“3D 场景的 JPEG”。

1. 格式类型

文件类型 说明
.gltf JSON 格式描述文件,引用外部资源
.glb 二进制封装版 glTF,包含所有资源
.bin 外部二进制缓冲区(用于顶点、索引、法线等)
.jpg/.png 外部纹理贴图

2. 核心特性

  • 支持网格(Mesh)、材质(PBR)、动画、骨骼、相机、节点树
  • 支持 Draco 压缩、KTX2 纹理压缩
  • 体积小,适合网络传输(Web-friendly)

3. 示例结构(gltf JSON):

{
  "asset": { "version": "2.0" },
  "scenes": [{ "nodes": [0] }],
  "nodes": [{ "mesh": 0 }],
  "meshes": [{
    "primitives": [{
      "attributes": {
        "POSITION": 0,
        "NORMAL": 1,
        "TEXCOORD_0": 2
      },
      "indices": 3,
      "material": 0
    }]
  }]
}

✅ 三、3D Tiles(由 Cesium 推出)

专为大规模地理空间数据(如城市模型、倾斜摄影)优化的格式,适用于:

  • 城市级别 3D 建模
  • 大量 Tile 的 LOD 加载

1. 组成文件

文件类型 说明
tileset.json 瓦片层级、空间结构、每个 tile 的 bounding volume
.b3dm 包含 glTF 的 3D Mesh + Metadata(Binary glTF + Batch data)
.i3dm Instanced glTF(适用于大量重复模型)
.pnts 点云格式
.cmpt 多类型组合格式(如多个 b3dm)

2. 瓦片机制(LOD)

  • 每个 tile 包含一部分区域的模型
  • 根据相机距离自动加载不同分辨率
  • 具备 culling、boundingVolume 等性能优化机制

3. b3dm 文件结构

Header (28 bytes)
├─ magic: 'b3dm'
├─ version: 1
├─ byteLength
├─ featureTableJsonLength
├─ batchTableJsonLength
├─ glb: 二进制 glTF 数据体

🧠 总结对比

特性 Google 私有格式 glTF 3D Tiles
是否开放 ❌ 否 ✅ 是 ✅ 是
是否支持瓦片LOD ✅ 是 ❌ 无(需自建结构) ✅ 是(原生支持)
文件结构 Protobuf + Binary + Texture JSON + BIN + Texture JSON + 多种 Tile 格式
网络友好 ✅ 高度优化 ✅ 网络优先 ✅ 为 WebGIS 设计
使用场景 Google Earth/Maps Web 3D 模型展示 Cesium / 地理数据

🔧 开发者建议

目标 建议使用
浏览器显示 3D 模型 glTF / glb(如 three.js, babylon.js)
GIS 城市级 3D 数据 3D Tiles(如 CesiumJS)
模拟 Google Earth 效果 自建 3D Tiles + 倾斜摄影 模型
解码 Google 格式 高难度,不建议(需逆向 protobuf,违反 ToS)


网站公告

今日签到

点亮在社区的每一天
去签到