この記事のポイント
太陽光発電の設置規模を検討する際に重要な「屋根の実面積」は、2Dデータだけでは正確に把握しづらいという課題があります。
PLATEAUのCityGML(LOD2)をFMEで処理することで、屋根の3D表面積を建物単位の属性として自動付与でき、都市スケールで太陽光ポテンシャルの試算に活用しやすくなります。
要点サマリ
本記事では、PLATEAUで公開されている3D都市モデル(CityGML)を用いて、建築物LOD2の屋根面(bldg:RoofSurface)の3D表面積を計算し、その結果を建物単位の属性として付与するFMEワークフローを紹介します。
まず、CityGMLを読み込み、GML SRS Axis Orderを2,1,3に設定して座標軸を正しく解釈したうえで、平面直角座標系第6系(メートル系)へ変換します。次に、AreaCalculator(Sloped Area)で屋根ごとに3D表面積を算出し、StatisticsCalculatorでgml_parent_id単位に集計、FeatureMergerでBuildingフィーチャに結合することで、建物属性として屋根面積を付与します。
最後に、LOD別に分解して必要なLODのみをshpやgdbなどで出力することで、太陽光設置規模の検討など、他ソフトでの利活用を容易にします。
用語解説
- CityGML:都市や景観の3Dモデルを表現・交換するためのOGC標準の概念モデル/交換形式。XML/GMLベースで、建物・道路・地形などを構造的に表現できる。
- LOD2:CityGMLの詳細度レベルの一つ。屋根形状(切妻・寄棟など)を表現した建物外形(Solid)と、屋根・壁などの境界面(Surface)を持つ。
- DSM:Digital Surface Model の略。建物・樹木など地上物を含む地表面の標高モデル。DTM(裸地のみの標高モデル)に対し、上物を含むのが特徴。
- FME: Safe Software社の空間データETL/統合プラットフォーム。多形式の変換・加工・検証をノーコードで実行でき、3D都市モデルやCityGMLの処理にも広く利用されている。
- PLATEAU:国土交通省主導の3D都市モデル整備・活用プロジェクト。CityGML準拠の建物・道路・災害リスクなどのデータ(LOD1~4等)を自治体単位で整備し、オープンデータとして公開している。各種ツールやユースケースも提供。
FMEでPLATEAUのCityGMLから屋根の3D表面積を算出する目的とは
当社では3D都市モデルの構築や変換にFMEを多用しており、PLATEAUのCityGMLの取り扱いもその一つです。
本記事では、太陽光発電の設置規模・発電量試算の参考として、LOD2建築物の屋根面から3D表面積を算出し、それを建物属性として付与するワークフローを紹介します。
解説
FMEはCityGMLの構築や変換の為に利用される事が多いですが、それ以外でも3Dデータを利用したデータ処理や論理検査等、様々な場面で活用する事が可能です。
今回は、太陽光発電の設置規模・発電量の試算の参考として、PLATEAUで公開されている3D都市モデルを使い、建築物モデル(LOD2)の屋根面(bldg:RoofSurface)の3D表面積を計算し、それを建物単位の属性として付与する手順をご紹介します。
ワークスペースの全体像
CityGMLからLOD2屋根面をどのように抽出するか
まずはPLATEAUのCityGMLから建築物モデルと屋根面を読み込み、座標軸の順序を正しく解釈できるようにGML SRS Axis Orderを設定します。
そのうえで、LOD2のRoofSurfaceのみを抽出し、不要なテクスチャ情報を削除して処理を軽量化します。
解説
- 建築物モデルのCityGMLを読み込みます。

- Parametersの中のGML SRS Axis Orderを 2,1,3 に設定します。

GML SRS Axis Orderを設定することでPLATEAUデータの座標軸の順番を正しく解釈できます。
今回必要なFeatureTypeはBuilding(建築物)、RoofSurface(屋根面)のみのため、必要なFeatureTypeのみインポートします。
- 屋根面は面積計算にのみ使用するため、AppearanceRemoverでテクスチャ/マテリアルを事前に除去して軽量化し、処理速度を向上させています。
- 屋根面(LOD2)の抽出は Testerで citygml_level_of_detail{0} = 2 とし、LOD2の屋根面を抽出します。

