3D マップの高度モードと機能について

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

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

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

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

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

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

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

標高データがない場合

高度測定値がないデータや、ルート サービスやプレイス サービスなどの別の Google サービスからのデータを使用している場合、返されるジオメトリに高度が指定されていないことがよくあります。このような場合、シーンにフィーチャーを配置するには、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 つの上に配置されます。

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 上に線が描画され、その上のフィーチャーのメッシュは無視されます。

絶対値(白線)

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

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

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 地図。標高データがないため、白と紫の線が 1 つにまとまっています。

青い線(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 で、地面に沿って移動していることがわかります。白は絶対値です。空間内の絶対位置にある点を直線で結んでいることがわかります。オレンジと青は、SURFACE(DTM)または MESH(DSM)に関する相対バージョンです。青い線は、下のフィーチャーの高さによって形状がわずかに異なることに注意してください。

ここでも、線の作成の性質により、点が直線で結ばれるため、線がメッシュを通過することに注意してください。このシナリオでは、線が見えなくなる可能性があるため、drawsOccludedSegmentstrue に設定して、木々を通して線が見えるようにすることができます。次の画像で詳しく説明するように、メッシュを通過する線は引き続き見えます。

木々を通り抜ける線が表示された 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 地図。線が地面に消える視覚的なアーティファクトがハイライト表示されています。

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

紫色の線(CLAMP_TO_GROUND)は地面に沿って丘の上まで伸びていますが、白い線(ABSOLUTE)は点と点を結ぶ直線が地面を貫通しているため、丘の中に消えていくように見えます。

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

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

そのため、ポイント間の線が単に直線経路をたどるため、線が地面の下に消える(またはメッシュを通り抜ける)という奇妙な視覚的アーティファクトが発生する可能性があります。補間法を使用して線間に点を追加することで、このような線の視覚的な表示を改善できる場合があります。ただし、視覚的な表示にどのような影響があるかは、使用する手法によって異なります。

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

概要

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

これらのモードが基盤となる数値地形モデル(DTM)および数値表層モデル(DSM)とどのように連携しているかを理解することは、視覚的なアーティファクトを最小限に抑え、正確で視覚的に魅力的な 3D 地図表現を作成するうえで非常に重要です。

これらの高度モードを独自のプロジェクトで試して、3D マッピングの可能性を最大限に引き出し、ユーザー向けの魅力的な没入型エクスペリエンスを作成し、フィードバックをお寄せください。

寄稿者

Matt Toon | ソリューション エンジニア、Geo デベロッパー