一、 AR場景設置
為了把真實世界位置坐標映射到虛擬世界,需要設置ARSessionConfiguration 的 worldAlignment 屬性為gravityAndHeading;為了把導引箭頭放到地面,需要設置開啟平面檢測。
二、根據經緯度在AR場景中標註地點
根據自身的經緯度,自身在AR場景中的位置,地點的經緯度坐標經計算可獲得地點在AR場景中的位置《平面位置,不包含高度信息》。
一開始我使用的是另外一種方式是,記錄AR原點處的經緯度坐標,使用地點的經緯度即可計算其在AR場景中的位置。
這種方式有一個問題,在保持一個方向前行過程中,AR場景的原點並不能如理論中那樣保持在現實中的某一點不動,經常是現實場景中前進100米,AR坐標隻前進了50米,也就是AR原點實際同方向移動了50米。
所以這種方式有很大的漏洞,即便是使用現在的方式,地點位置標示也應該經常刷新。
三、確定地面
地點的標示以及路面的引導箭頭在AR場景中位置的y坐標值,都需要依據地面位置來確定。
尤其是引導箭頭,需要貼合地面才能有很好的展示效果。
原理也很簡單,開啟平面檢測,根據檢測到的平面實時刷新地面的y坐標值。
四、路線查詢
路線查詢可以使用MapKit的路線查詢功能,需要注意的是MapKit使用的是火星坐標,CoreLocation獲取到的是地球坐標,坐標之間需要進行轉換。
五、路線繪制
首先,不要繪制整條路線,遠處的路線隻會引起幹擾起不到導航作用,而且路線越長越容易與建築物存在遮擋關系,如果做不到建築物擋住虛擬路線,會非常影響用戶體驗。
我們隻需要繪制眼前幾米范圍內的導引箭頭即可,沒走0.5米,添加一個新的箭頭,同時把身後的箭頭擦除一個。
其次,每次添加新箭頭前都要重新計算最後一個箭頭的經緯度,重新請求路線,最大程度減少GPS和ARKit的誤差。
繪制的箭頭一定要確保貼合地面。
六、車輛、建築、行人對導引路線的遮擋《未實現》
七、實時監測路面來修正導引路線,確保導引箭頭繪制到人行路上,避開綠植及建築。
《未實現》