FMEで建物LOD1を作成する方法


アサミ情報システム株式会社
峯上 佳丈

はじめに
 アサミ情報システム(以下、当社)ではPLATEAU業務に関わる3Dモデル作成やCityGMLの作成を行っております。

 当社ではPLATEAUのCityGMLを作成する為のデータ変換ツールとしてFMEというソフトフェアを利用しています。FMEはCityGMLを作成する為だけではなく3Dモデルの作成にも活用する事ができます。

 今回は、3Dモデルを作り始めたエンジニアの方向けにFMEを活用した建物のLOD1の作成手順をご紹介いたします。

1.フットプリントの作成方法(都市計画基本図を想定)
 都市計画基本図の建物面は、図郭境界で図形が分割されていることが多いです。これらを本来の一つの建物面に復元しないと、正しい3D都市モデル(LOD1以降)になりません。また、中庭を持つ建物では、中庭の面と建物面からドーナツポリゴンを構成する必要があります。

図1:図郭で切断されている建物のイメージ

図2:中庭面と建物面が重なる建物のイメージ

 本章では、その前処理をFMEで実装する方法を下記のワークスペース例を用い、詳細に説明します。

1.1 図郭間で切断された建物を結合

図3:図郭間で切断された建物結合のワークスペース例 ※1

(1)Bufferer(Buffer Distance:0.03m ※1)→ 図郭線を微小バッファ
(2)SpatialFilter → Buffererした図郭線に重なる建物面を抽出
(3)Dissolver(Group By:建物種別、図形区分などの全属性 ※2) → 図郭線と重なる建物面かつ、全ての属性が同じ値を持つ面同士を一体化

※1:Bufferer のBuffer DistanceはSpatialFilterでの抽出状況を確認し適宜調整します。
※2:同一建物を識別するキーがある場合は、そのキーを使ってDissolverで一体化することで処理を簡略化できます。

1.2 中庭による建物面の重なりからドーナツを作成

図4:建物面の重なりからドーナツを作成するワークスペース例

DonutBuilder(Drop Holes:Yes)※3 → 建物面がほかの建物面に内包される場合はその内包された面を穴とするドーナツポリゴンを作成

※3:DonutBuilderは島ポリゴン(ドーナツの入れ子)にも対応していますが想定通りの出力結果であるかは確認を推奨します。

2.属性付与
 3D化の前に属性を付与します。フットプリントの3D化後は、空間一致に基づく対応付けにひと手間が必要になる為、2D段階で都市計画基礎調査の建物利用現況や都市計画区域などから属性を付与します。本章では、最小ワークスペース例を通じて建物利用現況の属性付与について説明します。

図5:属性付与の最小ワークスペース例 ※4

(1)AttributeManager → 属性正規化:コード化/ゼロ埋め
(2)Counter → フットプリントに事前に処理で使用する連番(_bldg_count2)を付与
(3)AreaCalculator → フットプリントの面積(_area)を計算
(4)Clipper(Overlapping Clippers:Clip Original Candidates、Merge Attributes) → フットプリントを建物利用現況でクリップ
(5)AreaCalculator(Area:_area_clip) → Clipperのinsideに対して、面積(_area_clip)を再計算
(6)StatisticsCalculator(Group By:_bldg_count2 ,_area、Attribute:_area_clip、Sum) → 同一建物で面積(_area_clip)の合計を計算
(7)ExpressionEvaluator(@Value(_area_clip.sum) / @Value(_area)) → 交差した面積がフットプリントの面積に占める割合(_result)を計算
(8)Tester(_result >= 0.6 ※5) → 面積比が0.6以上のみに絞り込み
(9)FeatureMerger(Requestor/Supplier:_bldg_count2) → 事前に設定しておいた連番を使って面積比が閾値以上になった建物利用現況の属性情報を対応づけ

※4:最小ワークスペースである為、3D都市モデル標準作業手順書 C.11.2.6(都市計画基礎調査〈建物利用現況〉の付与)に準拠した属性付与を推奨します。
※5:面積比の閾値は各自治体の特性に応じて、適宜変更します。

3.フットプリントから立ち上げ(DEM/DSM活用)
 LOD1の押し出し高さは、地形の起伏や樹木の影響を考慮しないと過大・過小な形状を生みます。底面の高さはDEMから作成したTIN相当の基準面の最小値を用い、上面はDSMの中央値を用いると外れ値に頑健です。最終の押し出し高さは DSMのZ(median) – DEMのZ(min)で求められます。本章ではフットプリントから立ち上げる手順を下記のワークスペース例を用い、詳細に説明します。

3.1 底面の高さ(_min)

図6:底面の高さを算出するワークスペース例

(1)Counter → フットプリントに処理で使用する連番(_fp_count)を付与
(2)Buffer(Buffer Distance:10m ※6) → フットプリントをバッファ
(3)Clipper(Overlapping Clippers:Clip Original Candidates、Merge Attributes) → DEMをバッファしたフットプリントでクリップ
(4)TINGenerator(Group By:_fp_count) → クリップしたDEMからTINSurfaceを作成
(5)Clipper(Group By:_fp_count) → 作成したTINSurfaceをBufferer前のフットプリントで再度クリップ
(6)CoordinateExtractor → クリップしたTINSurface から頂点座標のリスト(_indices{})を取得
(7)ListRangeExtractor(Source List Attribute:_indices{}.z) → リストの最小を計算(_min)
(8)FeatureMerger(Requestor/Supplier:_fp_count) → 事前に設定しておいた連番を使ってDEM(TIN)の最小値をフットプリントに付与

