教程 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. 找到地块规则,然后查找包含 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 的其他报告

本节介绍了如何将关于 GFA 和 FAR 的其他报告添加到规则文件。

教程设置

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

报告建筑面积 (GFA) 和楼层面积比 (FAR)

地块规则用于将地块总面积存储到建筑物的 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 m2,占总建筑面积的 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. 前三个属性由地图图层的亮度控制。 例如,如果地中中某个位置明亮,则办公评估为 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 文件中的报告数据