iOS第三方地图-高德地图(导航sdk路径规划)
高德地图导航sdk的路径规划获取行程信息主要用到AMapNaviManager这个类
然后调下面的方法
/*! @brief 带起点的驾车路径计算 @param startPoints 起点坐标。支持多个起点,起点列表的尾点为实际导航起点,其他坐标点为辅助信息,带有方向性,可有效避免算路到马路的另一侧。 @param endPoints 终点坐标。支持多个终点,终点列表的尾点为实际导航终点,其他坐标点为辅助信息,带有方向性,可有效避免算路到马路的另一侧。 @param wayPoints 途经点坐标序列,同时支持最多3个途经点的路径规划。 @param strategy 驾车路径的计算策略 @return 路径是否计算成功 */ - (BOOL)calculateDriveRouteWithStartPoints:(NSArray *)startPoints endPoints:(NSArray *)endPoints wayPoints:(NSArray *)wayPoints drivingStrategy:(AMapNaviDrivingStrategy)strategy;
成功之后会走AMapNaviManagerDelegate的代理方法
/*! @brief 驾车路径规划成功后的回调函数 */ - (void)naviManagerOnCalculateRouteSuccess:(AMapNaviManager *)naviManager;
代理返回的AMapNaviManager就有路径信息
/*! @brief 当前导航路径的信息 */ @property (nonatomic, readonly) AMapNaviRoute *naviRoute;
当我们点进去看,找到了。。
/*! @brief 导航路径总长度(单位:米) */ @property (nonatomic, assign) int routeLength; /*! @brief 导航路径所需的时间(单位:秒) */ @property (nonatomic, assign) int routeTime;
显示终点起点(添加到上面就行了)
/** * 创建起点和终点的annitation(起点是定位点的话不创建传入的时候传入坐标就行了) */ - (void)addBeginAndEndAnnotation { _endAnnotation = [[MAPointAnnotation alloc] init]; CLLocationCoordinate2D coordinate = {30.655593,104.073803}; [_endAnnotation setCoordinate:coordinate]; _endAnnotation.title = @"终点"; [self.mapView addAnnotation:_endAnnotation]; _beginAnnotation = [[MAPointAnnotation alloc] init]; CLLocationCoordinate2D coordinatebegin = {30.612339,104.071503}; [_beginAnnotation setCoordinate:coordinatebegin]; _beginAnnotation.title = @"起点"; [self.mapView addAnnotation:_beginAnnotation]; }
会调MAMapViewDelegate中的生成相应的anntation
/*! @brief 根据anntation生成对应的View @param mapView 地图View @param annotation 指定的标注 @return 生成的标注View */ - (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id <MAAnnotation>)annotation;
绘制路径(得到路径信息绘制)
- (void)showRouteWithNaviRoute:(AMapNaviRoute *)naviRoute { if (naviRoute == nil) { return; } // 清除旧的overlays if (_polyline) { [self.mapView removeOverlay:_polyline]; self.polyline = nil; } NSUInteger coordianteCount = [naviRoute.routeCoordinates count]; CLLocationCoordinate2D coordinates[coordianteCount]; for (int i = 0; i < coordianteCount; i++) { AMapNaviPoint *aCoordinate = [naviRoute.routeCoordinates objectAtIndex:i]; coordinates[i] = CLLocationCoordinate2DMake(aCoordinate.latitude, aCoordinate.longitude); } _polyline = [MAPolyline polylineWithCoordinates:coordinates count:coordianteCount]; [self.mapView addOverlay:_polyline]; }
百度云盘demo地址:http://pan.baidu.com/s/1kTEOK0v