iOS 高德地圖軌跡回放的 思路, 及方法

// 開始,公司要求制作一段跑步軌跡 在地圖上的 動畫回放, 傳入一段經(jīng)緯度,

開始一想,這不是很簡單嗎, 高德地圖有可以把經(jīng)緯度轉(zhuǎn)換成坐標點的方法

/**

* @brief 將經(jīng)緯度轉(zhuǎn)換為指定view坐標系的坐標

* @param coordinate 經(jīng)緯度

* @param view 指定的view

* @return 基于指定view坐標系的坐標

*/

- (CGPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate toPointToView:(UIView *)view;


// 我把經(jīng)緯度轉(zhuǎn)換成坐標點, 然后構(gòu)建 path

/* 構(gòu)建path, 調(diào)用著負責釋放內(nèi)存. */

- (CGMutablePathRef)pathForPoints:(CGPoint *)points count:(NSUInteger)count

{

if (points == NULL || count <= 1)

{

return NULL;

}

CGMutablePathRef path = CGPathCreateMutable();

CGPathAddLines(path, NULL, points, count);

return path;

}


//? 在然后直接用 path ,初始化一個 CAShapeLayer ,做成動畫不就成了 嗎, 在它跑完之后直接刪除, 再用 高德地圖的折線替換,

// 這種方法也可以, 但是后來需求改了, 要求地圖旋轉(zhuǎn),并且地圖中心點一直在跑動的點上,

這樣,我以屏幕坐標構(gòu)建的 path 一旦地圖旋轉(zhuǎn), 就全亂了,


// 后來我又想到一個辦法, 我從地圖手機上定位畫線得到的靈感, 我把經(jīng)緯度點兩個兩個連成一個個短的折線,放到一個數(shù)組里面 ,然后定義了一個 index 屬性, ?再用一個定時器不停的循環(huán), 在定時器的方法中,用

[self.mapView addOverlay:self.mapOverlayArr[self.index] level:MAOverlayLevelAboveRoads];

不停加載線路在地圖上, 同時把地圖的中心點, 定位在 經(jīng)緯度數(shù)組取到的最新的經(jīng)緯度上

CLLocation * location = self.locationArray[self.index];

[self.mapView setCenterCoordinate:location.coordinate animated:NO];

,這樣就能保證地圖中心一直在跑動的點上, 而且定時器 ?方法 ?加載線路夠快的話, 就能產(chǎn)生動畫效果,?


然而, 又出現(xiàn)了問題, 定時器不停的運行

mapView 不停的加載 addOverlay ,使得屏幕非常卡, 經(jīng)緯度少的話還看不出來, 一旦經(jīng)緯度多了, 卡的不要不要的, 完全受不了, 而且手機非常燙, 電池都快燒壞了,, 所以這種方法不可行, 至少不完善


// 后來我研究高德地圖的畫線方法, 發(fā)現(xiàn)一個 方法

/**

* @brief 重新設置折線坐標點. since 5.0.0

* @param coords 指定的經(jīng)緯度坐標點數(shù)組, C數(shù)組,內(nèi)部會做copy,調(diào)用者負責內(nèi)存管理

* @param count 坐標點的個數(shù)

* @return 是否設置成功

*/

- (BOOL)setPolylineWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSInteger)count;


// 這個方法只用一條折線, 但是可以不停的改變這條折線的位置,?


終于利用這個方法 不卡了, 畫線的過程中 FPS 60 左右, 完美


// 因為文件太大就 不上傳了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、前奏 這里只是個人集成過程中的遇到的點,現(xiàn)做下標記。 1,如果你需要集成涉及國外版地圖,基于HTTPS的最新版...
    silence_xz閱讀 3,745評論 4 3
  • 關(guān)于運動軌跡,之前研究了一下,發(fā)現(xiàn)其實就是對地圖定位的記錄以及畫線,以高德地圖為例,高德地圖封裝了各種各樣的方法且...
    _Waiting_閱讀 14,832評論 40 13
  • 如何快速集成百度地圖: 注冊百度開發(fā)者帳號=》創(chuàng)建應用=》下載SDK=》集成開發(fā)=》測試應用=》發(fā)布應用 1、注冊...
    孤獨的_拾荒者閱讀 1,392評論 1 1
  • 實現(xiàn)效果: 實現(xiàn)思路: 一:后臺獲取每個區(qū)的數(shù)據(jù) -(void)addAnnotationWithArray:(N...
    歐大帥Allen閱讀 2,163評論 12 11
  • 基礎地圖 開發(fā)者可利用SDK提供的接口,使用百度提供的基礎地圖數(shù)據(jù)。目前百度地圖SDK所提供的地圖等級為19級,所...
    DestinyFighter_閱讀 5,964評論 6 15

友情鏈接更多精彩內(nèi)容