3D マップの高度モードと機能

3D 地図上の対象物(線、ポリゴン、モデル、マーカーなど)の高度を指定する場合、シーン内での配置や、シーンのレンダリングと対象物の相互作用に影響を与える要因がいくつかあります。このドキュメントでは、3D 地図での 'AltitudeMode' の使用方法と、対象物の高度を管理する方法について説明します。

さまざまな特徴タイプで AltitudeMode を使用する方法は次のとおりです。

3D 環境での高度の使用方法

3D シーン内にポイントを配置する場合、その最終的な位置は、キャプチャされた建物の 3D 表示や樹木などのオブジェクトの存在に影響されます。2 つの重要なコンセプトを理解することが重要です。

  • 数値地形モデル(DTM): 「裸地」の標高を表します。これは、建物、樹木、その他の構造物が上にない、土地の自然な形状と考えることができます。すべてのエリアは DTM によって支えられており、DTM は地球の標高(EGM96 を使用して計算)の基礎を形成しています。
  • 数値表層モデル(DSM): 建物、樹木、その他の構造物を含む「最上部」の標高を表します。特徴物がキャプチャされているエリア(特に建物が視界を遮る都市環境)では、可視サーフェスがベースの地形よりも高く表示されます。

DTM と DSM の違いを理解することは、さまざまな高度モードがこれらのデジタル標高モデル(DEM)とどのように相互作用するかを理解するうえで重要です。地物の配置は、サーフェス モデルによって隠されたり、影響を受けたりする可能性があるためです。違いは次の図のとおりです。

数値地形モデル(DTM)と数値表層モデル(DSM)の違いを示す 3D 地図。

地物に高度データがない場合

高度測定値がないデータがある場合や、別の Google サービス(Routes サービスや Places サービスなど)のデータを使用している場合は、返されるジオメトリに高度が指定されていないことがよくあります。このような場合、シーンに特徴を配置するには、AltitudeMode を慎重に選択する必要があります。

  • 地面に固定する: 最もシンプルな方法です。対象物は地形に自動的に適合します。このモードでは DTM モデルが使用されます。
  • 任意の高度 + 相対モードを指定する: 任意の高度を割り当ててから、RELATIVE_TO_GROUND(DTM モデルを基準に対象物を配置)または RELATIVE_TO_MESH(DSM モデルの上に対象物を配置)を使用できます。
  • 別のサービスを使用して高度を取得する: 地物の位置の正確な DTM 高度を取得するには、Google Maps Platform の Elevation API などのサービスを使用します。線または多角形の場合は、線または多角形を構成する各ポイントに対してこの操作を行う必要があります。

AltitudeMode オプションの意味と使用するタイミング

特徴を定義するときに指定できる AltitudeMode オプションは 4 つあります。

絶対値

海抜 10,000 フィートなど、特定の高度を飛行する飛行機を想像してみてください。山の上を飛んでいるか、谷の上を飛んでいるかにかかわらず、高度は一定です。

使用方法: オブジェクトの高度は、平均海面(EGM96 を使用して計算)を基準として表されます。対象物の高度座標は、平均海面からの正確な標高として解釈されます。

使用するケース: 飛行経路、正確な深度がわかっている水没物、定点観測機器など、正確な高度がわかっている対象物に使用します。

CLAMP_TO_GROUND

丘の斜面にピクニック シートを直接敷くことを想像してみてください。丘の傾斜が急でも平らでも、ブランケットは常に目に見える表面に平らに置かれます。

使用方法: オブジェクトの高度は、地面に直接配置されているものとして表されます。指定された高度値に関係なく、地形に沿って地表レベルに留まります。対象物の高度座標は無視され、地形サーフェス(DTM)に直接投影されます。

使用するタイミング: 道路、フェンス、トレイル、敷地境界、建物の土台など、常に地形に沿う必要がある対象物に使用します。

RELATIVE_TO_GROUND

熱気球が、その下の自然の地盤標高(DTM)に関係なく、常に 100 メートル上空に留まっているとします。地面が上がると、気球もそれとともに上昇し、「裸地」から 100 メートルの距離を維持します。

使用方法: オブジェクトの高度は、地表面(DTM)を基準として表されます。対象物の高度座標は、水平位置の地形標高からのオフセットとして解釈されます。

使用する場面: 地方の通信塔や架空線など、自然の地形から一定の高さを維持する必要があるオブジェクト。

RELATIVE_TO_MESH

これは、ドローンが、裸地、建物の屋根、木のてっぺんなど、飛行している場所の上空を一定の高さで飛行するようなものです。最も高い可視面(DSM)に調整されます。

