TOPIC 3|3D都市モデルデータの基本[3/4]|LODレベルによる表現の違い
CityGMLは、3D都市モデルの詳細な表現レベルに応じて、LOD(Level of Details)が設定されています。LOD0、LOD1、LOD2のそれぞれのレベルで表現できる形状と記述内容について札幌大通郵便局を例に説明します。
【目次】
3.4 幾何形状
3.4.1 LOD0
3.4.2 LOD1
3.4.3 LOD2
3.4 _ 幾何形状
地物の幾何形状は、LOD0、LOD1、LOD2、LOD3など、LODのレベルによって、異なる要素で示されます。ここでは、LOD0、LOD1、LOD2のそれぞれについて、データ構造を概説します。
Open Geospatial Consortiumの「OGC City Geography Markup Language (CityGML) Encoding Standard Version 2.0.0」で定義されている建築物の応用スキーマを、次に示します(モデル3-4)。
3.4.1 _ LOD0
LOD0は、上から見た平面投影形状を示します。接地面(床)の外形線で示す<bldg:lod0FootPrint>で記述する方法と、屋根の外形線で示す<bldg:lod0RoofEdge>で記述する方法があります。札幌大通郵便局では、後者の要素が用いられており、次のように定義されています(リスト 3-3)。
<bldg:lod0RoofEdge>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<!-- 屋根を構成するポリゴンの頂点 -->
<gml:posList>43.061285701747266 141.35419378529105 44.077 43.061679512286766 141.35409484551747 44.077 …略…</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod0RoofEdge>
リスト 3-3 LOD0のデータ構造例
LOD0の幾何形状は、<gml:MultiSurface>を用いて定義します。<gml:MultiSurface>は、GML仕様で定められた仕様で、「ポリゴン」の集まりを意味します。ひとつひとつのポリゴンは、<gml:Ploygon>により記述されています。
ポリゴンの座標は、<gml:posList>で定義されています。頂点座標の「緯度」「経度」「高さ」の3パラメータを1セットし、空白区切りでポリゴンを構成するすべての頂点を列記します。<bldg:lod0RoofEdge>は屋根を示すので、この高さは、地物の屋根の高さに相当します。
【メモ】
GML仕様の原文はOGCのサイトで読めますが(https://www.ogc.org/standards/gml)、日本語で読みたいなら、JIS X 7136:2021 地理情報―地理マーク付け言語(GML)(https://webdesk.jsa.or.jp/books/W11M0090/index/?bunsyo_id=JIS%20X%207136:2012)を読むとよいでしょう。ただし、CityGML 2.0が準拠しているGML 3.1.1とはバージョンが異なるため(JISの方が新しい)、あくまで参考として参照ください。
3.4.2 _ LOD1
LOD1では、建築物を立体(ソリッド)として表現します。3D都市モデルでは、建築物のLOD1のソリッドを<bldg:lod1Solid>要素に記述します。ソリッドは<gml:Solid>で構成される要素です。CityGMLでは、ソリッドの形状を、ソリッドを覆う面により表現します。<gml:exterior>はソリッドの外側を覆う要素を意味します。この要素の中には、ソリッドの外側を構成するすべての面が<gml:Polygon>要素により記述されます(リスト 3-4)。
なお、CityGMLの仕様上は、内部境界(内空)を示す<gml:interior>を使うこともできますが、PLATEAUでは、複雑な立体の読み込みを不得手とするソフトウェアを考慮し、<gml:interior>の使用は推奨されていません。
<bldg:lod1Solid>
<gml:Solid>
<gml:exterior>
<gml:CompositeSurface>
<gml:surfaceMember>
<!-- ソリッドを構成するポリゴン群の定義 -->
<gml:Polygon>
<gml:exterior>
<gml:LinearRing>
<gml:posList>43.061285701747266 141.35419378529105 19.763
43.06128569987977 141.35419377672426 19.763 …略…
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
<gml:Polygon>…略…</gml:Polygon>
…略…
</gml:surfaceMember>
</gml:CompositeSurface>
</gml:exterior>
</gml:Solid>
</bldg:lod1Solid>
リスト 3-4 LOD1のデータ構造例
3.4.3 _ LOD2
LOD2では、地物を構成する面が、「壁」「屋根」「床」など、どのようなものであるのかを表現できます。また、壁や屋根の面から構成される立体が建築物である、という表現ができます。
こうした表現を実現するため、それぞれの面を、表 3-6で示す要素を使って記述し、さらにそれらの面を建築物のLOD2の幾何形状を示す<bldg:lod2Solid>で参照する構造をとります。
要素 | 種別 |
---|---|
bldg:WallSurface | 建築物の外周を構成する面(外壁) |
bldg:RoofSurface | 主に建築物の上部を覆う構造 |
bldg:GroundSurface | 建築物が地表に設置された面 |
bldg:OuterCeilingSurface | 建築物の外側を覆う部分であり、天井としての機能を有する部分 |
bldg:OuterFloorSurface | 建築物の外側を覆う構造の一部であり、床としての機能を有する部分 |
bldg:ClosureSurface | 建築物の屋根、外壁、外部天井、外部床面に開口部が存在するが、開口部内の詳細なデータ作成が不要である場合に、開口部を閉じるために便宜上設けられた面 |
下記に、これらのオブジェクトの応用スキーマを示します。これらのオブジェクトすべて(_BoundarySurcace)は、GMLで定義されている面(lod2MultiSurface)です。_AbstractBuildingは境界面として、_BoundarySurfaceを持ちます(boundedBy)。そして_AbstractBuldingは、GMLで定義されている立体(lo2Solid)で示されます。また下記モデル3-5上には現れませんが、boundedByで参照している各境界面が、立体を構成する面となります。
■基本的な構造
<bldg:lod2Solid>では、例えば、次のように表現します。<gml:Solid>でソリッドとして構成するのはLOD1と同じですが、そのなかに含む要素では、<gml:Polygon>で頂点座標を記述せず、xlink:hrefを用いた、他の要素への参照として構成します。
<bldg:lod2Solid>
<gml:Solid>
<gml:exterior>
<gml:CompositeSurface>
<gml:surfaceMember xlink:href="#poly_SAPO1112_b_0"></gml:surfaceMember>
<gml:surfaceMember xlink:href="##poly_SAPO1112_p9036_0"></gml:surfaceMember>
…略…
</gml:CompositeSurface>
</gml:exterior>
</gml:Solid>
</bldg:lod2Solid>
ここで例示した1番目の参照である「#poly_SAPO1112_b_0」は、次のように定義されています。ここでは<gml:Polygon>でポリゴンを記述していて座標の指定があります。そして、この親要素は、<bldg:GroundSurface>です。表 3-6で示したように、<bldg:GroundSurface>は地表に設置された面――すなわち、底――であることを示します。
<bldg:boundedBy>
<bldg:GroundSurface gml:id="gnd_SAPO1112_b_0">
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon gml:id="poly_SAPO1112_b_0">
<gml:exterior>
<gml:LinearRing gml:id="line_SAPO1112_b_0">
<gml:posList>43.061648326213586 141.3537054145677 19.40437533 …略…
<gml:posList>>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:GroundSurface>
</bldg:boundedBy>
他にも、屋根や外壁の場合は、同様に<bldg:RoofSurface>や<bldg:WallSurface>で表現されているので、このようにたどれば、その面が、どのような役割であるのかがわかります(図 3-16)。
例えばPLATEAUの事例でしばしば取り上げられる、太陽光パネルを設置したときの電力量を試算するような場合は、面のうち、屋根を示す<bldg:RoofSurface>の部分だけを取り出して、後述の投影座標系に変換します。すると、斜めに傾いた屋根面の正確な面積も算出できますし、屋根の向きや傾斜を反映した日射量に基づく電力量を試算できます。
【メモ】
屋根の面積は属性情報として付与されている場合もあります。一部のデータでは屋根の面積は、「<uro:buildingRoofEdgeArea uom="m2">67.67455</uro:buildingRoofEdgeArea>」というように、平米単位で記載されています。
■テクスチャの定義
LOD2では、面にテクスチャを貼り付けられます。テクスチャは<app:appearanceMember>で定義し、貼り付ける面のIDを指定します。
テクスチャはAppearanceパッケージで定義されています。次に応用スキーマのモデルを提示します(モデル3-6)。右上の地物からはappearanceMemberが記述されており、これが地物に対するテクスチャを指定します。
app::X3DMaterialは地物の表面の色を定義する地物型、app::ParameterizedTextureは地物の表面に貼りつける画像を指定する地物型です。モデル3-6において、app::TextureAssociationの属性uriで、貼り付ける面を指定します。貼り付ける画像は、app::_Textureに含まれているimageURIで指定します。
確認した<bldg:GroundSurface>は床でありテクスチャが貼られていないので、別の面を例示します。例えば、次のOuterCeilingSurface(庇の裏側など、屋外にある天井の役割を果たす面)があります。この屋外天井のポリゴンには、poly_SAPO1363_p12137_2というIDが振られています。
<bldg:boundedBy>
<bldg:OuterCeilingSurface gml:id="ceil_SAPO1363_p12137_2">
<bldg:lod2MultiSurface>
<gml:MultiSurface>
<gml:surfaceMember>
<gml:Polygon gml:id="poly_SAPO1363_p12137_2">
<gml:exterior>
<gml:LinearRing gml:id="line_SAPO1363_p12137_2">
<gml:posList>…略…</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
</gml:MultiSurface>
</bldg:lod2MultiSurface>
</bldg:OuterCeilingSurface>
</bldg:boundedBy>
別の部分で、次の<app:appearanceMember>があり、このポリゴンに対するテクスチャが設定されています。
<app:appearanceMember>
<app:Appearance>
<app:theme>rgbTexture</app:theme>
…略…
<app:surfaceDataMember>
<app:ParameterizedTexture>
<app:imageURI>64414278_bldg_6697_appearance/sapo1068.jpg</app:imageURI>
<app:mimeType>image/jpg</app:mimeType>
<app:target uri="#poly_SAPO1363_p12137_2">
<app:TexCoordList>
<app:textureCoordinates ring="#line_SAPO1363_p12137_2">0.7888452 0.1066666 0.8186957 0.1066666 0.8186952 0.1272596 0.7888446 0.1272727 0.7888452 0.1066666</app:textureCoordinates>
</app:TexCoordList>
</app:target>
…略…
</app:ParameterizedTexture>
</app:surfaceDataMember>
…略…
</app:Appearance>
</app:appearanceMember>
この例の場合は、<app:target>で指定している「poly_SAPO1363_p12137_2」というポリゴンに対して、<app:imageURI>で指定している64414278_bldg_6697_appearance/sapo1068.jpgファイルを貼り付けるという意味です。実際、このフォルダ(64414278_bldg_6697_appearance)にはsapo1068.jpgというファイルがあり、これは航空写真の画像です(図 3-17)。貼り付ける座標は、<app:textureCoordinates>で指定されています。この座標はUV座標です。UV座標は、横軸(U)と縦軸(V)から構成される直交座標系に基づく座標であり、座標の値が0~1の範囲内に設定される、3DCG(3次元コンピュータグラフィックス)の分野でテクスチャマッピングに用いられるものです。
コラム:3D都市モデルの位置正確度
3D都市モデルは、多くの地方自治体において採用されている都市スケールの地図に合わせ、地図情報レベル2500(縮尺1/2,500)に相当する位置正確度(どの程度、位置が正確なのかを示す指標)を基本として採用しています(データによってはさらに高精度の位置正確度が採用されている場合があります)。
具体的には水平位置の位置正確度は1.75m以内(標準偏差)、高さの位置正確度は0.66m以内(標準偏差)を合格基準として品質が管理されています。なおLOD1モデルの場合は、高さとして建物の中央値を採用しているため、その点も考慮する必要があります(コラム「LOD1モデルの建物の高さ」を参照)。
【水平位置の位置正確度】
【高さの位置正確度(LOD1)】
【文】
大澤文孝
【監修】
石丸伸裕(OGC CityGML仕様策定WG副議長)
黒川史子(アジア航測株式会社)
小林巌生(インフォ・ラウンジ株式会社)
於保俊(株式会社ホロラボ)