15 KiB
基于 HBJSON 扩展多尺度数据模型:方案设计
日期:2026-05-28 来源:HBJSON Schema 分析与多尺度扩展讨论
一、背景
HBJSON(Honeybee Schema)是 Ladybug Tools 生态中建筑单体性能模拟的标准数据交换格式。它以 Room → Face → Aperture/Door 的层级结构表达建筑三维几何,并通过 properties 扩展点挂载 EnergyPlus/Radiance/DOE-2 的模拟参数。
本课题"多尺度绿色性能云端模拟"需要在建筑单体之上,覆盖社区和城市尺度的模拟需求。本文先解读 HBJSON 结构,再分析 Ladybug Tools 现有方案(Dragonfly)的能力与局限,最后提出多尺度扩展方案。
二、HBJSON Schema 结构解读
2.1 整体文件结构
HBJSON 是一个自包含的 JSON 文件,由一个顶层 Model 对象统领所有数据。文件不依赖外部引用,所有几何、构造、材料、负荷、时间表均内嵌或通过 identifier 引用。
2.2 顶层 Model 对象
Model 是文件的根节点,核心字段如下:
| 字段 | 类型 | 说明 |
|---|---|---|
type |
string | 固定为 "Model" |
version |
string | Schema 版本号,格式 x.y.z |
rooms[] |
Room[] | 建筑房间列表,每个 Room 是一个封闭三维空间 |
orphaned_faces[] |
Face[] | 无父 Room 的面(不可用于能耗模拟导出) |
orphaned_apertures[] |
Aperture[] | 无父 Face 的窗 |
orphaned_doors[] |
Door[] | 无父 Face 的门 |
orphaned_shades[] |
Shade[] | 无父对象的独立遮阳 |
shade_meshes[] |
ShadeMesh[] | 网格遮阳(周边建筑、地形) |
units |
enum | 几何单位:Meters / Millimeters / Feet / Inches / Centimeters |
tolerance |
float | 顶点容差(米制默认 0.01),用于几何容差检查 |
angle_tolerance |
float | 角度容差(默认 1.0 度),用于共线/共面检查 |
properties |
ModelProperties | 模型级扩展属性(Energy / Radiance / DOE-2) |
2.3 几何层级与嵌套关系
几何对象按严格的层级嵌套:
Model
├── rooms[]
│ ├── faces[] ← 包围 Room 的面(≥4 个形成封闭体积)
│ │ ├── apertures[] ← 窗(开洞,透光)
│ │ │ ├── indoor_shades[] ← 室内遮阳(窗帘、窗台)
│ │ │ └── outdoor_shades[] ← 室外遮阳(百叶、格栅)
│ │ ├── doors[] ← 门
│ │ ├── indoor_shades[]
│ │ └── outdoor_shades[] ← 室外遮阳(阳台、挑檐)
│ ├── indoor_shades[] ← 室内家具/隔断
│ └── outdoor_shades[] ← 室外树木/景观
└── shade_meshes[] ← 独立网格遮阳
各对象核心字段:
Room:faces[](面列表)、multiplier(标准层复用系数)、zone(热区标识)、story(楼层标识)、exclude_floor_area(是否排除楼板面积)Face:face_type(Wall/Floor/RoofCeiling/AirBoundary)、boundary_condition(边界条件)Aperture/Door:is_operable(可开启)、is_glass(玻璃门)Shade:is_detached(是否脱离主体)
2.4 几何原语
所有 3D 几何基于以下原语构建:
Point3D:三维坐标点
{ "type": "Point3D", "x": 0.0, "y": 0.0, "z": 0.0 }
Face3D:平面多边形(Face/Aperture/Door 的几何基础)
{
"type": "Face3D",
"boundary": [[x,y,z], [x,y,z], ...], // 外轮廓顶点,≥3 个
"holes": [[...], ...], // 孔洞轮廓(可选)
"plane": { "n": [0,0,1], "o": [0,0,0] } // 法线 + 原点(可选,自动推导)
}
Mesh3D:三角/四边形网格(ShadeMesh 的几何基础)
{
"type": "Mesh3D",
"vertices": [[x,y,z], ...], // 顶点池
"faces": [[0,1,2], [1,3,2]], // 面索引(3 或 4 个索引)
"colors": [{ "r":255, "g":0, "b":0, "a":255 }] // 顶点/面着色(可选)
}
2.5 边界条件(Boundary Conditions)
Face 的 boundary_condition 字段定义面与外部环境的关系,共 5 种类型:
| 类型 | 适用场景 | 核心参数 |
|---|---|---|
Outdoors |
外表面暴露于室外 | sun_exposure、wind_exposure、view_factor(对地视角系数) |
Surface |
与另一表面对接 | boundary_condition_objects(相邻对象 identifier 列表,Face 为 2 个,SubFace 为 3 个) |
Ground |
接地面 | 无附加参数 |
Adiabatic |
绝热面(相邻空间温湿度相同) | 无附加参数 |
OtherSideTemperature |
给定外侧温度边界 | heat_transfer_coefficient(W/m²K)、temperature(℃) |
约束:AirBoundary 类型的 Face 必须有 Surface 边界条件,校验器会强制检查。
2.6 Abridged(简写)模式
HBJSON 的核心设计特征。每个 properties 对象均有两种形态:
| 模式 | 结构 | 用途 |
|---|---|---|
XXXProperties |
内嵌完整对象(含所有 Material、Construction 定义) | 运行时内存对象 |
XXXPropertiesAbridged |
仅存 identifier 字符串引用 | 序列化到 JSON 文件 |
工作机制:
Room.properties.energy.construction_set: "Generic2005Construction"
│
▼
Model.properties.energy.construction_sets: [
{ "identifier": "Generic2005Construction",
"wall_construction": "WallCons_Generic", ... }
]
Model.properties.energy.constructions: [
{ "identifier": "WallCons_Generic", "layers": ["mat_1", "mat_2"] }
]
Model.properties.energy.materials: [
{ "identifier": "mat_1", "type": "EnergyMaterial", ... }
]
这种"外键引用"模式避免了几何层级的循环嵌套,大幅减小文件体积,是处理大型建筑模型的关键优化。
2.7 扩展属性系统(Properties Extension)
每个几何层级都通过 properties 字段挂载多引擎数据,采用插件式架构:
properties:
├── energy — EnergyPlus(构造、负荷、HVAC、时间表)
├── radiance — Radiance(材质、动态遮阳状态、传感器网格)
└── doe2 — DOE-2(历史兼容)
各层级的 Energy 属性举例:
Model级:constructions[]、materials[]、programs[](使用模式)、schedules[]、hvacs[]Room级:construction_set(引用)、program_type(引用)、hvac(引用)、shw(引用),以及逐条覆盖的people、lighting、equipment、infiltration、ventilation、setpointFace级:construction(引用)、vent_crack(AirflowNetwork 裂缝)Aperture级:construction(引用)、vent_openingShade级:construction(引用)、transmittance_schedule(透射率时间表)、pv_properties(光伏)
2.8 标识符与元数据
所有对象继承 IDdBaseModel,统一标识规范:
| 字段 | 约束 | 说明 |
|---|---|---|
identifier |
^[.A-Za-z0-9_-]+$,1-100 字符 |
唯一标识,序列化/引用/跨引擎传递均使用此字段 |
display_name |
无限制 | 仅用于 UI 展示,可含中文、空格、特殊字符 |
user_data |
可选字典 | 用户自定义附加数据,键值需为基本类型 |
2.9 容差机制
HBJSON 通过两个参数处理 CAD 几何导入时的浮点误差:
tolerance(距离容差):顶点坐标差值小于此值视为重合,用于封闭体积检查、法线校正angle_tolerance(角度容差):边方向夹角小于此值视为共线,用于冗余顶点清理
EnergyPlus 要求几何单位为米且封闭体积,因此 units: "Meters" + 合理的 tolerance 是导出成功的必要条件。
三、Ladybug Tools 现有方案:Dragonfly
Dragonfly 是 Ladybug Tools 生态中面向社区/城市尺度的独立项目,schema 定义在 dragonfly-schema。
3.1 Dragonfly 层级结构
Dragonfly Model
├── buildings[]
│ ├── unique_stories[]
│ │ ├── room_2ds[] ← 2D 楼层板 + 参数化立面
│ │ └── multiplier ← 标准层复用
│ ├── room_3ds[] ← 可选的完整 Honeybee Room(3D)
│ └── roof ← 屋顶几何
├── context_shades[] ← 周边建筑/地形(Face3D / Mesh3D)
├── units / tolerance / angle_tolerance
└── properties ← Energy / Radiance / DOE-2 / Comparison
3.2 Dragonfly 与 Honeybee 的关系
Dragonfly (社区/城市尺度)
│ 几何: 2D 楼层板 + 参数化窗户/遮阳/屋顶
│ ↓ translate_to_honeybee()
▼
Honeybee (建筑单体尺度)
│ 几何: 完整 3D Face3D
│ ↓ to_idf() / to_rad()
▼
EnergyPlus / Radiance
关键事实:Dragonfly 不是 HBJSON 的"上层扩展",而是一个独立的 schema,通过 translate_to_honeybee() 降维生成 HBJSON。
3.3 Dragonfly 的能力与局限
| 尺度 | 能力 | 局限 |
|---|---|---|
| 建筑单体 | Room2D(2D 楼板+参数化立面)→ 可转 Honeybee | 非 3D 精确几何 |
| 建筑群 | Building 列表 + ContextShade | 仅遮阳关系,无交互 |
| 社区 | 多 Building + reference_vector 定位 | 无管网/微气候/能源系统 |
3.4 缺失层(社区 → 城市之间)
- 区域能源系统(District Energy)——冷热源站、管网拓扑、换热站
- 场地要素——道路、绿地、水体、地形
- 微气候——UHI(城市热岛)、风环境耦合
- 城市尺度——土地利用分区、交通、人口密度
- 跨建筑交互——阴影投射、反射辐射、废热排放
四、扩展方案对比
4.1 方案对比
| 方案 | 核心思路 | 优势 | 劣势 |
|---|---|---|---|
| 一:HBJSON 之上增加 Site 层 | 包裹 MultiScaleModel,内嵌 HBJSON | 完全向后兼容,单文件云端模拟 | 文件体积较大 |
| 二:扩展 Dragonfly properties | 在 Dragonfly Model 增加城市扩展 | 与 Ladybug Tools 原生兼容 | Room2D 几何精度不足,HBJSON 反向映射不完美 |
| 三:独立格式 + HBJSON 引用 | CityModel 引用外部 hbjson 文件 | 解耦,可版本控制 | 多文件依赖,不适合云端一键模拟 |
4.2 推荐方案:方案一的增强版
在 HBJSON 之上增加 MultiScaleModel 容器,保持 HBJSON 结构不变,新增 Site 和 Urban 层级。
设计原则:
- 完全向后兼容——
sites[].buildings[]是标准 HBJSON Model,现有工具无需修改 - 增量扩展——只增加 Site 和 Urban 两个新层级
- 可分级模拟——可只取一个 Site 做社区模拟,也可取全部做城市模拟
五、MultiScaleModel Schema 设计
5.1 顶层结构
{
"type": "MultiScaleModel",
"version": "0.1.0",
"units": "Meters",
"tolerance": 0.01,
"sites": [...],
"properties": { "urban": {...} }
}
5.2 Site 结构(社区/街区尺度)
Site
├── identifier ← 场地标识
├── boundary ← 2D 边界 [[x,y], ...]
├── buildings[] ← HBJSON Model(内嵌)
├── context_shades[] ← 周边建筑/地形
│
├── terrain ← 地形
│ ├── type: "Grid" | "TIN"
│ └── data ← 高程网格或三角网
│
├── infrastructure ← 基础设施
│ ├── roads[] ← 道路中心线 + 断面
│ ├── green_spaces[] ← 绿地(Face3D + 植被类型)
│ └── water_bodies[] ← 水体
│
├── district_energy ← 区域能源系统
│ ├── plants[] ← 源站(CHP、地源热泵、锅炉房)
│ │ ├── type, capacity, cop, fuel_type
│ │ └── location [x, y, z]
│ ├── networks[] ← 管网
│ │ ├── type: "CHW" | "HW" | "Steam"
│ │ ├── pipes[] ← 管段(起点、终点、管径、保温)
│ │ └── supply_temp, return_temp
│ └── connections[] ← 建筑-管网接入
│ ├── building_ref, network_ref, flow_rate
│
└── properties
├── energy
└── microclimate ← 微气候
├── uhi_model ← 热岛强度参数
└── wind_model ← 风场参数
5.3 Urban 结构(城市尺度)
properties.urban
├── climate_zones[] ← 气候分区
├── land_use[] ← 用地性质
└── schedule ← 城市级时间表(交通、人口)
六、关键技术决策
| 决策点 | 推荐 | 理由 |
|---|---|---|
| 建筑几何引用 | 内嵌 HBJSON | 保持与 HBJSON 自包含格式的一致性,减少解析复杂度;多文件方案需额外处理文件依赖和版本一致性 |
| 几何精度 | 社区用 Dragonfly Room2D,城市用简模 | 城市尺度不需要 Face 级精度,简化计算 |
| 微气候耦合 | 参数化而非 CFD | CFD 耦合计算量过大,用 UHI 修正系数 |
| 区域能源 | 拓扑网络 + 简化水力模型 | 不需要详细水力计算,关注热平衡 |
| 向后兼容 | 完全保留 HBJSON 结构 | 现有 honeybee 工具链零修改 |
七、下一步:新增 community/urban 尺度实体
当前 schema-building.json 已完全对齐 HBJSON(建筑单体几何尺度)。社区和城市尺度的实体定义需要新建独立的 schema-community.json / schema-urban.json,不应直接混入 schema-building.json,以保持与 HBJSON 的严格兼容。
除几何外,各模拟领域均已独立建库,且按尺度拆分:
- 建筑尺度:
schema-building.json(几何)/schema-energy.json/schema-radiance.json/schema-cfd.json - 社区尺度:
schema-community.json(几何)/schema-community-energy.json/schema-community-cfd.json/schema-community-microclimate.json - 城市尺度:
schema-urban.json(几何)/schema-urban-energy.json/schema-urban-cfd.json
新增实体规划:
| 层级 | 文件 | 实体 |
|---|---|---|
| Site 几何 | schema-community.json |
Site / TerrainGrid / TerrainTIN / Road / GreenSpace / WaterBody |
| 区域能源 | schema-community-energy.json |
DistrictEnergy / Plant / Network / Pipe / BuildingConnection |
| 社区 CFD | schema-community-cfd.json |
CommunityCFDSettings / WindProfile / CFDDomain / Mesh / Turbulence |
| 微气候 | schema-community-microclimate.json |
MicroClimate |
| 城市几何 | schema-urban.json |
ClimateZone / LandUse |
| 城市能源 | schema-urban-energy.json |
UrbanEnergyDemand / RenewablePotential / UrbanEnergyBalance |
| 城市 CFD | schema-urban-cfd.json |
UrbanCFDSettings / WindComfortAssessment |
MultiScaleModel 作为顶层容器,通过引用方式关联三个尺度:
sites[].buildings[]→ 引用 bps/building 的 HBJSON Modelsites[].terrain/infrastructure→ 由 bps/community 定义properties.urban→ 由 bps/urban 定义