使用方法: オブジェクトの高度は、地面、建物、水面(DSM)の最高点に対する相対値として表されます。対象物の高度座標は、DSM 標高からのオフセットとして解釈されます。

使用するタイミング: 物理的に存在するオブジェクト(DTM、建物、水)から一定の高さに浮いている必要があるオブジェクトに使用します。屋根のマーカーや、表示されるシーンに動的に調整される対象物に適しています。

詳しくは、AltitudeMode 定数のドキュメントをご覧ください。

視覚的な例と実用的な応用

以下の例では、特定の場所(ストーンヘンジ)を使用して、さまざまな AltitudeMode オプションが対象物の配置にどのように影響するかを示しています。これらの例では、まずマーカーの配置について説明し、次に線と領域について説明します。これらには、いくつかの異なる考慮事項があります。

位置マーカー

次のように配置されたピンマーカーについて考えてみましょう。

const markerLocation = { lat: 51.1789, lng: -1.8262, altitude: 102.23 };

下のシーンでは、白いピンとして表示されています。

白いピンマーカーが配置された 3D 地図シーン。マーカーのデフォルトの配置を示しています。

下の画像は、さまざまな高度モードを使用して配置された、さまざまな色のピンを示しています。

ストーンヘンジを中心に、さまざまな高度モードを使用して配置された複数のピン(白、紫、オレンジ、青)が表示された 3D 地図シーン。

さまざまな AltitudeMode が、標高の昇順でマーカーの配置にどのように影響するかを見てみましょう。

CLAMP_TO_GROUND(紫色のピン)

このピンは高度値を無視し、最も近い地表の標高に固定されます。白いピンのすぐ下に表示され、地形に「固定」されていることがわかります。

技術的には、このモードでは実際の高度が無視され、ピンが最も近い DTM の高さに固定されます。

ABSOLUTE(白のピン)

このピンは、正確な高度値(102.23 m)を使用して、その海抜(EGM96)にマーカーを配置します。指定された高度に従って、ストーンヘンジの石の 1 つの上に表示されます。

技術的には、このモードでは、実際に指定された高度値を使用して、指定された海抜の高さにピンを配置します。この例では、ストーンヘンジの場所ですが、石の 1 つの上部に配置されます。

RELATIVE_TO_GROUND(オレンジ色のピン)

このピンは、地面(DTM)をベースとして、その地表から 102.23 m 上に配置され、ストーンヘンジの石の下にある自然の地面の上に浮かんでいるように見えます。

技術的には、このモードでは、ベースを地上の実際の DTM のレベルに設定し、その 102.23 m 上にピンを配置します。

RELATIVE_TO_MESH(青色のピン)

このピンは、可視サーフェス(DSM)をベースとして使用し、そのサーフェスから 102.23 m 上に配置されます。このモードでは、石の高さが測定に含まれ、オレンジ色のピンより少し高い位置に配置されます。

技術的には、このモードではメッシュ(DSM)をベースとして使用し、その上に指定された高度で位置を配置します。DSM は立石の上部にあるため、このピンは相対的な高さを決定する際に、この追加の高さを測定に含め、RELATIVE_TO_GROUND ピンよりも少し高い位置に配置します。

ポジション ラインとエリア

線と領域の場合、対象物内のポイントの高度(指定されているかどうかに関係なく)と、使用されている AltitudeMode の両方が重要です。次の高度を指定して、ストーンヘンジに沿った線を調べてみましょう。

const lineCoords = [
   { lat: 51.1786, lng : -1.8266, altitude: 101.36 },
   { lat: 51.1787, lng : -1.8264, altitude: 101.18 },
   { lat: 51.178778, lng : -1.826354, altitude: 104.89 },
   { lat: 51.178815, lng : -1.826275, altitude: 107.55 },
   { lat: 51.178923, lng : -1.825980, altitude: 105.53 },
   { lat: 51.1791, lng : -1.8258, altitude: 100.29 },
   { lat: 51.1792, lng : -1.8257, altitude: 100.29 }
];

この線は、下の画像に絶対配置を使用して白で表示されています。

絶対位置を使用してストーンヘンジの周囲に配置された白い線を示す 3D 地図。

下の画像は、異なる高度モードを使用したラインを示しています。 それぞれについて、低いものから順に説明します。

さまざまな高度モードを使用して、ストーンヘンジの周囲に配置された複数の色の線(紫、白、オレンジ、青)を示す 3D 地図。

CLAMP_TO_GROUND(紫色の線)

