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