UNPKG

cmpt

Version:

A TypeScript library for parsing and building B3DM (Batched 3D Model) files

154 lines (115 loc) 5.42 kB
# b3dm **b3dm** 是一个用于构建和解析 B3DM 格式文件的 TypeScript 库。B3DM Cesium 3D Tiles 中的一种瓦片格式,用于存储带有批量表(Batch Table)和特征表(Feature Table)的 3D 模型数据。 ## 功能特点 - **构建 B3DM 文件**:从 GLB 数据和元数据生成符合 B3DM 规范的二进制文件。 - **解析 B3DM 文件**:从 B3DM 文件中提取 GLB 数据、特征表和批量表。 - **类型安全**:基于 TypeScript 开发,提供完整的类型声明支持。 - **轻量高效**:专注于核心功能,易于集成到 3D 地理信息系统(GIS)项目中。 --- ## 安装 通过 npm 安装: ```bash npm install b3dm ``` --- ## 使用示例 ### 构建 B3DM 文件 ```typescript import { buildB3dm } from 'b3dm'; // 输入 GLB 数据和元数据 const glbData = new Uint8Array([...]); // GLB 的二进制数据 const featureTableJSON = { BATCH_LENGTH: 10 }; const batchTableJSON = { name: 'Building A', height: 50 }; // 构建 B3DM 文件 const b3dmBuffer = buildB3dm({ glbData, featureTableJSON, batchTableJSON, }); // 将结果保存为文件 require('fs').writeFileSync('output.b3dm', Buffer.from(b3dmBuffer)); ``` --- ### 解析 B3DM 文件 ```typescript import { parseB3dm } from 'b3dm'; // 读取 B3DM 文件 const b3dmData = require('fs').readFileSync('example.b3dm'); const parsedData = parseB3dm(b3dmData.buffer); console.log('Header:', parsedData.header); console.log('Feature Table JSON:', parsedData.featureTable.json); console.log('Batch Table JSON:', parsedData.batchTable?.json); console.log('GLB Data Length:', parsedData.glbData.byteLength); ``` --- ## API 文档 ### 构建 B3DM 文件 #### `buildB3dm(options: B3dmBuildOptions): ArrayBuffer` - **参数**: - `options`: 构建选项 - `glbData`: 输入的 GLB 二进制数据(`Uint8Array`)。 - `featureTableJSON`: 特征表的 JSON 数据(可选,默认为空对象)。 - `featureTableBinary`: 特征表的二进制数据(可选,默认为空数组)。 - `batchTableJSON`: 批量表的 JSON 数据(可选,默认为空对象)。 - [batchTableBinary](file://d:\hub\代码测试\proj4ts\b3dm\src\types.ts#L31-L31): 批量表的二进制数据(可选,默认为空数组)。 - **返回值**:生成的 B3DM 二进制数据(`ArrayBuffer`)。 --- ### 解析 B3DM 文件 #### `parseB3dm(arrayBuffer: ArrayBuffer): B3dmData` - **参数**: - `arrayBuffer`: B3DM 文件的二进制数据(`ArrayBuffer`)。 - **返回值**:解析后的 B3DM 数据结构([B3dmData](file://d:\hub\代码测试\proj4ts\b3dm\src\types.ts#L12-L23))。 - [header](file://d:\hub\代码测试\proj4ts\b3dm\src\types.ts#L13-L13): 文件头信息([B3dmHeader](file://d:\hub\代码测试\proj4ts\b3dm\src\types.ts#L1-L9))。 - [featureTable](file://d:\hub\代码测试\proj4ts\b3dm\src\types.ts#L14-L17): 特征表,包含 JSON 和可选的二进制数据。 - [batchTable](file://d:\hub\代码测试\proj4ts\b3dm\src\types.ts#L18-L21): 批量表(可选),包含 JSON 和可选的二进制数据。 - [glbData](file://d:\hub\代码测试\proj4ts\b3dm\src\types.ts#L22-L22): 内嵌的 GLB 模型数据(`Uint8Array`)。 --- ## 类型定义 以下是库中的主要接口定义: ```typescript /** B3DM 文件头结构 */ export interface B3dmHeader { magic: string; // 固定为 "b3dm" version: number; // 版本号(通常为 1 byteLength: number; // 文件总长度 featureTableJSONByteLength: number; // 特征表 JSON 长度 featureTableBinaryByteLength: number; // 特征表二进制长度 batchTableJSONByteLength: number; // 批量表 JSON 长度 batchTableBinaryByteLength: number; // 批量表二进制长度 } /** B3DM 完整数据结构 */ export interface B3dmData { header: B3dmHeader; featureTable: { json: Record<string, any>; binary?: Uint8Array; }; batchTable?: { json: Record<string, any>; binary?: Uint8Array; }; glbData: Uint8Array; // 内嵌的 GLB 模型数据 } /** 构建 B3DM 的选项 */ export interface B3dmBuildOptions { glbData: Uint8Array; // 输入的 GLB 二进制数据 featureTableJSON?: Record<string, any>; // 特征表 JSON featureTableBinary?: Uint8Array; // 特征表二进制 batchTableJSON?: Record<string, any>; // 批量表 JSON batchTableBinary?: Uint8Array; // 批量表二进制 } ``` --- ## 贡献指南 欢迎为 `b3dm` 提交问题或 Pull Request!以下是一些贡献建议: 1. **报告问题**:如果发现任何 Bug 或有改进建议,请在 [GitHub Issues](https://github.com/your-repo/b3dm/issues) 中提交。 2. **开发环境**: - 克隆仓库:`git clone https://github.com/cesiumjs/b3dm.git` - 安装依赖:`npm install` - 运行测试:`npm test` 3. **代码风格**:遵循 TypeScript 的最佳实践,确保代码格式化一致。 4. **提交 PR**:请在提交前运行 `npm run build` 确保代码能够正常构建。 --- ## 许可证 `b3dm` 遵循 [MIT License](https://opensource.org/licenses/MIT)。 希望这个库能帮助你更轻松地处理 B3DM 文件!如果有任何问题,欢迎随时联系我们。