チュートリアル 11: レポーティング

チュートリアル データ

チュートリアル データは、[Help] メニュー → [Download Tutorials and Examples…] を選択し、[CityEngine Tutorial] からダウンロードできます。

概要

レポーティングの機能により、CityEngine は単なるジオメトリ生成ツール以上の強力なものとなっており、ルールに基づいたモデル パラメーターの計算や積算などが可能です。これにより、都市のマスタープランを可視化するだけでなく、いくつかのレポートを生成 (例えば、.csv 経由で Excel テーブルを作成) することによりそれらを強化することができるのです。3D モデルと同様にレポートは CGA により生成されます。ジオメトリを生成するルールの中にレポートの操作を含めることもできますし、レポーティングのみのための CGA ルールセットを作成することも可能です。

レポート操作は、建物のデザインやマスタープランの任意のプロパティをレポートすることができるように開発されています。つまり、レポーティングは完全に汎用的でカスタマイズ可能であり、例えば、延べ床面積 (GFA) やユニット数、混合土地利用度 (Land Use Mix) のような数値を含めることができます。また、都市デザインを変更 (つまりモデルを再生成) するとレポートもリアルタイムに更新されます。このチュートリアルでは、サンプル シナリオとして、スクラッチからマスタープランを構築しますが、もちろん既存の GIS データを解析するためにレポーティング機能を活用することも可能です。

演習
Part 1: 面積のレポート
Part 2: GFA および FAR のレポートの追加
Part 3: 用途タイプによるレポート
Part 4: 土地利用マップ レイヤーによるレポートの制御

Part 1: 面積のレポート

レポーティング チュートリアルの最初として、既存の CGA にどのようにレポーティングの動作を組み込み、その結果のレポートがどのように生成されるのかを見ていきます。

チュートリアルのセットアップ

Tutorial_11_Reporting/scenes/reporting_01.cej シーンを開きます。

このシーンは以下のような CityEngine の Street Grow 機能によりスパイラル パターンで生成された道路ネットワークに基づいています。

緑地の割合を指定してシンプルな建物を立ち上げるルールを適用し、最初の都市モデルを生成します。

緑地と市街地の面積のレポーティング

  1. [Navigator] ウィンドウの中で rules/reporting_01.cga ファイルをダブルクリックします。 [CGA Editor] ウィンドウを開き、建物を生成しているルールを確認します。

  2. Lot ルールを見つけ、report() コマンドを含む 2 つの行を探します。

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

プロパティ geometry.area をレポート値として使用することにより、両方の report コマンドが現在のジオメトリの面積 (区画の面積) をレポートしてくれます。最初の case ステートメントの中では、レポーティング変数 “Area.Greenspace” に面積がレポートされ、2 番目の else ステートメントの中では “Area.BuildUp” に面積がレポートされます。

レポーティング変数の中で区切り文字としてピリオド (.) を使用することにより、レポート出力には個々の変数についての情報とそれらの総和 (Area) の両方が表示されます。

  1. 複数のフットプリントを選択し、モデルを生成します。
  2. 生成したモデルの任意のセットを選択し、[Inspector] ウィンドウで [Reports] 欄を展開します。

Reports 欄には、Area.BuildUp と Area.Greenspace の 2 つの変数がレポートされており、それらの総和である Area も自動的に追加されています。

ピリオドの前に共通のグループ名を持つ Report 変数は、自動的に 1 つのグループ変数にまとめられます。

N カラム (列) は変数の個数を表示しています。この場合では、4 つの区画が選択されており、1 つの BuildUp エリアと 3 つの Greenspace エリアの面積がレポートされています。次のカラム % は、その個数をパーセントで表示しています。

Sum カラムはレポートされている値の総和を表示しています。この場合は、BuildUp エリア面積の総和は 5802.42 で、Greenspace エリアは 19226.12 ということになります。その隣にある % カラムは、これらの結果の相対値をパーセントで表示したものです。

さらに右の 3 つのカラムには、モデルごとの平均値、最小値、最大値のような統計情報が表示されます。

レポート ウィンドウ