このラインは、各ポイントに指定された高度を無視し、代わりにラインを基盤となる地面(DTM)に直接「ドレープ」します。地形に沿って移動し、建物や石などの特徴は無視されます。

技術的には、このモードでは実際の高度値が無視され、DTM 上にラインがドレープされます。その際、基盤となる地形が考慮され、その上の地物のメッシュは無視されます。

ABSOLUTE(白線)

このラインは各ポイントの正確な高度を使用しているため、一部の石の上を通過しています。各ポイント間は直線で結ばれているため、ポイントの間隔が十分に狭くないと、オブジェクトを通過しているように見えることがあります。

技術的には、このモードは各ポイントに指定された高度に従い、それらを直線で結びます。つまり、高度値が指示すれば、メッシュ(石など)を通過できます。このシナリオについては、後のセクションで説明します。

RELATIVE_TO_GROUND(オレンジ色の線)

このラインは、自然な地面(DTM)をベースとして使用し、その地表レベルから指定された高度に各ポイントを配置します。

技術的には、このモードでは DTM をベースとして使用し、それに対する相対的な高度にラインの位置を配置します。

RELATIVE_TO_MESH(青い線)

このラインは、建物や石などの目に見える表面をベースとして使用します。次に、そのメッシュ上の指定された高度に各ポイントを配置し、表示される地形に関連して線の形状を効果的に複製します。

技術的には、このモードではメッシュ(DSM)をベースとして使用し、その上に指定された高度で位置を配置します。メッシュによっては、地上のさまざまな特徴に応じてラインが変化する場合があります。

ラインに高度が指定されていない場合

次に、同じ線の座標を、高度を指定せずに考えてみましょう。

const lineCoords = [
   { lat: 51.1786, lng : -1.8266 },
   { lat: 51.1787, lng : -1.8264 },
   { lat: 51.178778, lng : -1.826354 },
   { lat: 51.178815, lng : -1.826275 },
   { lat: 51.178923, lng : -1.825980 },
   { lat: 51.1791, lng : -1.8258 },
   { lat: 51.1792, lng : -1.8257 }
];

このシナリオでは、高度が指定されていないため、線は多くの場合、同様の場所に表示されます。白、オレンジ、紫の線は、すべてデフォルトで同様の地上レベルに配置されるため、1 本の線(通常は最後に描画されるオレンジ色)に統合されることがあります。以下に例を示します。

ストーンヘンジ周辺の複数の色付きの線(オレンジ、青)を示す 3D 地図。高度データがないため、白と紫の線が統合されている。

青い線(RELATIVE_TO_MESH)は、メッシュ(DSM)をベースとして使用しています。高度が指定されていないため、ポイントはメッシュの真上に直接オーバーレイされます。メッシュ上に線を引くのではなく、メッシュ上の指定されたポイントを直線で接続します。一部の例では問題ないように見えるかもしれませんが、他の機能で覆われると視認性の問題が発生する可能性があります。この問題については、次のセクションで説明します。

メッシュとラインの相互作用。 別のポリラインを見てみましょう。この画像は同じエリアですが、より広い範囲をカバーしています(または、DTM の上に DSM の詳細が表示されています)。

const lineCoords = [
    { lat: 51.188404, lng: -1.779059, altitude: 70.69 },
    { lat: 51.187955, lng: -1.780143, altitude: 77.25 },
    { lat: 51.187658, lng: -1.781552, altitude: 68.97 },
    { lat: 51.187376, lng: -1.782447, altitude: 99.02 },
    { lat: 51.186912, lng: -1.783692, altitude: 104.35 },
    { lat: 51.185855, lng: -1.788368, altitude: 86.91 },
];

前と同じ方法(および色)を使用して表現すると、次のようになります。

木々やさまざまな標高がある地形の上に、複数の色の線(紫、白、オレンジ、青)が表示されている 3D 地図。

紫色は CLAMP_TO_GROUND で、地面に沿って表示されています。白は ABSOLUTE で、空間に絶対的に配置されたポイントを直線で結んでいることがわかります。オレンジと青は、サーフェス(DTM)またはメッシュ(DSM)の相対的なバージョンです。青い線は、下の地物の高さにより、形状がわずかに異なります。

ここでも、線の作成の性質上、点が直線で接続されるため、線がメッシュを通過することに注意してください。このシナリオでは、線が見えなくなる問題が発生する可能性があります。drawsOccludedSegments を true に設定すると、次の画像に示すように、木を通して線が見えるようになります。この画像では、メッシュを通過する線がまだ見えています。

木々を通過する線を示す 3D 地図。遮られたセグメントが表示され、セグメントの遮蔽が true であることが示されています。

