教程 11:报告

要访问 CityEngine 中的教程,请单击帮助 > 下载教程和示例。 在选择教程或示例后,系统会自动下载工程并将其添加到您的工作空间。

报告功能扩充了 CityEngine 除了生成几何之外的功能;支持基于规则的计算以及模型参数的累积。 这意味着您不仅能可视化城市总体规划,还可通过生成数字报表的方式对其进行扩充(例如,通过 .csv 生成 Excel 表)。 与 3D 模型一样,您可以使用 CGA 形状语法生成报表。 可以在用于生成几何的对应规则中包含报告操作,或可以仅为报告创建 CGA 形状语法规则集。

报告操作可用于报告建筑物设计或总体规划的任意属性。 因此,报告操作完全通用且支持自定义。 例如,可以包含数字,例如总建筑面积 (GFA)、单元数或土地利用混合。 此外,通过更改城市设计(即,重新生成模型),报表还会自动即时更新。 本教程介绍了一个示例方案,该方案从头开始构建总体规划并使用报告功能分析现有地理空间数据。

报告表格

面积报表

教程中的这一部分介绍了如何在 CGA 文件中嵌入报告操作以及如何生成最终报表。

设置

打开 Tutorial_11_Reporting/scenes/reporting_01.cej 场景。

该场景基于以下街道网络,该网络使用 CityEngine 的街道生成功能基于螺旋模式生成:

街道网络
街道网络宗地

通过一些绿色空间百分比应用简单的拉伸规则,即可生成城市模型。

包含已生成模型的场景概览

绿色空间和建成区面积报表

  1. 导航器窗口中,双击 rules/reporting_01.cga 文件打开 CGA 编辑器窗口即可查看立面规则。
  2. 找到 Lot 规则,然后查找包含 report() 命令的两行。
    @StartRule
    Lot --> 
    	case p(greenspacePercentage/100):
    		report("Area.Greenspace",geometry.area)
    		GreenSpace
    	else:
    		report("Area.BuildUp",geometry.area)
    		BuildingLot
  3. 使用 geometry.area 属性作为报告值,这两个报告命令将报告当前几何面积(地块面积)。 在第一个 case 语句中,面积将报告到 Area.Greenspace 报表变量;在第二个 (else case) 语句中,面积将报告到 Area.BuildUp
    注:

    通过在报表变量中使用点 (.) 作为分隔符,报表输出将显示这两个变量及其组合(面积)的总和。

  4. 选择一些轮廓线,然后生成模型。
  5. 选择任意一组已生成的模型,然后在检查器窗口中打开报表窗格。
  6. 建成区和绿色空间面积报表已显示在“检查器”窗口中

    报表窗格会显示两个报表变量 Area.BuildUpArea.Greenspace 以及自动添加的面积总和。

    注:

    系统会自动将点字符之前的组名称相同的报表变量收集到一个组变量中。

    • N 列显示变量报告次数。 下一列 % 显示该数字的百分比形式。
    • Sum 列显示每个报表变量的报告值总和。 同样,% 列以百分比的形式显示这些结果之间的相对关系。
    • 接下来的三列显示关于每个模型的平均、最小和最大报告值的其他统计信息。

“报表”窗格

报表窗格根据当前选择内容显示报表。

  1. 选择另一组已生成的模型,然后在检查器窗口中对报表结果进行比较。
    基于不同选择内容的建成区和绿色空间面积报表
  2. 选择一组较多的模型。
    针对较大面积的报表,greenspacePercentage 设置为 30
  3. 在规则参数中,将 greenspacePercentage 的值更改为 75
  4. 重新选择模型以查看在报表中反映的更改。
    greenspacePercentage 设置为 75 的报表

总建筑面积和楼层面积比的附加报表

接下来,您将向规则文件添加总建筑面积 (GFA) 和楼层面积比 (FAR) 的附加报表。

设置

  1. 打开 Tutorial_11_Reporting/scenes/reporting_02.cej 场景。
  2. 导航器窗口中,双击 rules/reporting_02.cga 文件打开 CGA 编辑器窗口即可查看立面规则。

报告 GFA 和 FAR