[Reports] ウィンドウの表示は、現在何が選択されているかに依存します。

  1. 他のモデルを選択し、[Inspector] ウィンドウでレポート結果を比較します。

  2. 更に多くのモデルを選択します。

  3. ルール パラメーターの greenspacePercentage の値を 75 に変更します。

  4. 変更をレポートに反映させるためにモデルを再選択します。

Part 2: GFA および FAR のレポートの追加

レポーティング チュートリアルの Part 2 では、ルール ファイルに GFA および FAR のレポートを追加する方法を紹介します。

チュートリアルのセットアップ

  1. シーン Tutorial_11_Reporting/scenes/reporting_02.cej を開きます。
  2. [Navigator] ウィンドウの中で rules/reporting_02.cga ファイルをダブルクリックして [CGA Rule Editor] ウィンドウを開きます。
  3. ルールを確認します。

延べ床面積 (Gross Floor Area: GFA) および 容積率 (Floor Area Ratio: FAR) のレポート

Lot ルールの中で、建物の区画の面積の総和を属性値 plotArea に格納します。この情報は後に容積率 (FAR) を計算するルールの中で使用されます。

@Hidden 
attr plotArea = 0 # used to calc FAR 

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

Part 1 で作成したルールと異なるのは、建物の立体がフロアに分割されている点です。FloorBottom ルールを見つけます。
建物の各フロアに対してこのルール (および report() コマンド) が呼び出されると、レポート変数 GFA の値はその都度加算されていき、最終的にすべてのフロアの総和になります。
FAR についても同様で、ここでは面積をすでに格納されている plotArea で除算することにより、延べ床面積とプロットエリアの比を求めることができます。

FloorBottom --> 
	report("GFA",geometry.area) 
	report("FAR",geometry.area/plotArea) 
  1. 建物モデルを 1 つ選択し、[Inspector] ウィンドウの中の [Reports] 欄を確認します。

Part 1 で紹介したレポート値 Area に加え、新しいレポート値 FARGFA が表示されています。N カラムの 16 という値は、現在の選択に対してレポート値が何回呼び出されたかを示しており、この場合はフロア数と同じになります。Sum カラムには計算された容積率 (FAR: 15.16) と延べ床面積 (GFA: 60118.35) が表示されています。

  1. 生成された建物を 1 つ選択します。
  2. [Inspector] ウィンドウでスライダーを使用して [distanceStreet] パラメーターを変更します。
  3. 選択した建物モデルに対応して FAR および GFA の値が更新されるのを確認します。

表示モード

ルール ファイル rules/reporting_02.cga には、建物モデルの表現を切り替えるパラメーターが設定されています。

建物モデルを 1 つ選択し、ルール パラメーターの vizMode を変更します。

Part 3: 用途タイプによるレポート

ここではレポーティング変数をフロアごとの用途タイプに拡張します。

  1. シーン Tutorial_11_Reporting/scenes/reporting_03.cej を開きます。
  2. [Navigator] ウィンドウの中で rules/reporting_03.cga ファイルをダブルクリックして [CGA Rule Editor] ウィンドウを開きます。
  3. 建物を生成しているルールを確認します。

用途タイプの追加

以下の 3 つの属性が新たに追加されています。

mixedOffice は、建物の用途 (landuse) タイプが Mixed の場合にオフィス スペースと居住スペースの比を包括的に制御します。

attr mixedOffice = 0.2 

建物の用途タイプは個別に Office (オフィス) 、Residential (住居) または Mixed (混合) (Office と Residential) に設定することができます。初期値はランダムに 1 つの用途タイプを選択するようになっています。

@Range("Office","Mixed","Residential")   
attr landuseType = "Mixed" 
	33% : "Mixed" 
	33% : "Office" 
	else : "Residential" 

baseFloors は、建物の地上部 (base) に位置する小売業 (Retail) フロアの階数を制御します。タイプが Residential の建物にはベースフロアはなく、Office および Mixed 用途タイプの建物では、1 ~ 3 階の間でランダムに選択されます。

attr baseFloors =  
	case landuseType == "Residential" : 0  
	else : ceil(rand(0,3))  

BuildingLot ルールの中に Floor Height と Count のレポートを追加します。

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

タイプ別によるレポーティング

