3D Tiles tileset.jso 数据格式

根据 Cesium 3D Tiles 规范,tileset.json 是瓦片集的入口文件,描述了整个 3D 数据集的层次结构、空间范围和元数据。以下是我为您梳理的完整格式说明:

一、基本结构

json 复制代码
{
  "asset": {
    "version": "1.0",
    "tilesetVersion": "v1.2"
  },
  "geometricError": 500,
  "root": {
    "boundingVolume": {},
    "geometricError": 500,
    "refine": "REPLACE",
    "content": {},
    "children": []
  }
}

二、核心字段详解

1. asset(资产信息,必需)

描述数据集的基本元信息。

json 复制代码
"asset": {
  "version": "1.0",                 // 3D Tiles 规范版本
  "tilesetVersion": "v1.2",         // 瓦片集版本
  "gltfUpAxis": "Z"                 // 可选:Z-up 或 Y-up
}

2. geometricError(几何误差,必需)

根节点的几何误差(单位:米),用于 LOD 切换。值越大表示该节点可接受误差越大,更容易被粗粒度瓦片替代。

3. root(根节点,必需)

瓦片树的根节点,包含以下关键字段:

3.1 boundingVolume(包围体,必需)

定义节点的空间范围,支持三种类型:

① region(经纬度范围,最常用)

json 复制代码
"boundingVolume": {
  "region": [
    -1.319720, 0.698842,  // 西经 (radians)
    -1.319659, 0.698905,  // 东经 (radians)
    0.0, 100.0           // 最小高度, 最大高度 (米)
  ]
}

② box(盒子)

json 复制代码
"boundingVolume": {
  "box": [
    0, 0, 0,        // 中心点 [x, y, z]
    100, 0, 0,       // x 轴方向与半长
    0, 100, 0,       // y 轴方向与半长
    0, 0, 100        // z 轴方向与半长
  ]
}

③ sphere(球体)

json 复制代码
"boundingVolume": {
  "sphere": [
    0, 0, 0,  // 中心点 [x, y, z]
    100       // 半径
  ]
}
3.2 content(内容,可选)

指向实际的瓦片数据文件。

json 复制代码
"content": {
  "uri": "0.pnts",           // 点云瓦片文件
  "boundingVolume": { ... }  // 可选:内容的精确包围盒
}
3.3 children(子节点,可选)

嵌套的子节点数组,构成树状结构。

json 复制代码
"children": [
  {
    "boundingVolume": { ... },
    "geometricError": 250,
    "refine": "ADD",
    "content": { "uri": "1.pnts" },
    "children": [ ... ]  // 可继续嵌套
  }
]
3.4 refine(细化方式,可选)
  • "REPLACE":完全替换父节点
  • "ADD":在父节点基础上添加细节

三、点云(pnts)瓦片示例

典型的点云瓦片集结构如下:

json 复制代码
{
  "asset": {
    "version": "1.0",
    "tilesetVersion": "1.0.0-2023"
  },
  "geometricError": 100.0,
  "root": {
    "boundingVolume": {
      "region": [
        -1.3197, 0.6988,
        -1.3196, 0.6989,
        0.0, 100.0
      ]
    },
    "geometricError": 100.0,
    "refine": "ADD",
    "content": {
      "uri": "0.pnts",
      "boundingVolume": {
        "region": [
          -1.3197, 0.6988,
          -1.3196, 0.6989,
          0.0, 50.0
        ]
      }
    },
    "children": [
      {
        "boundingVolume": {
          "region": [
            -1.3197, 0.6988,
            -1.31965, 0.69885,
            0.0, 100.0
          ]
        },
        "geometricError": 50.0,
        "content": { "uri": "1.pnts" }
      },
      {
        "boundingVolume": {
          "region": [
            -1.31965, 0.69885,
            -1.3196, 0.6989,
            0.0, 100.0
          ]
        },
        "geometricError": 50.0,
        "content": { "uri": "2.pnts" }
      }
    ]
  }
}

四、高级特性

1. 变换矩阵(transform)

节点级别的坐标变换。

json 复制代码
"transform": [
  1, 0, 0, 0,  // 4x4 矩阵,行主序
  0, 1, 0, 0,
  0, 0, 1, 0,
  0, 0, 0, 1
]

2. 扩展(extensions)

自定义元数据。

json 复制代码
"extensions": {
  "3DTILES_metadata": {
    "class": "building",
    "properties": {
      "name": "Main Building"
    }
  }
}

3. 元数据(metadata)

标准化的属性信息。

json 复制代码
"metadata": {
  "properties": {
    "height": { "minimum": 0, "maximum": 100 }
  }
}

五、工具生成示例

通过工具生成的典型瓦片集结构(8 叉树):

json 复制代码
{
  "asset": { "version": "1.0" },
  "geometricError": 1000,
  "root": {
    "boundingVolume": { "region": [...] },
    "geometricError": 1000,
    "refine": "REPLACE",
    "children": [
      {
        "boundingVolume": { "region": [...] },
        "geometricError": 500,
        "refine": "ADD",
        "content": { "uri": "r.pnts" },
        "children": [
          { "boundingVolume": {...}, "geometricError": 250, "content": { "uri": "r0.pnts" } },
          { "boundingVolume": {...}, "geometricError": 250, "content": { "uri": "r1.pnts" } },
          // ... 共 8 个子节点
        ]
      }
    ]
  }
}

六、验证与调试

1. 格式验证

javascript 复制代码
// 在 Cesium 中加载时自动验证
try {
    const tileset = await Cesium.Cesium3DTileset.fromUrl('tileset.json');
} catch (error) {
    console.error('tileset.json 格式错误:', error.message);
}

2. 常见错误

  • 404 错误uri 路径不正确
  • LOD 不生效geometricError 设置不合理
  • 内存溢出:节点层次过深或叶节点数据量过大
  • 坐标错误region 范围定义错误(需使用弧度制)

七、最佳实践

  1. 层次结构:保持平衡的树结构,每层 2-8 个子节点
  2. 几何误差:子节点应是父节点的 1/2 到 1/4
  3. 瓦片大小:单个 pnts 文件建议 50-200MB
  4. 路径引用:使用相对路径,避免跨域问题
  5. 版本控制 :在 asset.tilesetVersion 中标记版本

文档未详述的点(基于我的知识补充) :实际上,tileset.json 还支持 viewerRequestVolume 字段用于定义视点相关的加载条件,以及 content.groupMetadata 用于分组元数据管理,但这些在基础点云场景中较少使用。

相关推荐
李小白202002021 小时前
RK3568 linux6.1 死机
linux·运维·服务器
FreeGo~1 小时前
Linux 系统编程 进程篇 (五)
java·linux·服务器
nbwenren1 小时前
办公AI实测:Gemini3、GPT-4o、Claude3.5谁更强?
服务器·数据库·php
杨云龙UP1 小时前
Oracle数据库启动失败:ORA-29701、ORA-01565、ORA-17503故障处理记录_20260429
linux·运维·数据库·oracle·centos
Agent产品评测局2 小时前
离散制造业生产流程优化,AI落地实操步骤详解:从传统自动化到企业级智能体的技术范式跃迁
运维·人工智能·ai·自动化
Gary Studio2 小时前
ubuntu 16.04一键换源
linux·运维·ubuntu
又来敲代码了2 小时前
k8s的部署
linux·运维·云原生·容器·kubernetes
梦·D·2 小时前
安全运维工具箱sskit_v1.0.3 部署
运维
CDN3602 小时前
DNS 负载均衡技术架构与调度策略解析
运维·架构·负载均衡