Lot 规则用于将地块总面积存储到建筑物的 plotArea 属性。 此信息稍后将在规则中用于计算 FAR。

@Hidden
attr plotArea = 0 # used to calc FAR

@StartRule
Lot --> 
	case p(greenspacePercentage):
		report("Area.Greenspace",geometry.area)
		GreenSpace
	else:
		set(plotArea, geometry.area)
		report("Area.BuildUp",geometry.area)
		BuildingLot

与第一部分中的规则文件相比,建筑体量现在分割成不同的楼层。 查找 FloorBottom 规则。 将针对建筑物的每个楼层调用此规则(和 report() 命令),并对报表变量 GFA 的值进行递增求和,从而得到所有楼层面积总和。

对于 FAR 也是如此,其中面积除以之前存储的 plotArea 将得到总楼层面积与图形面积之比。

FloorBottom -->
		report("GFA",geometry.area) 
	 	report("FAR",geometry.area/plotArea)
  1. 选择生成的建筑物,然后在检查器窗口中找到报表窗格。
  2. 单个选定建筑物的 FAR 和 GFA 显示在“报表”窗格中

    除了上面的第一部分中报告的面积值之外,还显示了新的 FARGFA 报表变量。 N 列中的值 16 表示已根据选择调用报表变量的次数;在此情况下,它等于楼层数。 Sum 列显示计算的 FAR (15.16) 和 GFA (60118.35)。

  3. 选择生成的建筑物。
  4. 使用滑块更改 distanceStreet 参数。
  5. 请注意 FAR 和 GFA 的值更新到新建筑物模型中的方式。

更改可视化模式

可通过 rules/reporting_02.cga 规则文件在建筑物模型的可视化模式之间切换。

选择一个建筑物模型,然后更改 vizMode 规则参数。

在“检查器”窗口中通过规则参数设置的不同可视化模式

按使用类型报告

您现在需要将报表变量扩展为按楼层的不同土地利用类型。

  1. 打开 Tutorial_11_Reporting/scenes/reporting_03.cej 场景。
  2. 导航器窗口中,双击 rules/reporting_03.cga 文件打开 CGA 编辑器窗口即可查看立面规则。

添加土地利用类型

添加了以下三个属性:

  • mixedOffice 属性用于以全局方式控制土地利用类型为“混合”的建筑物中办公空间与住宅空间的比例。
    attr mixedOffice = 0.2
  • 建筑物的 landuseType 属性可分别设置为“办公”、“住宅”或“混合”(办公和住宅)。 初始值设置为随机选择的一种土地利用类型。
    @Enum("Office","Mixed","Residential")  
    attr landuseType = round-shape
    	33% : "Mixed"
    	33% : "Office"
    	else : "Residential"
  • BaseFloors 属性用于控制建筑物底层上的零售楼层数。 住宅建筑物没有地下楼层,“办公”和“混合”土地利用类型具有 1 到 3 个随机选择的地下楼层。
    attr baseFloors = 
    	case landuseType == "Residential" : 0 
    	else : ceil(rand(0,3))

BuildingLot 规则中,您还将添加楼层高度和楼层计数报表。

BuildingLot -->
	report("Floor Height", floorHeight)
	report("Floor Count", nFloor)
	setback(distanceStreet)
		{ street.front: OpenSpace 
		| remainder: Parcel }

按类型报告

要想按使用类型报告楼层面积,需要使用参数类型扩展 floorBottom 规则。 根据此类型,将面积报告给对应的使用类型,由 GFA.usagetype 表示。 通过使用前缀 GFA,报表统计数据将显示各个使用类型以及求和得出的总 GFA。 您还将根据使用类型分配不同的颜色,以在生成的模型中可视化其功能(红色:零售,绿色:办公,蓝色:住宅)。

FloorBottom(type) -->
	case type == "Retail":
		report("GFA.Retail",geometry.area) 
	 	report("FAR",geometry.area/plotArea)
	 	color("#ff4444") #Red
	 	FloorViz
	 	
	case type == "Office" || (type == "Mixed" && split.index < mixedOffice*split.total): 
		report("GFA.Office",geometry.area) 
	 	report("FAR",geometry.area/plotArea)
	 	color("#44ff44") #Green
	 	FloorViz
	 		
	else:
		report("GFA.Residential",geometry.area) 
	 	report("FAR",geometry.area/plotArea)
	 	color("#4444ff") #Blue
	 	FloorViz

