1. 程式人生 > >高德地圖API(流程法)整理分析

高德地圖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;