チュートリアル データは、[Help] メニュー → [Download Tutorials and Examples…] を選択し、[CityEngine Tutorial] からダウンロードすることができます。
チュートリアル 4 では、外部からインポートした道路データを扱う方法をご紹介します。外部のアプリケーションで作成、またはデータベースから導入された*.dxf、*.osm または*.shp ファイル フォーマット内にある道路ネットワーク データを CityEngine にインポートし、街作成のために初期データとして使用します。
演習 |
---|
・Part 1: DXF ファイルのインポート |
・Part 2: マイナー道路の生成 |
・Part 3: OpenStreet Map (OSM) データをインポート |
・Part 4: 衛星画像マップ レイヤーの追加 |
・Part 5: シェープファイルとジオデータベースをインポート |
CityEngine の道路ネットワークは、グラフノード (交差点) とグラフエッジ (道路セグメント) で構成されています。これらは、成長する道路ツールで生成したり、CityEngine で手動で描画したり、DXF や SHP ファイルなどの外部ファイルからインポートしたりすることができます。
以下の例は、Adobe Illustrator でスケッチした海辺の街の主要道路構造を示しています。
それを DXF ファイルとして書き出し、CityEngine にインポートしたのです。
道路網をDXFで書き出す場合、CityEngineの座標系はメートル単位なので、アプリケーションの単位を必ずメートルに変換してください。
DXF ファイルをシーンに取り込むには、次のようにします。
主要な道路がインポートされたら、道路ネットワークの改良に取り掛かり、その間にある細かい道路を生成していくことができます。次に、[Grow Streets] ツールを使って、既存の閉じたブロックを埋めることで、繰り返し道路ブロックを街路で埋め尽くしていきます。
sesame_02.cej のシーンを開いたままにしておきます。
選択ツール [Select] ツールを使用し、メイン道路リング内のメイン道路セグメントを 1 つ選択します。これは、ブロック内の道路の一般的な方向を指定し、道路生成アルゴリズムの開始ノードを定義するものです。
[Visibility settings] をクリックし、シェープを選択するか、F11 キーを押して、図形の可視性をオフにします。 これは、道路網の大通りと小通りを分離するために行うものです。
メインメニューの [Graph] → [Grow Streets] をクリックして、[Grow Streets] ダイアログボックスを表示します。
[Pattern of minor streets] の隣にあるドロップダウン メニューから [Radial] をクリックします。
同じ設定のまま、[Apply] をクリックします。 道路はリングの内側にのみ生成します。sesame_03.cej のシーンは、完成した放射状の道路パターンを示しています。
道路網の別の部分に道路を作り、道路の生成を継続させる。 [Polygonal Street Creation] ツールを使って、新しい通りを 2 つ追加し、それらを選択したままにしておきます。
今度は [Pattern of minor streets] の設定を [Raster] に変更します。
[Apply] をクリックします。道路は、選択された街路と小路からラスター パターンで生成されます。 設定を変更することで、道路を生成させる際に、異なる道路パターンを得ることができます。詳しくは、Street pattern examples の例を参照してください。
sesame_12.cej は、完成したシーンを上から見たものです。道路生成アルゴリズムを複数回適用すると、大通りと小通りが生成され、建物のフットプリントが抽出されます。次に、建物と植生のモデルを生成します。
OSM は XML ベースのフォーマットで、マップ上のベクトル データを記述するために使用されます。nodes、ways、closed ways の 3 つの基本データ型が定義され、他のすべての要素を記述するために使用されます。
OSM データをインポートする作業をします。 OSM ファイルをインポートするには、次の操作を行います。
[File] メニュー→ [New…] → [CityEngine] → [CityEngine Scene] をクリックし、新規シーン ファイルを開きます。
data フォルダにある .osm ファイルを [3D View] ウィンドウにドラッグします。
OSM インポートのダイアログボックスで、インポートするレイヤーを選択します。 通常、道路は高速道路レイヤーに、建物は建物レイヤーに含まれます。必要に応じて、[Select/deselect] チェックボックスを使用して、すべてのレイヤーの選択を解除します。
[Finish] をクリックします。
シーンの座標系は WGS 1984 UTM Zone 33N に設定しておきます。 詳しくは、Scene coordinate systems をご参照ください。
[OK] をクリックします。
Scene Editor に、道路ネットワーク レイヤーとシェープ レイヤーという 2 つの新しいレイヤーが表示されます。[3D View] ウィンドウには OSM データが表示され、インポートされた道路の中心線上に自動的に作成された道路形状が表示されます。
[Scene Editor] で、「graph network」レイヤーの名前を「OSM_Streets」 に変更します。
[Shape] レイヤーの名前を 「OSM_Shapes」 に変更します。
CityEngineの [Get Map Data] ツールを使って、世界の選択した地域の OSM データをインポートすることもできます。詳しくは Get map data をご参照ください。
生成された道路シェープを拡大すると、各道路の幅が異なるのが分かります。Map OSM tags を有効にした状態で OSM データをインポートすると、CityEngine は OSM 道路タイプの道幅を定義したレイヤー属性を作成します。[3D View] ウィンドウ内で道路を 1 つ選択し、[Inspector] ウィンドウの Segment タブでパラメーターを確認します。 選択された道路は、[highway] パラメーターが [primary] に設定され、道路と歩道の幅のパラメーターは、インポートされた OSM_Streets レイヤーのレイヤー属性マッピングに従って定義されています。新しい幅の値を [Segment Width] パラメーター (値はユーザーが設定した値に変更可能) に設定、またはツールバーにある [Edit Streets/Curves] ツールを使用して、手動で道路幅を変更することもできます。
OSM道路データのレイヤー属性を見るには、[Scene Editor] で [OSM_Streets] レイヤーを選択し、[Inspector] ウィンドウの [Layer Attributes] でレイヤー属性を調べます。 たとえば、前の画像で選択された道路セグメントは [primary] に設定され、streetWidthByClass 関数で道路幅は 8 メートルにマッピングされます。このマッピングは [Layer Attributes] で変更することができます。
//-------------------------
// Example OSM Tag Mapping
streetscale = 1 // street width scale factor
width = getFloatObjectAttr("width", false)
lanes = getFloatObjectAttr("lanes", false)
attr streetWidth = // street width depending on available attributes
case width > 0 : width * streetscale
case lanes > 0 : lanes * 3.5 * streetscale
else : streetWidthByClass * streetscale * oneway
class = getStringObjectAttr("highway", false)
streetWidthByClass =
case class == "primary" : 8
case class == "secondary" : 7
case class == "tertiary" : 6
case class == "motorway" : 12
case class == "trunk" : 11
case class == "road" : 6
case class == "residential" : 5
case class == "footway" : 2
case class == "cycleway" : 2
case class == "steps" : 2
else : 4
oneway = // oneway width correction
case getStringObjectAttr("oneway", false) == "yes" : 0.5
else : 1
sidewalkscale = 1 // sidewalk width scale factor
sidewalkWidth =
case class == "primary" : 2
case class == "secondary" : 2
case class == "tertiary" : 2
case class == "residential" : 2
else : 0
attr sidewalkWidthLeft = sidewalkWidth * sidewalkscale
attr sidewalkWidthRight = sidewalkWidth * sidewalkscale
インポートした OSM データには不要なものが含まれていることがあり、これが道路の重複等の競合を起こすことがあります。ブロックができていない箇所や赤い点線の箇所は、セグメントが接続されていなかったり、道路が重複してブロックが作成できないなどの状態を表します。以下の方法で競合を解消することができます。
下図は、接続されていない Graph Node を解消する例の前と後を表しています。
OSM 道路データは標高データ (level 属性) を含んでいますが、誤っている場合があります。Run Generate Bridges ツール オプションを有効にすると、CityEngine が自動で解決策を提示してくれます。
次に、ジオリファレンス付きの航空写真をシーンに追加します。
CityEngine はインポートで画像を再投影することはありません。画像のインポートで座標系を選択するのは、正確な位置情報を計算するためです。そのため、CityEngine のシーンで使用された投影法での画像データを用意する必要があります。上記の例では、ポンペイの衛星画像を WGS 1984 UTM Zone 33N (このチュートリアルのシーンで使用しているシーン座標系) に再投影しています。
最後に、OSM の形状からモデルを生成します。
[Scene Editor] で、[OSM_Shapes] レイヤーにある全てのシェープを選択します。
osm_generic.cga ルール ファイルを選択したシェープにドラッグします。 一部のシェープにはすでに有効なスタート ルールが設定されているため、[Set Start Rule] ダイアログ ボックスが表示されます。
[Lot] ルールを選択します。
シェープファイル (SHP) やジオデータベース (GDB) のデータも CityEngine にインポートすることができます。シェープファイルとジオデータベースから道路をインポートする操作はほぼ同じであるため、ここではジオデータベースの具体例はありません。シェープファイルをインポートするには、次のようにします。
この例では道路幅を調整するために、シェープファイルに width (幅) 属性が入っています。シェープファイルに幅の属性がない場合、デフォルトの道路幅が自動的に割り当てられます。また、インポート後に手動で道路幅を設定することもできます。属性マッピングを使用して他の属性名にマッピングすることもできます。
クリーンアップ インポートした道路シェープは道路シェープ同士で競合することがあり、赤い点線で示されます。 [Resolve Conflicting Shapes] を有効にし、[Cleanup streets] ツールを使用することで自動的に修正されます。また [Graph] → [Simplify Graph] をクリックすると、不要なものを削除したり、接線を設定することで、複雑なグラフ セグメントの数を減らすことができます。詳しくは、Cleanup streets をご参照ください。
最後に、道路モデルを生成するためのルールを割り当てます。
このチュートリアルでは、DXF、OSM、シェープ ファイルなど、さまざまなデータ タイプの道路をインポートする方法について学びました。