如果是混合土地利用类型,您可以使用特殊表达式区分办公和住宅用途。 通过使用 split.index(在此上下文中,相当于楼层索引),可确保生成的办公楼层达到 mixedOffice 属性控制的所需楼层索引。

  1. 选择并生成建筑物。
  2. 更改 landuseType 参数以获取建筑物的不同表示。
  3. 住宅土地利用类型
    办公土地利用类型,含三层零售楼层
    混合土地利用类型,办公楼层占 20%,mixedOffice = 0.2
    混合土地利用类型,办公楼层占 60%,mixedOffice = 0.6

    报表窗格中将显示新的报表变量。 在下图中,GFA.Office 报告了六个匹配项(六个办公楼层),办公楼层空间总计为 38777.78 平方米,占总建筑面积的 46.15%。

    按使用类型报告的总建筑面积

在下一部分中,您将使用地图图层控制土地利用类型分布。

通过土地利用地图图层控制的报表

您现在需要使用地图图层控制分布,而不是使用土地利用类型的随机分布。

设置

打开 Tutorial_11_Reporting/scenes/reporting_04.cej 场景。

土地利用类型地图图层

您可以使用地图图层来控制城市的全局外观。 reporting_04.cej 场景已包含您要使用的地图图层。 在场景编辑器窗口中取消隐藏土地利用地图图层,以使其在 3D 视窗中显示。

土地利用地图图层(左);灰度地图图像(右);3D 视窗中的地图图层
  1. 场景编辑器窗口中,选择土地利用地图图层,然后在检查器窗口中找到图层属性。
    attr Office      = brightness > 0.66
    attr Mixed       = !Office && brightness > 0.33
    attr Residential = !Office && !Mixed
    
    attr landuseType = 
    	case Office : "Office"
    	case Mixed  : "Mixed"
    	else :        "Residential""
  2. 前三个属性由地图图层的亮度控制。 例如,如果地图中某个位置明亮,则 Office 评估为 true

    因此,中心明亮的部分将触发办公建筑物,中间部分将触发混合土地利用类型(零售、办公和住宅)的建筑物,外部部分将触发住宅建筑物。

  3. 检查对应的 Tutorial_11_Reporting/rules/reporting_04.cga 规则文件。
  4. reporting_04.cga 规则文件将添加可以根据土地利用类型(包括混合、办公和住宅)创建不同体量模型的规则以及这些规则的后继规则。

    具有不同土地利用类型的建筑物,左:办公,中间:混合办公,右:住宅

整个城市的报表

使用仅体量可视化生成的整个城市
使用彩色楼层可视化生成的整个城市
通过选择所有建筑物模型,将显示整个城市的报表统计数据。
  1. mixedOffice 参数从 0.2 更改为 0.3(针对所有建筑物),然后生成报表。
  2. 重新选择所有建筑物以查看更新的报表。
    将 mixedOffice 更改为 0.3 并选择所有模型后的报表

    整个城市的办公 GFA 从 18.8% 增加到 23.9%,而住宅面积从 75.5% 降低至 70.4%。

导出报表数据

要导出报表数据,请完成以下步骤:

  1. 选择要导出的行(按 Shift 键并单击,或按 Ctrl 键并单击)。
  2. 单击编辑 > 复制以将数据复制到剪贴板(以制表符分隔)。
  3. 将数据粘贴到 Microsoft Excel 或另一个应用程序中。
    报表数据已粘贴到 Excel 电子表格中

用于导出报表数据的另一个选项是生成 .csv 文件,此文件可以按对象细分报表并显示每个类别的对应值。 某些对象包含多个楼层,.csv 文件将显示每个建筑物和楼层的该类别的数量。

  1. CGA 编辑器窗口中单击 export_report.py 脚本文件内部。
  2. 单击 Python > 运行脚本以生成 .csv 文件。
  3. 双击 data/reports.csv 文件以打开 Excel 电子表格。
    导出的 .csv 文件中的报表数据