相信只要是使用百度地圖做實時定位服務(wù)的朋友都會遇到這個問題,在對坐標位置進行覆蓋物展示的時候,會出現(xiàn)由于獲取坐標數(shù)據(jù)時間或者兩個坐標點相距過遠,導(dǎo)致在視覺上看Marker移動就像“僵尸跳”一樣,一蹦一蹦的給客戶看分分鐘鄙視你到不能自已。另外如果用的是有指向性圖標ICON的時候,更會引來吐槽~誒誒誒,你這小車車怎么在這個立交橋轉(zhuǎn)彎的時候車頭向著后面呢?怎么搞得嘛你!會不會弄啊你!
所以今天參照百度大大提供的路書開源文件實現(xiàn)下自己的需求,記錄一下以便提供參考。
一、覆蓋物在獲取坐標數(shù)據(jù)的同時,在坐標點之間平滑的移動
首先,之所以會出現(xiàn)僵尸跳的效果,是因為項目是根據(jù)實時坐標數(shù)據(jù)進行定位,所以存在一個等待新數(shù)據(jù)的過程,而對于覆蓋物的坐標改變就是一個setPosition(BMap.Point)方法而已也就造成了停頓。所以目前暫且解決方案就是:讓他這個覆蓋物在這個等待的期間找點事情做,不要一下就直接從起點蹦到終點了,慢慢的移動過去。小碎步,平滑的的移動過去~~
怎么移動呢?此時這個事情就可以轉(zhuǎn)化為已知起始點坐標,進行移動覆蓋物的這么過程了,說白了就是讓他覆蓋物在兩個點連成的這條線上多執(zhí)行幾次setPosition(BMap.Point),一次步子別邁那么大,只要保證在下次新坐標來之前到達就行了。
那么問題又來了,這兩條線上的點我怎么知道呢? 因為獲取到的經(jīng)緯度坐標是球面坐標,所以要先轉(zhuǎn)換為平面坐標 {BMap.Pixel}= map.getMapType().getProjection().lngLatToPoint(BMap.Point);
然后小運算下(參照路書開源文件)
1 /* 2 *緩動效果 3 *初始坐標,目標坐標,當前的步長,總的步長 4 *@param{BMap.Pixel} initPos 初始平面坐標 5 *@p