※6:処理時間を短縮する為にバッファしたフットプリントでクリップを行います。

3.2 立ち上げ高さ(DSMの中央値(_indices{0}.z.median))

図7:立ち上げ高さを算出するワークスペース例

(1)Counter → フットプリントに処理で使用する連番(_fp_count2)を付与
(2)Clipper(Group By:_fp_count2) → DSMをフットプリントでクリップ
(3)CoordinateExtractor → DSMの頂点座標を取得
(4)StatisticsCalculator(Group By:_fp_count2、Attribute:_indices{0}.z、Median) → フットプリントごとにDSMの中央値を算出(_indices{0}.z.median)
(5)FeatureMerger(Requestor/Supplier:_fp_count2) → 事前に設定しておいた連番を使ってDSMの中央値をフットプリントに付与

3.3 押し出し(LOD1)

図8:押し出しによりフットプリントを立ち上げるワークスペース例

(1)3DForcer(Elevation:_min) → 2Dポリゴンに高さを付与して3Dポリゴン化
(2)Extruder(Distance:@Value(_indices{0}.z.median) – @Value(_min) ※7) →建築物上面高さ(DSMの中央値) – 接地面高さ(DEM(TIN)の最低値)で算出した立ち上げ高さでLOD1を上方向に押し出し

※7:Distanceがマイナスになる場合や、微小になる場合は3D都市モデルではジオメトリエラーとなります。

3.4 高さの乖離対策(樹木等で高さが過大/過小)
障害物や樹木の影響により、実際の高さと立ち上げ高さが乖離する場合があります。
例えば、下記のようなケースです。
•過大:DSM に樹冠が混入し、立ち上げ高さが実際の建物より大きい
•過小:障害物で屋根が十分写っておらず、立ち上げ高さが極小

 対応策としては、3D都市モデル標準作業手順書の表C-55(LOD1の押し出し高さ)に基づき、塔状比などの指標で外れを検知し、目視確認や補正ルール(区分的な上限・下限)を適用します。

4.ジオメトリエラーの解消
 LOD1で見られるジオメトリエラーは、大きく分けて”素材であるフットプリントの形状不備”、”高さ算出の失敗(中央値が取れず極小高さになる等)”のいずれかまたは両方に起因します。工程の末端で発見すると手戻りが大きい為、検査→分岐→再計算の流れを組み込み、押し出し前に異常を摘出します。

4.1 発生源の整理
検出されたジオメトリエラーの内容から発生源を特定します。
•フットプリント由来:外周の自己交差、頂点重複、面の重なり
•高さ由来:立ち上げ高さが極小/異常(中央値の取得失敗)

4.2 フットプリント由来の修正方法
(1)GeometryValidator(頂点重複:Duplicate Consecutive Points、自己交差:Self-Intersections in 2D) で修正
 →GeometryValidatorでリペアできないものは手修正を行います。
(2)AreaGapAndOverlapCleanerで面の重なりを修正
 →面の重なりのほかに面同士の隙間も埋めてしまう為、面の重なりのみ対応したい場合は該当の面だけを抽出した状態で実行するなどの工夫が必要です。

4.3 高さ由来
(1)Tester( @Value(_indices{0}.z.median) – @Value(_min) < 1 ) を適用
 →立ち上げ高さが1m未満の場合、正しい高さを取得できていない恐れがあります。
(2)高さが取得できない場合の対応として、3D都市モデル標準作業手順書では、次のような方法が示されています。
 『都市計画基礎調査の建物利用現況に含まれる「高さ」や建築確認申請書類等に記載される「建築物の高さ」を使用してもよい。また、そのほかの高さの取得方法として、都市計画基礎調査等に含まれる建物階数を使用して建築物の高さを推定する方法がある。これは、階高(3mや4m)に建物階数を乗算し、建築物の高さとする方法である。点群データや建築確認申請書類等の既存資料が得られない場合に、便宜的な対応として、このような推定を行うことも考えられる。』
 階高と建物階数を用いて立ち上げ高さを推定する場合は、Extruder(Distance:階高×建物階数)とすることで実装可能です。

最後に
当社では3Dモデルの作成やCityGMLの作成をはじめ、様々なGISデータの作成・活用も行っております。
もしお困りごとなどありましたら当社の問い合わせフォームよりお気軽にご相談ください。

※FME®を使用。FME®はSafe Software Inc.の登録商標です。

■お問い合わせ先
アサミ情報システム株式会社 https://www.asamisun.com/contact

(2025年9月 ニュースレター掲載)

マニュアル
FAQ

私たちは最適なウェブ体験を提供するためにCookieを利用しています。このサイトを引き続き閲覧することで、あなたはCookieの使用に同意していることになります。