Table of Contents

多圖使用指南與最佳實踐

在 Mega 應用開發中,是否應該在一個定位庫中添加多個地圖(Block),是一個常見的問題。錯誤地使用多地圖不僅不會提升應用能力,反而可能導致效能下降和定位跳變。

本篇將引導您正確理解和使用多地圖功能,避免常見誤區。

為什麼需要避免添加多個地圖?

核心原則:不要為「擴大覆蓋範圍」而添加多個地圖。

在絕大多數情況下,一個定位庫應該只添加單個地點的 Mega Block 地圖。以下是一些常見的錯誤用法,務必避免:

  • 錯誤場景 A:多區域

    • 想法:為一個景區彼此相連的「A 區」、「B 區」、「C 區」分別創建地圖,然後在應用中一次性將這三個地圖添加到庫裡,希望使用者在景區中移動時可以無縫切換。
    • 問題:這樣建出來的三個地圖之間在空間坐標上是沒有數學關聯的,互相之間相互獨立。由於各自坐標系的不一致,無法實現在移動中的無縫切換,因此在區域交界處會發生定位跳變。
    • 解決:對於這類場景,最佳的處理方式是按照 超大空間數據採集方法 中介紹的方式採集「A 區」、「B 區」、「C 區」,並保證彼此之間有足夠的重疊區域。按照 超大範圍融合任務 中介紹的方式進行建圖。此時會生成包含上述所有區域在內的統一坐標系的單一 Block 地圖,可以將這個地圖添加到定位庫中。
  • 錯誤場景 B:多地點

    • 想法:對一個地點的商場創建一個地圖,再為另一個地點的同名商場創建一個地圖,希望在一個應用中能同時使用。
    • 問題:這會嚴重拖慢定位速度。設備在定位時,需要同時比對庫中所有地圖數據,計算量劇增,導致初始化時間變長。使用者在同一時間只能處於一個商場,加載另一個商場的地圖是資源浪費。當某個商場請求量大時,也會拖慢另一個商場的請求回應時間。
    • 解決:為不同地點的商場創建不同的定位庫,每個庫只添加一個地圖。在應用中根據使用者當前的位置,動態訪問對應地點的定位庫。
  • 錯誤場景 C:跨時間

    • 想法:同一個地點,在白天進行採集並建圖,在晚上也進行採集並建圖,然後將白天和夜晚的地圖添加到庫中,希望使用者在同一地點的不同時刻都有一致的體驗。
    • 問題:這個場景與錯誤場景 A 是類似的,分別的建圖結果之間是無法保證空間位置關係的。
    • 解決:按照 超大範圍融合任務 中介紹的方式將白天和夜晚的採集放到一起進行融合建圖。將最終生成的單一 Block 地圖添加到定位庫中。
  • 錯誤場景 D:跨版本

    • 想法:同一個地點,已經建過一個版本 A 的地圖並使用中,在後續的營運過程中新建了更新的版本 B 的地圖並添加到原定位庫中,希望在不重新發布應用的情況下實現對新地圖的使用。
    • 問題:由於是同一個地點的不同版本地圖,在定位時會出現定位結果在兩個不同版本數據中跳變的情況。
    • 解決:按照 無損全量更新 中介紹的方式對舊版本的建圖進行升級,保證地圖數據版本更新的同時維持坐標系不變。在添加完更新後的地圖之後,務必從定位庫中刪除原版本的地圖。
  • 錯誤場景 E:補充更新

    • 想法:同一個地點,已經建過一個版本 A 的地圖並使用中,在後續的營運過程中由於局部區域發生變化或者需要對小範圍區域進行補採,此時創建了新圖 B 並添加進原定位庫中,希望在不重新發布應用的情況下實現對新地圖的使用。
    • 問題:新採集的小區域地圖 B 與原來的地圖 A 之間沒有空間坐標關聯,位於新舊數據之間的體驗將發生定位跳變。
    • 解決:按照 補充更新 中介紹的方式對舊版本的建圖進行補充更新,保證新採集的小區域與舊地圖維持坐標系不變。在添加完更新後的地圖之後,務必從定位庫中刪除原版本的地圖。

總結:試圖用多個小地圖拼接成一個大世界,不適用於 Mega 的高精度地圖。Mega 的設計哲學是一個空間連續、坐標統一、時空一致的高精度三維表示

真正需要多圖的場景

那麼,什麼時候才真正需要在一個庫裡添加多個地圖(Block)呢?主要場景是 「並行任務」「多空間選擇」,而不是 「空間拼接」

  • 場景一:多空間選擇

    • 描述:您的應用服務於同一個地點的多個完全不同的區域。但受限於建築結構或採集實踐中的問題,無法將這些區域在數據上完全聯通起來,使用者可能需要先選擇自己所在的區域。例如,大型醫院的不同樓層。
    • 實現:在使用者選擇區域後,利用這個先驗資訊動態啟用該地點對應的單一地圖。在同一時刻,定位庫裡仍然只有一張地圖在參與計算。當使用者跨越到新的區域時,需要重新確認區域的選擇。
  • 場景二:並行任務

    • 描述:您的應用需要同時處理兩個或多個獨立的、已知的物體追蹤任務,且這些物體位於同一地點但彼此沒有關聯、特徵差異巨大。例如,博物館中的多個展覽品。
    • 實現:在這種高級場景下,可以為每個物體創建一個獨立的地圖,然後將這些「物體地圖」添加到一個定位庫中。但需注意,此時定位效能將取決於定位庫中添加的物體數量。如果物體數量巨大,您可能需要在定位效能與定位庫數量之間做一個權衡,可以將物體分類並創建多個定位庫分別添加。

使用多圖時渲染端的行為

需要注意的是,使用多圖定位時,不同平台和版本的 3D 渲染行為有所不同。

最佳實踐建議

如果您確實屬於 真正需要多圖的場景 中描述的場景,或者必須使用多圖的情況,可遵循以下原則:

  1. 按需啟用:在使用者做出選擇或進入特定區域時,在發送定位請求時提供相應的先驗資訊,並僅加載對應的 3D 內容。
  2. 動態切換:提供清晰的 UI 讓使用者選擇場景。加載新地圖對應的 3D 內容前,先卸載舊地圖對應的 3D 內容,以釋放記憶體。
  3. 狀態管理:在程式碼中明確管理當前啟用的地圖,監聽定位結果中的 Block ID,以區分不同地圖的定位回饋。
  4. 效能監控:在使用多地圖時,密切關注設備的記憶體佔用、定位延時和功耗,確保應用在目標設備上流暢執行。

總而言之,對於絕大多數應用,堅持「一個場景,一張地圖」的原則,是保證 Mega 定位效能和穩定性的最佳選擇。