【高德地圖API(流程法)分析】:git
前言:公司如今的網約車項目,使用的是高德地圖,由於地圖導航這一塊的功能佔比量比較大,爲了方便你們對高德地圖API的瞭解和學習使用,使用流程圖把高德API分析整理了下。數組
——————————————————【一】流程:開始當前位置定位——————————————————————函數
【乘客當前位置定位涉及的API:】工具
/**學習
* @brief 單次定位。若是當前正在連續定位,調用此方法將會失敗,返回NO。測試
該方法將會根據設定的 desiredAccuracy 去 獲取定位信息。優化
若是獲取的定位信息精確度低於 desiredAccuracy ,將會持續的等待定位信息,直到超時後經過completionBlock返回精度最高的定位信息。動畫
能夠經過 stopUpdatingLocation 方法去取消正在進行的單次定位請求。ui
* @param withReGeocode 是否帶有逆地理信息(獲取逆地理信息須要聯網)編碼
* @param completionBlock 單次定位完成後的Block
* @return 是否成功添加單次定位Request
*/
- (BOOL)requestLocationWithReGeocode:(BOOL)withReGeocode completionBlock:(AMapLocatingCompletionBlock)completionBlock;
/**
* @brief 連續定位回調函數.注意:若是實現了本方法,則定位信息不會經過amapLocationManager:didUpdateLocation:方法回調。
* @param manager 定位 AMapLocationManager 類。
* @param location 定位結果。
* @param reGeocode 逆地理信息。
*/
- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location reGeocode:(AMapLocationReGeocode *)reGeocode;
/**
* @brief 設置地圖使其能夠顯示數組中全部的annotation, 若是數組中只有一個則直接設置地圖中心爲annotation的位置。
* @param annotations 須要顯示的annotation
* @param animated 是否執行動畫
*/
- (void)showAnnotations:(NSArray *)annotations animated:(BOOL)animated;
——————————————————————————————————————————
—————————————————【二】流程:上,下車點位置推薦——————————————————————
【定位地址搜索案例】:
AMapPOIKeywordsSearchRequest *request = [[AMapPOIKeywordsSearchRequest alloc] init];
request.keywords = keywords;
request.city = self.currentCity;
request.requireSubPOIs = YES;
request.requireExtension = YES;
request.cityLimit = YES;
request.offset = 10;
//推薦點位置搜索請求
[self.mapSearch AMapPOIKeywordsSearch:request];
/**
* @brief POI查詢回調函數
* @param request 發起的請求,具體字段參考 AMapPOISearchBaseRequest 及其子類。
* @param response 響應結果,具體字段參考 AMapPOISearchResponse 。
*/
- (void)onPOISearchDone:(AMapPOISearchBaseRequest *)request response:(AMapPOISearchResponse *)response;
/**
* @brief POI查詢回調函數
* @param request 發起的請求,具體字段參考 AMapPOISearchBaseRequest 及其子類。
* @param response 響應結果,具體字段參考 AMapPOISearchResponse 。
*/
- (void)onPOISearchDone:(AMapPOISearchBaseRequest *)request response:(AMapPOISearchResponse *)response;
—————————————————————————————————————————
——————————————————【三】流程:駕車路徑規劃_之_查詢———————————————————————
【案例】:
self.driveAllLine = [[AMapDrivingRouteSearchRequest alloc] init];
self.driveAllLine.requireExtension = YES;
/* 出發點. */
self.driveAllLine.origin = [AMapGeoPoint locationWithLatitude: self.startPointAnnotation.coordinate.latitude
longitude: self.startPointAnnotation.coordinate.longitude];
/* 目的地. */
self.driveAllLine.destination = [AMapGeoPoint locationWithLatitude: self.endPointAnnotation.coordinate.latitude
longitude: self.endPointAnnotation.coordinate.longitude];
/*發起請求 */
[self.searchAPI AMapDrivingRouteSearch:self.driveAllLine];
【第一步】:
———出發點,目的地座標點 (經度,緯度)生成API————
/**
* @brief 實例化一個AMapGeoPoint對象
* @param lat 緯度
* @param lon 經度
*/
+ (AMapGeoPoint *)locationWithLatitude:(CGFloat)lat longitude:(CGFloat)lon;
【第二步】:
———駕車路徑規劃查詢接口API————
/**
* @brief 駕車路徑規劃查詢接口
* @param request 查詢選項。具體屬性字段請參考 AMapDrivingRouteSearchRequest 類。
*/
- (void)AMapDrivingRouteSearch:(AMapDrivingRouteSearchRequest *)request;
【第三步】:
———路徑規劃查詢回調API————
/**
* @brief 路徑規劃查詢回調
* @param request 發起的請求,具體字段參考 AMapRouteSearchBaseRequest 及其子類。
* @param response 響應結果,具體字段參考 AMapRouteSearchResponse 。
*/
- (void)onRouteSearchDone:(AMapRouteSearchBaseRequest *)request response:(AMapRouteSearchResponse *)response;
—————————————————————————————————————————
——————————————————【四】流程:駕車路徑規劃_之_顯示———————————————————————
【第一步】:
———移除標註(移除小車等圖標)API———
/**
* @brief 移除標註
* @param annotation 要移除的標註
*/
- (void)removeAnnotation:(id <MAAnnotation>)annotation;
【第二步】:
———移除overlay數組(路徑)API————
/**
* @brief 移除一組Overlay
* @param overlays 要移除的overlay數組
*/
- (void)removeOverlays:(NSArray *)overlays;
【第三步】:
———向地圖窗口添加標註API————
/**
* @brief 向地圖窗口添加標註,須要實現MAMapViewDelegate的-mapView:viewForAnnotation:函數來生成標註對應的View
* @param annotation 要添加的標註
*/
- (void)addAnnotation:(id <MAAnnotation>)annotation;
【第四步】:
———生成的標註View 將要顯示處理API(用於區分標註類型的特殊設置)————
* @param mapView 地圖View
* @param annotation 指定的標註
* @return 生成的標註View
*/
- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id <MAAnnotation>)annotation;
【第五步】:
———根據交通情況的線路樣式設置顯示路徑API————
/**
* @brief 根據overlay生成對應的Renderer
* @param mapView 地圖View
* @param overlay 指定的overlay
* @return 生成的覆蓋物Renderer
*/
- (MAOverlayRenderer *)mapView:(MAMapView *)mapView rendererForOverlay:(id <MAOverlay>)overlay;
—————————————————————————————————————————
——————————————————【五】其餘API———————————————————————
/**
* @brief 位置或者設備方向更新後,會調用此函數
* @param mapView 地圖View
* @param userLocation 用戶定位信息(包括位置與設備方向等數據)
* @param updatingLocation 標示是不是location數據更新, YES:location數據更新 NO:heading數據更新
*/
- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation;
/**
* @brief 逆地址編碼查詢接口
* @param request 查詢選項。具體屬性字段請參考 AMapReGeocodeSearchRequest 類。
*/
- (void)AMapReGoecodeSearch:(AMapReGeocodeSearchRequest *)request;
/**
* @brief 地圖將要發生移動時調用此接口
* @param mapView 地圖view
* @param wasUserAction 標識是不是用戶動做
*/
- (void)mapView:(MAMapView *)mapView mapWillMoveByUser:(BOOL)wasUserAction;
/**
* @brief 地圖移動結束後調用此接口
* @param mapView 地圖view
* @param wasUserAction 標識是不是用戶動做
*/
- (void)mapView:(MAMapView *)mapView mapDidMoveByUser:(BOOL)wasUserAction;
結束語:經過項目的一個流程跑下來,用到的高德API分析暫時就這些。
附加問題: 在使用高德SDK過程當中,出現一個系統很是耗電的問題,根據安卓端和iOS端經過工具測試SDK流程的耗電節點圖來看,項目須要對影響耗電的模塊進行優化。