feat: add CFD/radiance/urban/community schema files, pres, docs
This commit is contained in:
@@ -0,0 +1,349 @@
|
||||
# 基于 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**:三维坐标点
|
||||
```json
|
||||
{ "type": "Point3D", "x": 0.0, "y": 0.0, "z": 0.0 }
|
||||
```
|
||||
|
||||
**Face3D**:平面多边形(Face/Aperture/Door 的几何基础)
|
||||
```json
|
||||
{
|
||||
"type": "Face3D",
|
||||
"boundary": [[x,y,z], [x,y,z], ...], // 外轮廓顶点,≥3 个
|
||||
"holes": [[...], ...], // 孔洞轮廓(可选)
|
||||
"plane": { "n": [0,0,1], "o": [0,0,0] } // 法线 + 原点(可选,自动推导)
|
||||
}
|
||||
```
|
||||
|
||||
**Mesh3D**:三角/四边形网格(ShadeMesh 的几何基础)
|
||||
```json
|
||||
{
|
||||
"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`、`setpoint`
|
||||
- `Face` 级:`construction`(引用)、`vent_crack`(AirflowNetwork 裂缝)
|
||||
- `Aperture` 级:`construction`(引用)、`vent_opening`
|
||||
- `Shade` 级:`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 层级。
|
||||
|
||||
设计原则:
|
||||
1. 完全向后兼容——`sites[].buildings[]` 是标准 HBJSON Model,现有工具无需修改
|
||||
2. 增量扩展——只增加 Site 和 Urban 两个新层级
|
||||
3. 可分级模拟——可只取一个 Site 做社区模拟,也可取全部做城市模拟
|
||||
|
||||
---
|
||||
|
||||
## 五、MultiScaleModel Schema 设计
|
||||
|
||||
### 5.1 顶层结构
|
||||
|
||||
```json
|
||||
{
|
||||
"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 Model
|
||||
- `sites[].terrain/infrastructure` → 由 bps/community 定义
|
||||
- `properties.urban` → 由 bps/urban 定义
|
||||
Reference in New Issue
Block a user