用途タイプでフロア面積をレポートできるようにするために、floorBottom ルールを type 引数で拡張します。この type に応じて、FAR.usagetype で示される用途タイプに対応する面積がレポートされます。ピリオド付きの接頭語 “GFA.” を使用することにより、個々の用途タイプだけでなくこれらを加算したトータル FAR もレポート統計として表示されます。また、用途タイプにより異なる色が割り当てられ、生成されたモデルの機能が可視化されます。(赤: 小売業、 緑: オフィス、 青: 住居)

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    

Mixed 用途タイプの場合にオフィスと住居を区別するために特別な表現を使用します。split.index (このコンテンツのフロア インデックスと等しい) を使用することにより、オフィスフロアが mixedOffice 属性で制御された目的のフロア インデックスまで生成されるようにします。

  1. 建物を 1 つ選択し、生成します。
  2. landuseType パラメーターを変更して建物の表現が変化することを確認します。

Reports 欄には新しいレポート変数が表示されています。以下の例では、 GFA.Office の行を見ると、件数が 6 (オフィス フロアが 6 個) で面積の総和が 38777.78 m2 であり、延べ床面積の 46.15% であることが分かります。

Part 4: 土地利用マップ レイヤーによるレポートの制御

用途タイプとしてランダム分布を使用する代わりに、分布を制御するマップ (ラスター) レイヤーを使用します。

チュートリアルのセットアップ

シーン Tutorial_11_Reporting/scenes/reporting_04.cej を開きます。

土地利用タイプ マップレイヤー

都市の全体的な表現を制御したい場合にマップ レイヤーを使用することができます。シーン reporting_04.cej にはすでにこれから使用するマップ レイヤーが含まれています。 [Scene Editor] ウィンドウの中で Landuse Map レイヤーを表示に切り替え、[3D Viewport] ウィンドウに表示します。

  1. [Scene Editor] ウィンドウの中で Landuse Map レイヤーを選択し、[Inspector] ウィンドウの中で [Layer Attributes] 欄を確認します。
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"  

最初の 3 つの属性はマップ レイヤーの輝度 (brightnrss) 値により制御されています。例えばマップ上の明るい場所では Office が True と評価されます。

結果的に中心部の明るい部分では Office 、中間部分では Mixed (Retail、Office、Residential) 、外側の部分では Residential がトリガーされることになります。

  1. 対応するルール ファイル Tutorial_11_Reporting/rules/reporting_04.cga を確認します。 ルール ファイル reporting_04.cga には、土地利用タイプに応じて異なるマスモデルを生成するルールが追加されており、Mixed、Office、Residential というルールとそれらを継承するルールが含まれています。

都市全体規模のレポート

  1. パラメーター mixedOffice を (すべての建物について) 0.2 から 0.3 に変更します。
  2. 生成が完了したらすべての建物を再選択してレポートを更新します。

これにより、この都市全体に対するオフィスの延べ床面積 (GFA) は 18.8% から 23.9% に増加し、一方住居は 75.5% から 70.4% に減少したことが分かります。

レポート データのエクスポート

レポート データをエクスポートするには以下の手順に従います。

  1. エクスポートしたい行を選択 (ShiftまたはCtrlキーを押しながらクリック) し、
  2. [Edit] → [Copy] を選択してクリップボードにデータをコピー (タブ区切り) します。
  3. Microsoft Excel 等のアプリケーションにペーストします。

レポート データをエクスポートする別の方法として、レポートをオブジェクト別に分類し、各カテゴリに対応する値を表示する.csvファイルを生成することです。一部のオブジェクトには複数のフロアが含まれており、.csvファイルには、各建物とフロアのそのカテゴリの金額が表示されます。

  1. CGA エディターにおいて、export_report.py スクリプト ファイルをクリックします。
  2. [Python] メニュー → [Run Script] をクリックし、.csv ファイルを作成します。
  3. data/reports.csv をダブルクリックして開き、Excel スプレッドシートを開きます。

本チュートリアルでは、作成した都市 (または単一の建物) のデザインをレポート機能を使用してチューンナップする方法を紹介しました。どのような数値でもすべて汎用的にすべてルールに基づいてレポートに出力することができます。もちろんこれは 1 つの単純な例に過ぎませんが、レポートの活用法のアイデアのヒントとなれば幸いです。