空間内の位置決めの性質上、ポイントがメッシュ内に収まる可能性があり、ポイントを接続する線もメッシュ内に収まる可能性があるため、視覚的なアーティファクトが発生する可能性があります。以下のセクションでは、可能な場合にこのようなアーティファクトを改善する方法について説明します。

線と地形の相互作用に関する問題を解決する

別の例として、同じエリアで、特定の高度モードを使用する際に注意する必要がある他のアーティファクトを確認できます。

ここでは、主に DTM のレベルにある比較的平坦な領域があり、メッシュ内の上部には限られた追加の詳細があります。このシナリオは、地形モデルの上に 3D カバレッジがないエリアにも当てはまります。以下に指定されている場所を見てみましょう。

const lineCoords = [
   { lat: 51.194642, lng: -1.782636, altitude: 99.10 },
   { lat: 51.193974, lng: -1.783952, altitude: 99.86 },
   { lat: 51.192203, lng: -1.787175, altitude: 96.14 },
   { lat: 51.190024, lng: -1.790250, altitude: 105.92 },
   { lat: 51.187491, lng: -1.793580, altitude: 102.60 },
   { lat: 51.183690, lng: -1.798745, altitude: 95.69 },
];

画像で確認できるように、線の色は以前と同じです(白: ABSOLUTE、青: RELATIVE_TO_MESH、紫: CLAMP_TO_GROUND、オレンジ: RELATIVE_TO_GROUND)。

比較的平坦な地形にさまざまな色の線(白、青、紫、オレンジ)が表示された 3D 地図。線が地面に消える視覚的なアーティファクトが強調表示されています。

ここでは、いくつかのアーティファクトを確認できます。まず、サーフェス カバーがないため、オレンジ色の線(RELATIVE_TO_GROUND)と青色の線(RELATIVE_TO_MESH)が(ほぼ)同じ位置にあります(青色の線は最後に描画されたものとして表示されます)。

また、紫色の線(CLAMP_TO_GROUND)は地面に沿って表示され、丘の上にも表示されています。一方、白色の線(ABSOLUTE)は、点のみが接続され、直線が地面を通過しているため、丘に消えているように見えます。

この画像では、紫色の線が非表示になっていることがわかります。

白と青の線が丘に消え、紫の線が隠れている 3D 地図。絶対線とメッシュ相対線の視覚的なアーティファクトを示しています。

そのため、ポイント間の線が直線パスをたどるため、線が地面の下(またはメッシュを通過)に消えるように見えるなど、不自然な視覚的アーティファクトが発生することがあります。補間方法を使用して線の間にポイントを追加することで、このような線の視覚的な表示を改善できる場合があります。これが視覚的な表示にどのように影響するかは、使用する方法によって異なります。

  • 相対測定(RELATIVE_TO_GROUND または RELATIVE_TO_MESH)の場合: 相対高度値を使用する場合、線または多角形に沿ってより多くのポイントを作成すると、高度プロファイルに沿って、より適切なレベルに特徴を配置できます。これらの中間点がデータに存在しない場合は、Google Maps Platform ジオメトリ ライブラリの Interpolate 関数などの補間関数を使用して追加できます。これらの新しいポイントには、関連する高度プロファイルの上に配置される相対値を指定できます。また、ポイントを結合する線の長さを制限して、視覚的な表現を改善できます。
  • 絶対的な対象物(ABSOLUTE)の場合: ABSOLUTE の対象物の場合、より多くのポイントに実際の高度値が必要です。既存の絶対値間で補間しても、メッシュ上の値を正確に反映するポイントは得られません。ポイント A とポイント B の平均値になるだけです。

概要

このドキュメントでは、フォトリアリスティック 3D マップの AltitudeMode オプションの概要を包括的に説明し、ABSOLUTE、CLAMP_TO_GROUND、RELATIVE_TO_GROUND、RELATIVE_TO_MESH が、マーカー、ライン、ポリゴンなどのさまざまな対象物の配置とレンダリングにどのように影響するかを詳しく説明しました。

これらのモードが、基盤となるデジタル地形モデル(DTM)およびデジタル サーフェス モデル(DSM)とどのように連携するかを理解することは、視覚的なアーティファクトを最小限に抑えながら、正確で視覚的に魅力的な 3D 地図表現を作成するために不可欠です。

ぜひ、ご自身のプロジェクトでこれらの高度モードを試して、3D マッピングの可能性を最大限に引き出し、ユーザーに魅力的で没入感のあるエクスペリエンスを提供してください。また、フィードバックもお寄せください。

寄稿者

Matt Toon | ソリューション エンジニア、Geo Developer