1. 程式人生 > >室內地圖2:如何實現室內三維路徑計算

室內地圖2:如何實現室內三維路徑計算

連接 bsp .com 服務 最好 成了 cgi 傳統 目的

我們都知道,傳統的最小路徑計算方法包括Dijkistra, A star等。但是本文這裏並不介紹具體的路算方法,這些計算方法很成熟了。在各大地圖平臺應用廣泛,比如我們出門的導航。

本文要介紹的是,如何通過ArcGIS提供的network analysis的二維平面路算 實現我們做室內定位導航的可視化三維導航。當然,最好的方法是像高德等地圖服務商自己做一套二次開發的平臺,不過這個東西就不是我們做研究的人目前能花費精力去做得出來的了。

在上一篇文章《室內地圖1:從cad--->map》中我簡單介紹了如何生產一個能用來做路徑分析的地圖,但是ArcGIS只是能做一個二維分析。比如說從602辦公室到632那麽ok,但是假如你想讓他計算從602到804,可能就沒法計算了。因為室內導航中設計樓層,電梯和扶梯等等。所以我思考了兩種方法:

1.每一層樓生成一個network dataset.在跨樓層導航的時候,首先將用戶計算到距離自己最近的電梯/扶梯(602---->6樓電梯口)、然後認為電梯、扶梯直達目標樓層後再計算目標樓層電梯到目的地的路徑(8樓電梯口----->804)。這種方法容易理解,將擴樓層導航分解成了兩個路徑分析,即當前位置到當前樓層電梯,目標樓層電梯到目標位置兩端路徑分析。不過此方法有一個缺點,就是有些電梯不一定能夠直達目標樓層而需要轉電梯,這樣一來,這個導航方法就不能用了,所以我思考了第二個實現方法。

2.這個方法即通過在地圖平面上畫出樓層偏移,並且畫出電梯作為路徑的一種,然後室內整體作為dataset建立network。 這個比較難解釋,我貼圖來說:首先這是我6樓的平面圖,其中酒紅色的為可走路徑。

技術分享

我們知道,不同樓層投影在平面上是有重合的,也就是說如果我把10樓的路徑和地圖放上去將重合在一起。導航也很難做到從六樓到10樓的路徑計算。

技術分享

所以,我決定將每一樓的平面圖和路徑圖在X方向比上一層偏移LENGTH(比如10米),也就是說假如以1樓平面坐標正確,那麽對於樓層為n的樓的坐標為:

\[\left \{ \begin{matrix}X=X-(n-1)*LENGTH \\ Y=Y \end{matrix} \right.\]

再講電梯連接起來,則可以作為一個整體實現network analysis。

技術分享

建立和network dataset 後,我們新建route試試看看通過路徑分析是否實現了8樓到6樓的路徑計算:

技術分享

成功實現,但是這個方法僅僅是一種簡單實現室內三維導航的設想,需要對你通過其他定位方法獲得的坐標通過上述式子進行換算之後再進行定位請求。

最後再附上android demo 圖:

進入demo 定位顯示:

技術分享

選擇目的地toilet

技術分享

開始導航!!

技術分享

祝大家成功!

室內地圖2:如何實現室內三維路徑計算