高德地圖API(流程法)整理分析

【高德地圖API(流程法)分析】:

前言:公司現在的網約車項目,使用的是高德地圖,因爲地圖導航這一塊的功能佔比量比較大,爲了方便大家對高德地圖API的瞭解和學習使用,使用流程圖把高德API分析整理了下。

 

——————————————————【一】流程:開始當前位置定位——————————————————————

 【乘客當前位置定位涉及的API:】

/**

 *  @brief 單次定位。如果當前正在連續定位,調用此方法將會失敗,返回NO

      該方法將會根據設定的 desiredAccuracy 去   獲取定位信息。

     如果獲取的定位信息精確度低於 desiredAccuracy ,將會持續的等待定位信息,直到超時後通過completionBlock返回精度最高的定位信息。

      可以通過 stopUpdatingLocation 方法去取消正在進行的單次定位請求。

 *  @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;

  

  • 顯示當前位置定位內容API:

/**

 * @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];

 

 

  • 乘客上車點位置推薦涉及的API:

/**

 * @brief POI查詢回調函數

 * @param request  發起的請求,具體字段參考 AMapPOISearchBaseRequest 及其子類。

 * @param response 響應結果,具體字段參考 AMapPOISearchResponse 。

 */

- (void)onPOISearchDone:(AMapPOISearchBaseRequest *)request response:(AMapPOISearchResponse *)response;

 

 

  • 乘客下車點位置推薦涉及的API:

/**

 * @brief POI查詢回調函數

 * @param request  發起的請求,具體字段參考 AMapPOISearchBaseRequest 及其子類。

 * @param response 響應結果,具體字段參考 AMapPOISearchResponse 。

 */

- (void)onPOISearchDone:(AMapPOISearchBaseRequest *)request response:(AMapPOISearchResponse *)response;

—————————————————————————————————————————

 

 

 

——————————————————【三】流程:駕車路徑規劃_之_查詢———————————————————————

  • 駕車行程路線請求涉及的API:

 【案例】:

    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:

【第一步】:

———移除標註(移除小車等圖標)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———————————————————————

  • 設備方向更新API

/**

 * @brief 位置或者設備方向更新後,會調用此函數

 * @param mapView 地圖View

 * @param userLocation 用戶定位信息(包括位置與設備方向等數據)

 * @param updatingLocation 標示是否是location數據更新, YES:location數據更新 NO:heading數據更新

 */

- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation;

 

 

  • 逆地址編碼查詢API

/**

 * @brief 逆地址編碼查詢接口

 * @param request 查詢選項。具體屬性字段請參考 AMapReGeocodeSearchRequest 類。

 */

- (void)AMapReGoecodeSearch:(AMapReGeocodeSearchRequest *)request;

 

 

  • 地圖將要發生移動時調用API

/**

 * @brief 地圖將要發生移動時調用此接口

 * @param mapView       地圖view

 * @param wasUserAction 標識是否是用戶動作

 */

- (void)mapView:(MAMapView *)mapView mapWillMoveByUser:(BOOL)wasUserAction;

 

 

  • 地圖移動結束後調用API

/**

 * @brief 地圖移動結束後調用此接口

 * @param mapView       地圖view

 * @param wasUserAction 標識是否是用戶動作

 */

- (void)mapView:(MAMapView *)mapView mapDidMoveByUser:(BOOL)wasUserAction;

 

結束語:通過項目的一個流程跑下來,用到的高德API分析暫時就這些。

附加問題: 在使用高德SDK過程中,出現一個系統非常耗電的問題,根據安卓端和iOS端通過工具測試SDK流程的耗電節點圖來看,項目需要對影響耗電的模塊進行優化。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章