瞭解 3D 地圖中的海拔模式和功能

為 3D 地圖上的特徵 (例如線條、多邊形、模型或標記) 指定高度時,有幾項因素可能會影響特徵的放置位置,包括在場景內的位置,以及場景的算繪方式與該特徵的互動方式。本文說明如何在 3D 地圖上使用「AltitudeMode」,以及如何管理地圖項目的海拔高度。

以下說明如何搭配多種功能類型使用 AltitudeMode

如何在 3D 環境中使用海拔高度

在 3D 場景中放置點時,最終位置會受到擷取的 3D 建築物或樹木等物件影響。請務必瞭解以下兩個重要概念:

  • 數位地形模型 (DTM):代表「裸地」海拔高度。這就像是沒有任何建築物、樹木或其他結構的自然地貌。所有區域都以 DTM 為基礎,構成地球海拔高度的基礎 (使用 EGM96 計算)。
  • 數位表面模型 (DSM):代表「頂部表面」海拔高度,包括建築物、樹木和其他結構。在已擷取特徵的區域 (特別是建築物林立的都市環境),可見地表會高於基本地形。

區分 DTM 和 DSM 至關重要,有助於瞭解不同高度模式如何與這些數位高程模型 (DEM) 互動,因為特徵的放置位置可能會受到表面模型遮蔽或影響。下圖顯示兩者的差異:

3D 地圖:顯示數位地形模型 (DTM) 和數位表面模型 (DSM) 的差異。

缺少海拔資料的特徵

如果資料缺少海拔高度測量值,或是使用其他 Google 服務 (例如「路線」或「地點」服務) 的資料,通常不會在傳回的幾何圖形中提供任何海拔高度。在這種情況下,將功能放置在場景中時,需要謹慎選擇 AltitudeMode

  • 夾到地面:這是最簡單的方法,功能會自動符合地形。這個模式會使用 DTM 模型。
  • 任意指定高度 + 相對模式:您可以指派所選高度,然後使用 RELATIVE_TO_GROUND (根據 DTM 模型放置特徵) 或 RELATIVE_TO_MESH (根據 DSM 模型放置特徵)。
  • 使用其他服務取得海拔高度:如要取得特徵位置的精確 DTM 海拔高度,可以使用 Google 地圖平台 Elevation API 等服務。 如果是線條或多邊形,則必須針對組成線條或多邊形的每個點執行這項操作。

AltitudeMode選項的意義和適用時機。

定義特徵時,可以指定四個 AltitudeMode 選項:

絕對

假設飛機在海平面上方 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 高度。

絕對 (白色圖釘)

這個圖釘使用精確的海拔高度值 (102.23 公尺),將標記放置在該海拔高度 (EGM96),並顯示在巨石陣其中一塊石頭的頂端,如提供的海拔高度所指定。

從技術上來說,這個模式會使用實際提供的海拔高度值,將圖釘放置在指定海拔高度的位置 (以海平面為基準),在本例中為巨石陣的位置,但位於其中一塊石頭的頂端。

RELATIVE_TO_GROUND (橘色圖釘)

這個圖釘以地面 (DTM) 為基準,並將自身放置在該地面高度上方 102.23 公尺處,因此會顯示在巨石陣中石頭下方的自然地面上方。

從技術上來說,這個模式會將基準設為地面上的實際 DTM 級別,然後將圖釘放在基準上方 102.23 公尺處。

RELATIVE_TO_MESH (Blue Pin)

這個圖釘會以可見表面 (DSM) 做為基準,並將自身放置在該表面上方 102.23 公尺處。此模式的測量結果會包含寶石高度,因此會略高於橘色圖釘。

從技術上來說,這個模式會以網格 (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 (Orange Line)

這條線以自然地面 (DTM) 為基準,並將每個點放置在該地面以上指定高度。

從技術上來說,這個模式會以 DTM 為基準,並將線條位置放在相對於 DTM 的列出高度。

相對於網狀網路 (藍線)

這條線會以可見表面 (包括建築物和石頭) 做為基準。然後將每個點放置在該網格上方指定的海拔高度,有效複製與可見地景相關的線條形狀。

從技術上來說,這個模式會以網格 (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 }
];

如果沒有提供海拔高度,線條通常會出現在類似位置。白色、橘色和紫色線條可能會合併成單一線條 (橘色,因為通常最後繪製),因為這些線條預設都會顯示在類似的地面位置。請參閱下文:

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,您可以看到沿著地面移動。白色是絕對位置,您可以看到直線連接空間中的絕對位置點。橘色和藍色是相對版本,分別與表面 (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 地圖平台幾何程式庫中的 Interpolate 函式) 新增。接著,這些新點可以賦予相對值,放置在相關高度剖面圖上方,然後限制任何連接點的線條長度,並改善視覺化呈現效果。
  • 絕對特徵 (ABSOLUTE):如果是 ABSOLUTE 特徵,更多點需要有實際海拔高度值。在現有的絕對值之間插補,不會產生準確反映網格上方任何值的分數,因為這只會是 A 點和 B 點之間的平均值。

摘要

希望本文能提供實景 3D 地圖中 AltitudeMode 選項的完整總覽,詳細說明 ABSOLUTE、CLAMP_TO_GROUND、RELATIVE_TO_GROUND 和 RELATIVE_TO_MESH 如何影響標記、線條和多邊形等各種功能的放置和算繪方式。

瞭解這些模式如何與基礎數位地形模型 (DTM) 和數位地表模型 (DSM) 搭配運作,對於建立準確且引人入勝的 3D 地圖表示法至關重要,可盡量減少視覺構件。

希望您能在自己的專案中試用這些高度模式,充分發揮 3D 地圖的潛力,為使用者打造引人入勝的沉浸式體驗,並提供意見回饋。

貢獻者

Matt Toon | 地理位置開發人員解決方案工程師