From 1f7ba8ee47bf3b0038fb29639f2f2da35ad7bd1f Mon Sep 17 00:00:00 2001 From: ringo Date: Fri, 29 May 2026 14:33:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(schema):=20=E6=89=A9=E5=B1=95=E7=A4=BE?= =?UTF-8?q?=E5=8C=BA=E7=BA=A7=E6=A8=A1=E5=BC=8F=E5=AE=9A=E4=B9=89=E5=BB=BA?= =?UTF-8?q?=E7=AD=91=E5=BC=95=E7=94=A8=E5=92=8C=E8=83=BD=E6=BA=90=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 schema-community.json 中扩展描述字段,增加建筑引用、气象和模拟配置支持 - 添加 BuildingRef 和 CommunityBuildingAttributes 定义社区级建筑属性 - 添加 WeatherContext 和 SimulationContext 支持气象数据和模拟参数配置 - 在 schema-community-energy.json 中扩展描述字段,增加社区级能源需求聚合功能 - 添加 BuildingEnergyDemand、AggregatedEnergyDemand 和 CommunityEnergyDemand 结构 - 添加 DistrictEnergy 的设计温度配置字段 - 格式化 JSON 模式定义,简化数组和对象表示法 - 创建 docs/cea-mapping.md 文档,详细说明 bps-schema 与 CEA 软件的字段映射关系 - 包含社区几何、能源系统、数据库引用和参考案例的完整映射示例 --- docs/cea-mapping.md | 281 ++++++++++++++++++++++++++++ schema-community-energy.json | 301 ++++++++++++++---------------- schema-community.json | 344 ++++++++++++++++------------------- 3 files changed, 578 insertions(+), 348 deletions(-) create mode 100644 docs/cea-mapping.md diff --git a/docs/cea-mapping.md b/docs/cea-mapping.md new file mode 100644 index 0000000..1b60761 --- /dev/null +++ b/docs/cea-mapping.md @@ -0,0 +1,281 @@ +# bps-schema 与 CEA 软件字段映射 + +> 日期:2026-05-29 +> 版本:v1 — 社区尺度初次对齐 + +--- + +## 一、文件级映射 + +bps-schema 按几何尺度和模拟域分文件管理。以下列出各 schema 文件与 CEA 输入/输出文件的对应关系。 + +| bps-schema 文件 | 对应 CEA 文件/数据 | 说明 | +|----------------|-------------------|------| +| `schema-community.json` | `zone.shp`(建筑底图)
`streets.shp`(路网)
`terrain.shp`(地形)
`surroundings.shp`(周边地物)
`.cache/supply-system/`(缓存) | 社区级几何+建筑引用+气象配置 | +| `schema-community-energy.json` | `inputs/technology/components/`
`inputs/technology/assemblies/`
`outputs/data/demand/Total_demand.csv` | 区域能源系统+用能需求输出 | +| `schema-community-cfd.json` | 不直接对应 CEA(CEA 无 CFD) | CFD 风环境参数 | +| `schema-community-microclimate.json` | 不直接对应 CEA(CEA 不模拟微气候) | 微气候参数 | +| `schema-building.json` | `zone.shp` 每栋建筑记录
`inputs/building-properties/*.dbf`
`inputs/building-geometry/zone.shp` | 建筑级几何(HBJSON) | +| `schema-energy.json` | `inputs/technology/archetypes/`
`inputs/technology/assemblies/` | EnergyPlus 模拟参数(其他团队负责) | +| `schema-urban.json` | 不直接对应 CEA(CEA 社区级为顶层) | 城市级几何 | + +--- + +## 二、社区级几何映射(schema-community.json) + +### 2.1 Site 对象 + +| bps-schema 字段 | CEA 来源 | CEA 路径/文件 | 说明 | +|----------------|---------|-------------|------| +| `type` | 常量 `"Site"` | — | — | +| `boundary` | CEA 无直接对应 | — | 场地边界多边形(CEA 以建筑集合隐式定义场地) | +| `terrain` | `terrain.shp` | `inputs/topography/terrain.shp` | 地形格网/TIN | +| `roads` | `streets.shp` | `inputs/networks/streets.shp` | 道路中心线与宽度 | +| `green_spaces` | `surroundings.shp` | `inputs/surroundings/surroundings.shp`(部分) | 周边绿地 | +| `water_bodies` | `surroundings.shp`(部分) | `inputs/surroundings/surroundings.shp` | 水体边界 | +| `buildings` | `zone.shp` | `inputs/building-geometry/zone.shp` | **新增**,建筑引用列表 | +| `weather` | `weather.epw` | `inputs/weather/weather.epw` | **新增**,气象数据引用 | +| `simulation_context` | `default.config` | `cea/default.config` | **新增**,模拟配置 | + +### 2.2 BuildingRef → 建筑引用 + +| bps-schema 字段 | CEA 来源 | 说明 | +|----------------|---------|------| +| `type` | 常量 `"BuildingRef"` | — | +| `ref` | `zone.shp → Name` | 指向 schema-building.json 的建筑 identifier | +| `community_attributes` | zone.shp 多列 + typology.dbf | 社区尺度的建筑属性(见下) | + +### 2.3 CommunityBuildingAttributes + +CEA 字段→bps-schema 字段的逐列映射,来源为 `zone.shp` + `typology.dbf`。 + +| bps-schema 字段 | CEA 字段 | CEA 来源 | 类型/格式 | 说明 | +|----------------|---------|---------|----------|------| +| `primary_use_type` | `1ST_USE` | `typology.dbf` | string | 主要使用类型枚举,参考 CEA `USE_TYPES.csv` | +| `construction_standard` | `STANDARD` | `typology.dbf` | string | CEA 构造标准代码,如 STANDARD2/5 | +| `year_of_construction` | `YEAR` | `typology.dbf` | integer | 建成年份 | +| `floors_above_ground` | `floors_ag` | `zone.shp` | integer | 地上层数 | +| `floors_below_ground` | `floors_bg` | `zone.shp` | integer | 地下层数 | +| `height_above_ground_m` | `height_ag` | `zone.shp` | number | 地上高度(m) | +| `height_below_ground_m` | `height_bg` | `zone.shp` | number | 地下高度(m) | +| `footprint_m2` | `geometry.area` | `zone.shp` | number | 底面积(m²),由几何计算 | +| `heated_share` | `Hs_ag` | `architecture.dbf` | [0,1] | 地上部分热区比例 | +| `occupied_share` | `Ns` | `architecture.dbf` | [0,1] | 地上部分占位比例 | +| `electrified_share` | `Es` | `architecture.dbf` | [0,1] | 电气化比例 | +| `basement_conditioned` | `Hs_bg`(推断) | `architecture.dbf` | boolean | 地下室是否空调 | +| `void_deck_floors` | `void_deck` | `zone.shp` | number | 架空层数 | + +### 2.4 WeatherContext + +| bps-schema 字段 | CEA 来源 | 说明 | +|----------------|---------|------| +| `type` | 常量 `"WeatherContext"` | — | +| `epw_file_path` | `config.general → weather` | EPW 文件路径 | +| `climate_zone` | `default.config → databases-path` | 气候区标识:CH/SG/DE | +| `location.latitude` | EPW 文件头 | 纬度 | +| `location.longitude` | EPW 文件头 | 经度 | +| `location.timezone_offset` | EPW 文件头 | 时区偏移 | + +### 2.5 SimulationContext + +| bps-schema 字段 | CEA 来源 | CEA 配置键 | 说明 | +|----------------|---------|-----------|------| +| `type` | 常量 `"SimulationContext"` | — | — | +| `database_region` | `database-helper → databases-path` | `[database-helper] databases-path` | CH/SG/DE | +| `scenario_name` | `config.general → scenario-name` | `[general] scenario-name` | 场景名,如 baseline | +| `description` | 用户定义 | — | 场景描述 | + +--- + +## 三、社区级能源映射(schema-community-energy.json) + +### 3.1 Plant / Network / Pipe + +| bps-schema | CEA 来源 | 说明 | +|-----------|---------|------| +| `Plant.plant_type` | `cea/technologies/supply_systems/` | CEA 供给系统类型枚举 | +| `Plant.rated_capacity` | `cea/databases/CH/SUPPLY_*.csv` | 额定容量 | +| `Plant.cop` | `cea/databases/CH/SUPPLY_*.csv` | 能效比 | +| `Network.network_type` | `cea/technologies/network_layout/` | 管网类型 | +| `Network.supply_temperature` | 用户配置 | 供温 | +| `Network.return_temperature` | 用户配置 | 回温 | +| `Pipe.diameter` | 管网优化输出 | 管径 | +| `Pipe.insulation_thickness` | `cea/databases/CH/DISTRIBUTION.csv` | 保温厚度 | +| `BuildingConnection.design_flow_rate` | 水力计算输出 | 设计流量 | + +### 3.2 CommunityEnergyDemand(CEA 模拟输出) + +CEA 的 `Total_demand.csv` 包含每栋建筑的年度用能汇总。以下映射关系: + +| bps-schema 字段 | CEA Total_demand.csv 字段 | 计算方式 | +|----------------|--------------------------|---------| +| `BuildingEnergyDemand.building_ref` | `name` | 建筑标识符 | +| `BuildingEnergyDemand.gross_floor_area_m2` | `GFA_m2` | 建筑面积 | +| `BuildingEnergyDemand.conditioned_floor_area_m2` | `Af_m2` | 空调面积 | +| `annual.heating_mwh` | `QH_sys_MWhyr` | 总供热(sys 端) | +| `annual.cooling_mwh` | `QC_sys_MWhyr` | 总供冷(sys 端) | +| `annual.electricity_mwh` | `E_sys_MWhyr` | 总电力 | +| `annual.dhw_mwh` | `Qww_sys_MWhyr` | 生活热水 | +| `annual.total_mwh` | 各列求和 | 总用能 | +| `peak_heating_kw` | `QH_sys0_kW` | 供热峰值 | +| `peak_cooling_kw` | `QC_sys0_kW` | 供冷峰值 | + +**聚合字段 AggregatedEnergyDemand**: + +| bps-schema 字段 | 计算公式 | +|----------------|---------| +| `total_buildings` | 建筑栋数 | +| `total_gfa_m2` | Σ GFA_m2 | +| `total_conditioned_m2` | Σ Af_m2 | +| `total_heating_mwh` | Σ QH_sys_MWhyr | +| `total_cooling_mwh` | Σ QC_sys_MWhyr | +| `total_electricity_mwh` | Σ E_sys_MWhyr | +| `total_dhw_mwh` | Σ Qww_sys_MWhyr | +| `total_energy_mwh` | Σ(以上四项) | +| `energy_use_intensity_kwh_m2` | total_energy_mwh × 1000 / total_gfa_m2 | + +### 3.3 DistrictEnergy 新增字段 + +| bps-schema 字段 | CEA 来源 | 说明 | +|----------------|---------|------| +| `demand` | `outputs/data/demand/Total_demand.csv` | **新增**,引用 CommunityEnergyDemand | +| `supply_temperature_hw_c` | `cea/default.config → demand` | 供热设计供温 | +| `return_temperature_hw_c` | `cea/default.config → demand` | 供热设计回温 | +| `supply_temperature_chw_c` | `cea/default.config → demand` | 供冷设计供温 | +| `return_temperature_chw_c` | `cea/default.config → demand` | 供冷设计回温 | + +--- + +## 四、CEA 数据库到 bps-schema 的引用体系 + +CEA 内置数据库(`cea/databases/CH/`)定义了构造/系统/设备的标准参数,bps-schema 中通过 code 字段引用: + +``` +bps-schema CommunityBuildingAttributes + └── primary_use_type ──────→ CH/ARCHETYPES/USE/USE_TYPES.csv + └── construction_standard ─→ CH/ARCHETYPES/CONSTRUCTION/CONSTRUCTION_TYPES.csv + +bps-schema building 侧(其他团队负责) + └── envelope codes ───────→ CH/ASSEMBLIES/ENVELOPE/*.csv + └── hvac codes ───────────→ CH/ASSEMBLIES/HVAC/*.csv + └── supply codes ─────────→ CH/ASSEMBLIES/SUPPLY/*.csv +``` + +--- + +## 五、CEA 参考案例映射示例 + +以 CEA 参考案例中 B1000 建筑为例,展示完整的社区级数据映射: + +```json +{ + "type": "Site", + "identifier": "zurich-open-baseline", + "boundary": [[463100, 15224700], [463300, 15224700], ...], + "buildings": [ + { + "type": "BuildingRef", + "ref": "B1000", + "community_attributes": { + "primary_use_type": "OFFICE", + "construction_standard": "STANDARD2", + "year_of_construction": 1943, + "floors_above_ground": 7, + "floors_below_ground": 1, + "height_above_ground_m": 21, + "footprint_m2": 1509, + "heated_share": 0.95, + "occupied_share": 0.85, + "electrified_share": 0.9, + "basement_conditioned": true, + "void_deck_floors": 0 + } + } + ], + "weather": { + "type": "WeatherContext", + "epw_file_path": "inputs/weather/weather.epw", + "climate_zone": "CH" + }, + "simulation_context": { + "type": "SimulationContext", + "database_region": "CH", + "scenario_name": "baseline", + "description": "Zurich Open reference case baseline" + }, + "roads": [ ... ], + "green_spaces": [ ... ] +} +``` + +CEA 模拟输出到 bps-schema 的 CommunityEnergyDemand 映射: + +```json +{ + "type": "CommunityEnergyDemand", + "identifier": "zurich-baseline-demand", + "buildings": [ + { + "building_ref": "B1000", + "gross_floor_area_m2": 12071, + "conditioned_floor_area_m2": 8865, + "annual": { + "heating_mwh": 755.3, + "cooling_mwh": 42.8, + "electricity_mwh": 31.2, + "dhw_mwh": 63.5, + "total_mwh": 892.8 + }, + "peak_heating_kw": 632.3, + "peak_cooling_kw": 131.9 + } + ], + "aggregated": { + "total_buildings": 15, + "total_gfa_m2": 84422, + "total_heating_mwh": 4878.2, + "total_cooling_mwh": 184.9, + "total_electricity_mwh": 133.2, + "total_dhw_mwh": 583.3, + "total_energy_mwh": 5779.6, + "energy_use_intensity_kwh_m2": 68.5 + } +} +``` + +--- + +## 六、未覆盖项(已知缺口) + +以下 CEA 数据在当前 bps-schema 中尚无对应定义,供后续版本参考: + +| CEA 数据 | 建议归属 | 说明 | +|---------|---------|------| +| `inputs/building-properties/envelope.csv`(围护构造选型) | building schema | 其他团队负责 | +| `inputs/building-properties/hvac.csv`(暖通系统选型) | building schema | 其他团队负责 | +| `inputs/building-properties/supply.csv`(供给系统选型) | building schema | 其他团队负责 | +| `inputs/building-properties/internal_loads.csv`(内部负荷) | building schema | 其他团队负责 | +| `inputs/building-properties/indoor_comfort.csv`(舒适度参数) | building schema | 其他团队负责 | +| `inputs/building-properties/schedules/`(逐时作息) | 社区级或新增 | 可复用的作息模板定义 | +| `cea/databases/CH/ASSEMBLIES/`(装配库) | 新增 schema-assemblies | 构造/暖通/供给系统的目录库 | +| `cea/databases/CH/COMPONENTS/`(组件库) | 新增 schema-components | 设备详细参数 | +| `outputs/data/demand/{building}.csv`(逐时输出) | 社区级或 building | 可选,76列×8760行逐时数据 | + +--- + +## 附录 A:CEA 枚举值参考 + +### A.1 USE_TYPES + +CEA 使用类型枚举(来源:`cea/databases/CH/ARCHETYPES/USE/USE_TYPES.csv`): + +`OFFICE`, `SCHOOL`, `RETAIL`, `MULTI_RES`, `SINGLE_RES`, `HOTEL`, `HOSPITAL`, `INDUSTRIAL`, `RESTAURANT`, `GYM`, `LIBRARY`, `MUSEUM`, `PARKING`, `SWIMMING`, `LAB`, `SERVERROOM`, `FOODSTORE`, `UNIVERSITY`, `COOLROOM` + +### A.2 数据库区域 + +`CH` = 瑞士(温带气候基准),`SG` = 新加坡(热带气候),`DE` = 德国 + +### A.3 Construction Standard + +CEA 构造标准代码(来源:`cea/databases/CH/ARCHETYPES/CONSTRUCTION/CONSTRUCTION_TYPES.csv`): +`STANDARD1` ~ `STANDARD6`,对应不同年代的围护结构传热系数水平。 diff --git a/schema-community-energy.json b/schema-community-energy.json index 7e0025d..fc8dafd 100644 --- a/schema-community-energy.json +++ b/schema-community-energy.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "bps/community-energy", "title": "Community-Scale Energy Schema", - "description": "District energy system parameters for community scale. Covers plants, networks, pipes, and building connections.", + "description": "District energy system parameters for community scale. Covers plants, networks, pipes, building connections, and community-level energy demand aggregation.", "$defs": { "_IdentifiedObject": { "type": "object", @@ -14,88 +14,45 @@ "maxLength": 100 }, "display_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "user_data": { - "type": [ - "object", - "null" - ] + "type": ["object", "null"] } }, - "required": [ - "identifier" - ] + "required": ["identifier"] }, "PlantType": { "type": "string", "enum": [ - "CHP", - "GasBoiler", - "ElectricBoiler", - "GroundSourceHeatPump", - "AirSourceHeatPump", - "Chiller", - "CoolingTower", - "ThermalStorage", - "SolarThermal", - "PV" + "CHP", "GasBoiler", "ElectricBoiler", + "GroundSourceHeatPump", "AirSourceHeatPump", + "Chiller", "CoolingTower", + "ThermalStorage", "SolarThermal", "PV" ] }, "NetworkType": { "type": "string", - "enum": [ - "CHW", - "HW", - "Steam", - "Electricity" - ] + "enum": ["CHW", "HW", "Steam", "Electricity"] }, "Plant": { "type": "object", "allOf": [ - { - "$ref": "#/$defs/_IdentifiedObject" - }, + { "$ref": "#/$defs/_IdentifiedObject" }, { "type": "object", "properties": { - "type": { - "const": "Plant" - }, - "plant_type": { - "$ref": "#/$defs/PlantType" - }, - "rated_capacity": { - "type": "number", - "exclusiveMinimum": 0, - "description": "kW" - }, - "cop": { - "type": "number", - "exclusiveMinimum": 0 - }, - "fuel_type": { - "type": "string", - "default": "natural_gas" - }, + "type": { "const": "Plant" }, + "plant_type": { "$ref": "#/$defs/PlantType" }, + "rated_capacity": { "type": "number", "exclusiveMinimum": 0, "description": "kW" }, + "cop": { "type": "number", "exclusiveMinimum": 0 }, + "fuel_type": { "type": "string", "default": "natural_gas" }, "location": { - "type": "array", - "items": { - "type": "number" - }, - "minItems": 3, - "maxItems": 3 + "type": "array", "items": { "type": "number" }, + "minItems": 3, "maxItems": 3 } }, - "required": [ - "type", - "plant_type", - "rated_capacity" - ], + "required": ["type", "plant_type", "rated_capacity"], "additionalProperties": false } ] @@ -103,49 +60,19 @@ "Pipe": { "type": "object", "allOf": [ - { - "$ref": "#/$defs/_IdentifiedObject" - }, + { "$ref": "#/$defs/_IdentifiedObject" }, { "type": "object", "properties": { - "type": { - "const": "Pipe" - }, - "start_node": { - "type": "string" - }, - "end_node": { - "type": "string" - }, - "length": { - "type": "number", - "exclusiveMinimum": 0, - "description": "m" - }, - "diameter": { - "type": "number", - "exclusiveMinimum": 0, - "description": "m" - }, - "insulation_thickness": { - "type": "number", - "minimum": 0, - "default": 0 - }, - "insulation_conductivity": { - "type": "number", - "exclusiveMinimum": 0, - "default": 0.04 - } + "type": { "const": "Pipe" }, + "start_node": { "type": "string" }, + "end_node": { "type": "string" }, + "length": { "type": "number", "exclusiveMinimum": 0, "description": "m" }, + "diameter": { "type": "number", "exclusiveMinimum": 0, "description": "m" }, + "insulation_thickness": { "type": "number", "minimum": 0, "default": 0 }, + "insulation_conductivity": { "type": "number", "exclusiveMinimum": 0, "default": 0.04 } }, - "required": [ - "type", - "start_node", - "end_node", - "length", - "diameter" - ], + "required": ["type", "start_node", "end_node", "length", "diameter"], "additionalProperties": false } ] @@ -153,38 +80,20 @@ "Network": { "type": "object", "allOf": [ - { - "$ref": "#/$defs/_IdentifiedObject" - }, + { "$ref": "#/$defs/_IdentifiedObject" }, { "type": "object", "properties": { - "type": { - "const": "Network" - }, - "network_type": { - "$ref": "#/$defs/NetworkType" - }, - "supply_temperature": { - "type": "number", - "description": "Celsius" - }, - "return_temperature": { - "type": "number", - "description": "Celsius" - }, + "type": { "const": "Network" }, + "network_type": { "$ref": "#/$defs/NetworkType" }, + "supply_temperature": { "type": "number", "description": "Celsius" }, + "return_temperature": { "type": "number", "description": "Celsius" }, "pipes": { "type": "array", - "items": { - "$ref": "#/$defs/Pipe" - } + "items": { "$ref": "#/$defs/Pipe" } } }, - "required": [ - "type", - "network_type", - "pipes" - ], + "required": ["type", "network_type", "pipes"], "additionalProperties": false } ] @@ -192,72 +101,134 @@ "BuildingConnection": { "type": "object", "allOf": [ - { - "$ref": "#/$defs/_IdentifiedObject" - }, + { "$ref": "#/$defs/_IdentifiedObject" }, { "type": "object", "properties": { - "type": { - "const": "BuildingConnection" - }, - "building_ref": { - "type": "string" - }, - "network_ref": { - "type": "string" - }, - "design_flow_rate": { - "type": "number", - "exclusiveMinimum": 0 - } + "type": { "const": "BuildingConnection" }, + "building_ref": { "type": "string" }, + "network_ref": { "type": "string" }, + "design_flow_rate": { "type": "number", "exclusiveMinimum": 0 } }, - "required": [ - "type", - "building_ref", - "network_ref" - ], + "required": ["type", "building_ref", "network_ref"], "additionalProperties": false } ] }, - "DistrictEnergy": { + + "BuildingEnergyDemand": { + "type": "object", + "properties": { + "building_ref": { + "type": "string", + "description": "对应 schema-community.json 中 BuildingRef.ref 的标识符" + }, + "gross_floor_area_m2": { "type": "number" }, + "conditioned_floor_area_m2": { "type": "number" }, + "annual": { + "type": "object", + "properties": { + "heating_mwh": { "type": "number" }, + "cooling_mwh": { "type": "number" }, + "electricity_mwh": { "type": "number" }, + "dhw_mwh": { "type": "number" }, + "total_mwh": { "type": "number" } + }, + "required": ["heating_mwh", "cooling_mwh", "electricity_mwh", "dhw_mwh"] + }, + "peak_heating_kw": { "type": "number" }, + "peak_cooling_kw": { "type": "number" } + }, + "required": ["building_ref", "annual"], + "additionalProperties": false + }, + + "AggregatedEnergyDemand": { + "type": "object", + "properties": { + "total_buildings": { "type": "integer", "minimum": 0 }, + "total_gfa_m2": { "type": "number" }, + "total_conditioned_m2": { "type": "number" }, + "total_heating_mwh": { "type": "number" }, + "total_cooling_mwh": { "type": "number" }, + "total_electricity_mwh": { "type": "number" }, + "total_dhw_mwh": { "type": "number" }, + "total_energy_mwh": { "type": "number" }, + "energy_use_intensity_kwh_m2": { "type": "number" } + }, + "required": ["total_buildings", "total_energy_mwh"], + "additionalProperties": false + }, + + "CommunityEnergyDemand": { "type": "object", "allOf": [ - { - "$ref": "#/$defs/_IdentifiedObject" - }, + { "$ref": "#/$defs/_IdentifiedObject" }, { "type": "object", "properties": { - "type": { - "const": "DistrictEnergy" + "type": { "const": "CommunityEnergyDemand" }, + "buildings": { + "type": "array", + "items": { "$ref": "#/$defs/BuildingEnergyDemand" }, + "description": "每栋建筑的年度用能需求明细" }, + "aggregated": { + "$ref": "#/$defs/AggregatedEnergyDemand", + "description": "社区聚合指标" + } + }, + "required": ["type"], + "additionalProperties": false + } + ] + }, + + "DistrictEnergy": { + "type": "object", + "allOf": [ + { "$ref": "#/$defs/_IdentifiedObject" }, + { + "type": "object", + "properties": { + "type": { "const": "DistrictEnergy" }, "plants": { "type": "array", - "items": { - "$ref": "#/$defs/Plant" - } + "items": { "$ref": "#/$defs/Plant" } }, "networks": { "type": "array", - "items": { - "$ref": "#/$defs/Network" - } + "items": { "$ref": "#/$defs/Network" } }, "connections": { "type": "array", - "items": { - "$ref": "#/$defs/BuildingConnection" - } + "items": { "$ref": "#/$defs/BuildingConnection" } + }, + "demand": { + "$ref": "#/$defs/CommunityEnergyDemand", + "description": "区域能源系统的负荷输入(来自建筑需求模拟)" + }, + "supply_temperature_hw_c": { + "type": "number", + "description": "供热管网设计供温" + }, + "return_temperature_hw_c": { + "type": "number", + "description": "供热管网设计回温" + }, + "supply_temperature_chw_c": { + "type": "number", + "description": "供冷管网设计供温" + }, + "return_temperature_chw_c": { + "type": "number", + "description": "供冷管网设计回温" } }, - "required": [ - "type" - ], + "required": ["type"], "additionalProperties": false } ] } } -} \ No newline at end of file +} diff --git a/schema-community.json b/schema-community.json index 991bd95..4223ec9 100644 --- a/schema-community.json +++ b/schema-community.json @@ -2,7 +2,7 @@ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "bps/community", "title": "Community-Scale Geometry Schema", - "description": "Community/site scale geometry: site boundaries, terrain, roads, green spaces, and water bodies. Energy, CFD, and other simulation parameters are in separate schema-community-*.json files.", + "description": "Community/site scale geometry: site boundaries, terrain, roads, green spaces, water bodies, building references, weather context, and simulation configuration. Energy, CFD, and other simulation parameters are in separate schema-community-*.json files.", "$defs": { "_IdentifiedObject": { "type": "object", @@ -14,69 +14,32 @@ "maxLength": 100 }, "display_name": { - "type": [ - "string", - "null" - ] + "type": ["string", "null"] }, "user_data": { - "type": [ - "object", - "null" - ] + "type": ["object", "null"] } }, - "required": [ - "identifier" - ] + "required": ["identifier"] }, "TerrainGrid": { "type": "object", "allOf": [ - { - "$ref": "#/$defs/_IdentifiedObject" - }, + { "$ref": "#/$defs/_IdentifiedObject" }, { "type": "object", "properties": { - "type": { - "const": "TerrainGrid" - }, + "type": { "const": "TerrainGrid" }, "grid_origin": { - "type": "array", - "items": { - "type": "number" - }, - "minItems": 3, - "maxItems": 3 + "type": "array", "items": { "type": "number" }, + "minItems": 3, "maxItems": 3 }, - "grid_size_x": { - "type": "integer", - "minimum": 1 - }, - "grid_size_y": { - "type": "integer", - "minimum": 1 - }, - "cell_size": { - "type": "number", - "exclusiveMinimum": 0 - }, - "elevations": { - "type": "array", - "items": { - "type": "number" - } - } + "grid_size_x": { "type": "integer", "minimum": 1 }, + "grid_size_y": { "type": "integer", "minimum": 1 }, + "cell_size": { "type": "number", "exclusiveMinimum": 0 }, + "elevations": { "type": "array", "items": { "type": "number" } } }, - "required": [ - "type", - "grid_origin", - "grid_size_x", - "grid_size_y", - "cell_size", - "elevations" - ], + "required": ["type", "grid_origin", "grid_size_x", "grid_size_y", "cell_size", "elevations"], "additionalProperties": false } ] @@ -84,46 +47,29 @@ "TerrainTIN": { "type": "object", "allOf": [ - { - "$ref": "#/$defs/_IdentifiedObject" - }, + { "$ref": "#/$defs/_IdentifiedObject" }, { "type": "object", "properties": { - "type": { - "const": "TerrainTIN" - }, + "type": { "const": "TerrainTIN" }, "vertices": { "type": "array", "items": { - "type": "array", - "items": { - "type": "number" - }, - "minItems": 3, - "maxItems": 3 + "type": "array", "items": { "type": "number" }, + "minItems": 3, "maxItems": 3 }, "minItems": 3 }, "triangles": { "type": "array", "items": { - "type": "array", - "items": { - "type": "integer", - "minimum": 0 - }, - "minItems": 3, - "maxItems": 3 + "type": "array", "items": { "type": "integer", "minimum": 0 }, + "minItems": 3, "maxItems": 3 }, "minItems": 1 } }, - "required": [ - "type", - "vertices", - "triangles" - ], + "required": ["type", "vertices", "triangles"], "additionalProperties": false } ] @@ -131,41 +77,23 @@ "Road": { "type": "object", "allOf": [ - { - "$ref": "#/$defs/_IdentifiedObject" - }, + { "$ref": "#/$defs/_IdentifiedObject" }, { "type": "object", "properties": { - "type": { - "const": "Road" - }, + "type": { "const": "Road" }, "centerline": { "type": "array", "items": { - "type": "array", - "items": { - "type": "number" - }, - "minItems": 2, - "maxItems": 3 + "type": "array", "items": { "type": "number" }, + "minItems": 2, "maxItems": 3 }, "minItems": 2 }, - "width": { - "type": "number", - "exclusiveMinimum": 0 - }, - "surface_material": { - "type": "string", - "default": "asphalt" - } + "width": { "type": "number", "exclusiveMinimum": 0 }, + "surface_material": { "type": "string", "default": "asphalt" } }, - "required": [ - "type", - "centerline", - "width" - ], + "required": ["type", "centerline", "width"], "additionalProperties": false } ] @@ -173,41 +101,23 @@ "GreenSpace": { "type": "object", "allOf": [ - { - "$ref": "#/$defs/_IdentifiedObject" - }, + { "$ref": "#/$defs/_IdentifiedObject" }, { "type": "object", "properties": { - "type": { - "const": "GreenSpace" - }, + "type": { "const": "GreenSpace" }, "boundary": { "type": "array", "items": { - "type": "array", - "items": { - "type": "number" - }, - "minItems": 2, - "maxItems": 2 + "type": "array", "items": { "type": "number" }, + "minItems": 2, "maxItems": 2 }, "minItems": 3 }, - "vegetation_type": { - "type": "string", - "default": "grass" - }, - "leaf_area_index": { - "type": "number", - "minimum": 0, - "default": 1 - } + "vegetation_type": { "type": "string", "default": "grass" }, + "leaf_area_index": { "type": "number", "minimum": 0, "default": 1 } }, - "required": [ - "type", - "boundary" - ], + "required": ["type", "boundary"], "additionalProperties": false } ] @@ -215,107 +125,175 @@ "WaterBody": { "type": "object", "allOf": [ - { - "$ref": "#/$defs/_IdentifiedObject" - }, + { "$ref": "#/$defs/_IdentifiedObject" }, { "type": "object", "properties": { - "type": { - "const": "WaterBody" - }, + "type": { "const": "WaterBody" }, "boundary": { "type": "array", "items": { - "type": "array", - "items": { - "type": "number" - }, - "minItems": 2, - "maxItems": 2 + "type": "array", "items": { "type": "number" }, + "minItems": 2, "maxItems": 2 }, "minItems": 3 }, - "depth": { - "type": "number", - "exclusiveMinimum": 0, - "default": 1 - }, - "water_temperature": { - "type": "number", - "default": 20 - } + "depth": { "type": "number", "exclusiveMinimum": 0, "default": 1 }, + "water_temperature": { "type": "number", "default": 20 } }, - "required": [ - "type", - "boundary" - ], + "required": ["type", "boundary"], "additionalProperties": false } ] }, + + "BuildingRef": { + "type": "object", + "properties": { + "type": { "const": "BuildingRef" }, + "ref": { + "type": "string", + "description": "指向 schema-building.json 中定义的建筑 identifier" + }, + "community_attributes": { + "$ref": "#/$defs/CommunityBuildingAttributes", + "description": "社区尺度的建筑属性。仅包含社区模拟必需的字段,不重复建筑 schema 的定义。" + } + }, + "required": ["type", "ref"], + "additionalProperties": false + }, + + "CommunityBuildingAttributes": { + "type": "object", + "properties": { + "primary_use_type": { + "type": "string", + "description": "CEA use type code. 如 OFFICE, SCHOOL, RETAIL, MULTI_RES, SINGLE_RES, HOTEL, HOSPITAL, INDUSTRIAL, RESTAURANT, GYM, LIBRARY, MUSEUM, PARKING, SWIMMING, LAB, SERVERROOM, FOODSTORE, UNIVERSITY, COOLROOM" + }, + "construction_standard": { + "type": "string", + "description": "CEA construction standard code, 如 STANDARD2, STANDARD5 等" + }, + "year_of_construction": { "type": "integer", "minimum": 1800, "maximum": 2100 }, + "floors_above_ground": { "type": "integer", "minimum": 0 }, + "floors_below_ground": { "type": "integer", "minimum": 0 }, + "height_above_ground_m": { "type": "number", "exclusiveMinimum": 0 }, + "height_below_ground_m": { "type": "number", "minimum": 0 }, + "footprint_m2": { "type": "number", "exclusiveMinimum": 0 }, + "heated_share": { "type": "number", "minimum": 0, "maximum": 1, "default": 1 }, + "occupied_share": { "type": "number", "minimum": 0, "maximum": 1, "default": 1 }, + "electrified_share": { "type": "number", "minimum": 0, "maximum": 1, "default": 1 }, + "basement_conditioned": { "type": "boolean", "default": true }, + "void_deck_floors": { "type": "number", "minimum": 0, "default": 0 } + }, + "required": ["primary_use_type"], + "additionalProperties": false + }, + + "WeatherContext": { + "type": "object", + "properties": { + "type": { "const": "WeatherContext" }, + "epw_file_path": { + "type": "string", + "description": "EPW 气象文件路径" + }, + "climate_zone": { + "type": "string", + "description": "气候区标识,如 CH(瑞士)/ SG(新加坡)/ DE(德国)" + }, + "location": { + "type": "object", + "properties": { + "latitude": { "type": "number" }, + "longitude": { "type": "number" }, + "timezone_offset": { "type": "integer" } + }, + "additionalProperties": false + } + }, + "required": ["type"], + "additionalProperties": false + }, + + "SimulationContext": { + "type": "object", + "properties": { + "type": { "const": "SimulationContext" }, + "database_region": { + "type": "string", + "enum": ["CH", "SG", "DE"], + "default": "CH", + "description": "CEA 数据库区域。不同气候区使用不同的建筑类型学、构造和组件数据库。" + }, + "scenario_name": { + "type": "string", + "default": "baseline", + "description": "CEA 场景名称,用于组织输入/输出目录" + }, + "description": { + "type": "string", + "description": "场景描述,如 baseline / retrofit / future climate" + } + }, + "required": ["type"], + "additionalProperties": false + }, + "Site": { "type": "object", "allOf": [ - { - "$ref": "#/$defs/_IdentifiedObject" - }, + { "$ref": "#/$defs/_IdentifiedObject" }, { "type": "object", "properties": { - "type": { - "const": "Site" - }, + "type": { "const": "Site" }, "boundary": { "type": "array", "items": { - "type": "array", - "items": { - "type": "number" - }, - "minItems": 2, - "maxItems": 2 + "type": "array", "items": { "type": "number" }, + "minItems": 2, "maxItems": 2 }, "minItems": 3 }, "terrain": { "oneOf": [ - { - "$ref": "#/$defs/TerrainGrid" - }, - { - "$ref": "#/$defs/TerrainTIN" - }, - { - "type": "null" - } + { "$ref": "#/$defs/TerrainGrid" }, + { "$ref": "#/$defs/TerrainTIN" }, + { "type": "null" } ] }, "roads": { "type": "array", - "items": { - "$ref": "#/$defs/Road" - } + "items": { "$ref": "#/$defs/Road" } }, "green_spaces": { "type": "array", - "items": { - "$ref": "#/$defs/GreenSpace" - } + "items": { "$ref": "#/$defs/GreenSpace" } }, "water_bodies": { "type": "array", - "items": { - "$ref": "#/$defs/WaterBody" - } + "items": { "$ref": "#/$defs/WaterBody" } + }, + "buildings": { + "type": "array", + "items": { "$ref": "#/$defs/BuildingRef" }, + "description": "社区包含的建筑列表。标识符引用 schema-building.json 中定义的建筑。" + }, + "weather": { + "$ref": "#/$defs/WeatherContext", + "description": "社区模拟的气象数据上下文。" + }, + "simulation_context": { + "$ref": "#/$defs/SimulationContext", + "description": "社区级模拟参数配置。" } }, - "required": [ - "type" - ], + "required": ["type"], "additionalProperties": false } ] } } -} \ No newline at end of file +}