【高德地图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流程的耗电节点图来看,项目需要对影响耗电的模块进行优化。

最新文章

  1. 【转】fatal error C1900: “P1”(第“20081201”版)和“P2”(第“20080116”版)之间 Il 不匹配
  2. delphi tidhttp 超时设置无效的解决方法
  3. 易云盘(nester)-面对企业的和团队文档管理的平台
  4. TortoiseGit 图标不显示
  5. web前端学习笔记(CSS固定宽度布局)
  6. Nginx 支持 WAF 防护功能实战
  7. chrome 浏览器 开发者工具 性能检测 参数解释
  8. [置顶] Objective-C ,ios,iphone开发基础:protocol 协议(委托,代理)的声明
  9. Top命令查看内存
  10. jxl读和取Excel文件
  11. 从UIImage的矩阵变换看矩阵运算的原理
  12. 链栈之C++实现
  13. 从源代码角度分析ViewStub 疑问与原理
  14. php扩展Redis功能
  15. OnPreRender事件常见用法
  16. visual studio code 的必装推荐插件plugin, vscode, vsc
  17. JedisClient(示例)
  18. DOM编程 学习笔记(二)
  19. 利用ssh的私钥登录Linux server
  20. 平衡二叉树之AVL树

热门文章

  1. 浅谈maven中的scope,systempath
  2. Python 应用剖析工具介绍
  3. TFS工具(tf.exe)使用与强制解除锁定签出
  4. Mysql 事务日志(Ib_logfile)
  5. 查看windows所有exe的启动参数。
  6. C#下使用XmlDocument详解
  7. CRM总结
  8. 点击单个cell高度变化的动画效果
  9. [UI] Article intro effects
  10. reactor模型框架图和流程图 libevent