座標変換と屋根の3D表面積はどのように計算するか
屋根面の面積を正しいm²単位で算出するため、まずCsmapReprojectorで平面直角座標系第6系へ変換します。
そのうえでAreaCalculator(Sloped Area)をMultiSurfaceに適用し、各屋根フィーチャの3D表面積をroof_area_3d_m2として計算します。
解説
今回は 大阪市のオープンデータを使用したために、CsmapReprojectorを使って平面直角座標系 第6系へ変換します。メートル系へ変換することで、正しいm²単位の面積が算出できます。
続いて、屋根ごと(フィーチャごと)に3D表面積を計算します。
AreaCalculatorをMultiSurface に対して使用すると、その3D Surface群の累積面積を取得できます。AreaCalculatorのパラメータのTypeは Sloped Area とすることで傾斜を考慮した面積が計算されます。
- 出力属性名例:各屋根面に roof_area_3d_m2。

屋根面積を建物単位にどのように集計し、属性として付与するか
屋根面ごとの3D表面積を求めたら、StatisticsCalculatorで建物IDごとに累積し、FeatureMergerでBuildingオブジェクトに結合することで、建物属性として「屋根の3D表面積」を付与します。
解説
まず、StatisticsCalculatorで建物IDごとに roof_area_3d_m2 を累積し、roof_area_3d_m2.sum を作成します。Group By キーは親建物のgml:id(属性名gml_parent_id)とします。

次に、FeatureMerger で Building(Requestor)に対し、屋根面の集計結果(Supplier)を結合します。
- Requestor は gml_parent_id をキー
- Supplier は gml_id をキー
としてマージし、roof_area_3d_m2.sum を建物属性として付与します。

LOD別に建築物モデルを分解し、どのように出力するか
屋根面積を付与した建築物モデルは、DeaggregatorとAttributeFilterでLOD別に分解することで、LOD1/LOD2/LOD0など必要な詳細度だけを抽出できます。
その後、shpやgdbなど任意のフォーマットで書き出し、別ソフトでの活用に備えます。
解説
CityGMLのBuilding には lod1Solid, lod2Solid, lod0RoofEdge など複数 LODが併存します。
- Deaggregatorで分解後、AttributeFilterでLOD 別に分けることで、必要なLODのみを抽出でき活用しやすい形になります。

出力については、
- FMEのWriterで対応可能なフォーマットとして出力します。(shpやgdbなど)
- 必要なLODのみを出力することで別ソフトウェアでの活用が可能になります。
LOD2
LOD1
LOD0
FAQ
Q:屋根の3D表面積を算出するのに、必ずLOD2のCityGMLが必要ですか?
A:屋根形状を考慮した面積を求めるには、基本的にはLOD2以上のデータが必要です。
LOD1はブロックモデルのため、傾斜を持つ屋根形状が表現されておらず、投影面積に近い値しか得られません。単純な比較や概算にはLOD1でも使えますが、太陽光パネル設置面積など傾斜を含む「実面積」を扱う場合は、RoofSurfaceを持つLOD2以上を前提とした方が安全です。
まとめ
本記事では、3Dデータだからこそできることに着目し、PLATEAUのCityGML(建築物LOD2)をFMEで処理し、屋根の3D表面積を算出して建物属性に付与する手順を紹介しました。
GML SRS Axis Orderの設定と平面直角座標への変換により座標を正しく扱い、AreaCalculator(Sloped Area)で屋根ごとの傾斜面積を計算し、StatisticsCalculatorとFeatureMergerで建物単位に集計・紐づけています。
最後にLOD別に分解して必要なフォーマットで出力することで、太陽光発電ポテンシャル評価など、2Dデータでは得られない屋根の3D表面積を都市スケールで活用できるようになります。
お問い合わせ
本記事に関するお問い合わせは、下記よりご連絡ください。
関連ページ
GIS – アサミ情報システム株式会社|GIS/3D/CityGML
AutoCAD初心者でもできる、生成AIを活用したスクリプト作成 – アサミ情報システム株式会社|GIS/3D/CityGML
※FME®を使用。FME®はSafe Software Inc.の登録商標です。