转载

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]; } 
正文到此结束
Loading...