要访问 ArcGIS CityEngine 中的教程工程,请打开 CityEngine,然后在主菜单中单击帮助 > 下载教程和示例。 在选择教程或示例后,系统会自动下载工程并将其添加到 CityEngine 工作空间。
报表功能扩展了 CityEngine 在几何生成之外的功能。 该功能支持基于规则的计算和模型参数的累积。 这意味着您不仅可以可视化城市总体规划,还可以他通过生成数字报表的方式丰富您的规划,例如生成 .csv 文件以在 Microsoft Excel 或其他类似的电子表格应用程序中进行进一步处理。与 3D 模型相似,您也可以使用 CGA 形状语法生成报表。 报表操作可以包含在生成几何的相应规则中,您也可以创建仅用于生成报表而不创建任何几何的规则。
使用报表操作,您可以创建建筑物设计或总体规划属性的报表值。 因此,报表操作完全通用且支持自定义。 例如,您可以创建包含总建筑面积 (GFA)、楼层面积比 (FAR)、单元数量以及土地利用混合度等数值的报表。 此外,更改城市设计(即重新生成模型)后,报表会立即自动更新。
在本教程中,您将完成从头开始构建总体规划的实例场景。 之后,您将了解如何使用报表功能分析现有地理空间数据。
使用面积报表
教程中的这一部分介绍了如何在 CGA 文件中嵌入报表操作以及如何生成最终报表。
打开面积报表场景
要打开面积报表场景,请执行以下操作:
浏览 Area.Greenspace 和 Area.BuildUp 报表
要浏览 CGA 规则中的报表,请执行以下操作:
- 双击 rules 文件夹中的 reporting_01.cga 文件,在 CGA 编辑器窗口中打开规则。 查找 Lot 规则并浏览两种语句中的 report 操作:
@StartRule Lot --> case p(greenspacePercentage/100): report("Area.Greenspace",geometry.area) GreenSpace else: report("Area.BuildUp",geometry.area) BuildingLot
在 case 语句中,p 函数会根据概率和当前形状种子值返回 true 或 false 值。 如果值为 true,则形状会生成为绿色空间,geometry.area 函数计算的当前几何面积(地块面积)会报告为 Area.Greenspace 变量。 否则,形状会生成为建筑物,而 geometry.area 函数会报告为 Area.BuildUp 变量。
注:
通过在报表变量中使用点 (.) 作为分隔符,报表输出将显示这两个变量及其组合(面积)的总和。 - 单击选择工具 (Q) 选择其中一些模型。
- 展开检查器窗口中的报表部分:
报表部分显示 Area.BuildUp 和 Area.Greenspace 报表变量,以及自动添加的总和 Area。 报表中的列描述如下:
- N 列显示变量报告次数。 下一列 % 显示该数字的百分比形式。
- Sum 列显示每个报表变量的报告值总和。 同样,% 列以百分比的形式显示这些结果之间的相对关系。
- 接下来的三列显示关于每个模型的平均、最小和最大报告值的其他统计信息。
注:
系统会自动将点字符之前的组名称相同的报表变量收集到一个组变量中。 对于非组变量,N 和 Sum 值的 % 列显示为 0.00。
- 选择另一组生成的模型,然后比较报表部分中的结果。
- 浏览检查器窗口中的规则部分。
greenspacePercentage 属性值默认设置为 30,这意味着 30 % 的地块用于绿色空间:
greenspacePercentage 属性确定有多少百分比的地块被划分为绿色空间或者开放空间区域;换言之,就是有多少百分比的地块将保留未开发。
根据概率和种子值,百分比会略有不同。 当您更新种子值(形状 > 更新种子或 Ctrl+Shift+G)时,值也会变化。
- 将 greenspacePercentage 属性的值更改为 75。
场景中现在明显有更多的绿色空间,报表部分中的 Area.Greenspace 值已相应地增加。
浏览总建筑面积和楼层面积比的附加报表
接下来,您将探索如何报告 GFA 和 FAR。
- 打开 reporting_02.cej 场景。
- 打开 reporting_02.cga 规则文件。
在 Lot 规则中,set 操作用于将地块总面积存储到建筑物的 plotArea 属性中。 此信息稍后将在 FloorBottom 规则中用于计算 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)
- 选择一个生成的建筑物,然后浏览报表部分:
除了第一部分中报告的面积值之外,还显示了新的 FAR 和 GFA 报表变量。 N 列中的值 18 表示已根据选择调用报表变量的次数;在本例中,该值为楼层数。 Sum 列显示 FAR 和 GFA 的计算值。 请注意 FAR 和 GFA 的 % 列显示为 0.00,因为它们没有组变量。
- 移动 distanceStreet 滑块以更改参数:
FAR 和 GFA 的值会更新,反映对建筑物模型的更改。
- 要更改模型可视化,单击规则部分中的 vizMode 下拉菜单。
可以使用以下制图表达之一可视化模型:
massOnly 无楼层的体量模型:
floors 仅包含楼层的模型:
massAndFloors 包含体量和楼层的模型:
使用此规则文件时,更改可视化不会对报告值造成影响。
按使用类型报告
接下来,您将查看规则如何扩展,以便按楼层生成不同土地利用类型的可视化和报表。
打开 reporting_03.cej 场景和 reporting_03.cga 规则文件。
添加土地利用类型
在 reporting_03.cga 规则中,添加了以下三个属性:
- mixedOffice 属性用于以全局方式控制土地利用类型为 Mixed 的建筑物中办公空间与住宅空间的比例:
attr mixedOffice = 0.2
- 建筑物的 landuseType 属性可单独设置为 Office、Residential 或 Mixed(办公和住宅)。 初始值设置为随机选择的一种土地利用类型:
@Group("Building attributes", 1) @Enum("Office","Mixed","Residential") attr landuseType = 33% : "Mixed" 33% : "Office" else : "Residential"
- BaseFloors 属性用于控制建筑物底层的零售楼层数。 Residential 建筑物没有地下楼层,Office 和 Mixed 土地利用类型具有随机的一到三个地下楼层:
attr baseFloors = case landuseType == "Residential" : 0 else : ceil(rand(0,3))
在 BuildingLot 规则中,添加了 Floor Height 和 Floor Count 报表:
BuildingLot -->
report("Floor Height", floorHeight)
report("Floor Count", nFloor)
setback(distanceStreet)
{ street.front: OpenSpace
| remainder: Parcel }
按类型生成报表
要按使用类型报告楼层面积,需要使用参数类型扩展 floorBottom 规则。 根据类型,面积将报告给对应的使用类型,由 GFA.usagetype 指示。 通过使用前缀 GFA,报表统计数据将显示各个使用类型以及求和得出的总 GFA。 您还将根据使用类型分配不同的颜色,以在生成的模型中可视化其功能(红色:Retail,绿色:Office,蓝色:Residential)。
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 属性控制的所需楼层索引。
更改土地利用类型
要更改检查器窗口中的土地利用类型,请执行以下操作:
- 选择一个模型。
- 单击规则部分中的 landuseType 下拉菜单更改建筑物的制图表达。
可以将 landuseType 参数更改为以下类型之一:
Residential Office Mixed - 将 mixedOffice 百分比值从 .2 更改为 .6。
场景中绿色办公楼层的数量已增加:
报表部分中将显示新的报表变量。 GFA.Office 报告了九个匹配项(九个办公楼层),这些办公楼层空间的总平方米数和总建筑面积百分比有所增加。
通过土地利用映射图层控制报表
在本部分中,您将使用映射图层控制分布,而不是使用土地利用类型的随机分布。
使用土地利用类型映射图层
您可以使用映射图层来控制城市的全局外观。
- 打开 reporting_04.cej 场景。
- 选中场景编辑器窗口中的 Landuse Map 图层可见性复选框,使其显示在视窗窗口中:
- 在 Scene Editor 窗口中选择 Landuse Map 图层。
- 在检查器窗口中展开图层属性部分:
attr landuse = map_01(red, 0.0, 1.0) attr Office = case landuse > 0.66: true else: false attr Mixed = case !Office && landuse > 0.33: true else: false attr Residential = case !Office && !Mixed: true else: false attr landuseType = case Office : "Office" case Mixed : "Mixed" else : "Residential"
Office、Mixed 和 Residential 属性由地图亮度控制,它由地图的红色信道确定。 例如,如果地图中某个位置明亮,则 Office 评估为 true。
因此,中心明亮的部分将触发较高的办公建筑物,中间部分将触发较小的混合土地利用类型(零售、办公和住宅)的建筑物,外部部分将触发最小的住宅建筑物。
通过相同的方法,可以使用 BuildingHeight 映射图层控制建筑物的高度。 如果将图层设置为可见,则可以看到地图和生成的建筑物之间的相关性。
- 打开并浏览 reporting_04.cga 规则文件。
相比之前的规则报告,reporting_04.cga 规则使用不同的颜色渲染楼层,还根据土地利用类型创建不同的体量模型:
... Subparcel --> case landuseType == "Office": Office case landuseType == "Mixed" : Mixed else: Residential Mixed --> [ extrude(baseFloors*floorHeight) RetailBase ] t(0,baseFloors*floorHeight,0) set(nFloor,nFloor-baseFloors) offset(-5,inside) LUShape ...
以下示例显示了建筑物土地利用类型的 Office、Mixed 和 Residential 可视化:
创建整个城市的报表
接下来,您将为整个城市的所有空间和建筑物创建报表。
- 使用选择工具 (Q) 选择场景中的所有形状。
也可以在场景编辑器窗口中选择 Blocks 图层,然后单击选择对象来选择所有形状。
- 单击生成工具 (Ctrl+G) 为所有地块生成空间和建筑物:
默认情况下,mixedOffice 属性设置为 0.2%。 您可以在场景和报表部分中查看结果:
- 保持所有建筑物处于选中状态,将 mixedOffice 属性从 0.2 更改为 0.6。
建筑物会自动重新生成:
报告值随着建筑物和空间的重新生成而更新,而 GFA.Office 面积会随着 GFA.Residential 面积的减少而增加。
导出报表数据
要导出报表数据,请完成以下步骤:
- 在报表表格中选择要导出的行。 (按 Shift 键并单击,或按 Ctrl 键并单击。 按 Ctrl+A 以选择所有行。)
- 按 Ctrl+C 将数据复制到剪贴板(使用制表符分隔)。
- 按 Ctrl+V 将数据复制到 Microsoft Excel 或其他应用程序:
用于导出报表数据的另一个选项是生成 .csv 文件,此文件可以按对象细分报表并显示每个类别的对应值。 某些对象包含多个楼层,.csv 文件将显示每个建筑物和楼层的该类别的数量。
- 确保已选中所有建筑物。
- 单击主菜单中的脚本 > 运行脚本。
- 单击 export_report 生成 .csv 文件。
- 双击 data 文件夹中的 reports.csv 文件以打开 Excel 电子表格:
在本教程中,您学习了如何执行以下操作:
- 计算并报告值(例如地块面积)。
- 浏览 GFA 和 FAR 的附加报表。
- 按使用类型创建报表并按楼层为不同的土地利用类型创建可视化。
- 控制土地利用类型并使用映射图层生成报表。
- 将报表导出至 Microsoft Excel 或类似的电子表格应用程序。
要继续学习 CityEngine,请参阅完整的 CityEngine 教程目录。