百度地图的路径规划功能, 
在使用百度路径的时候,出现了一些小问题,在此,分享一下自己的最简单的一个路径小demo 
当然,前面的百度配置问题,我就不和大家讲了,因为这方面的资料太多了!现在,我来介绍一下这个小demo

AppDelegate.m文件如下,
#import "AppDelegate.h"
@implementation AppDelegate
(BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions 
{ 
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
mapManager = [[BMKMapManager alloc]init]; 
// 如果要关注网络及授权验证事件,请设定 generalDelegate参数 
BOOL ret = [mapManager start:@“6Gp5e6XYGQn5aRRD1DK0vKCf” generalDelegate:nil]; 
if (!ret) {
NSLog(@"manager start failed!");
}
rootViewController *rootVC = [[rootViewController alloc] init]; 
navigationController = [[UINavigationController alloc] initWithRootViewController:rootVC]; 
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible]; 
return YES;
}
然后,rootViewController.m文件如下,这里只有步行这个按钮有效果哦!
#import "rootViewController.h"
@interface RouteAnnotation : BMKPointAnnotation 
{
int _type; ///<0:起点 1:终点 2:公交 3:地铁 4:驾乘 5:途经点 int _degree;
}
@property (nonatomic) int type; 
@property (nonatomic) int degree; 
@end 
@implementation RouteAnnotation
@synthesize type = type; 
@synthesize degree = degree; 
@end 
@interface rootViewController () 
{ 
UITextField *textFrom; UITextField *textTo; UIButton *btnBus; UIButton *btnCar; UIButton *btnfoot; UIView *_mapV ; BMKMapView* _mapView; BMKRouteSearch* _routesearch;
}
@implementation UIImage(InternalMethod)
(UIImage*)imageRotatedByDegrees:(CGFloat)degrees 
{
CGFloat width = CGImageGetWidth(self.CGImage); 
CGFloat height = CGImageGetHeight(self.CGImage);
CGSize rotatedSize;
rotatedSize.width = width; 
rotatedSize.height = height;
UIGraphicsBeginImageContext(rotatedSize); 
CGContextRef bitmap = UIGraphicsGetCurrentContext(); 
CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2); 
CGContextRotateCTM(bitmap, degrees * M_PI / 180); 
CGContextRotateCTM(bitmap, M_PI); 
CGContextScaleCTM(bitmap, -1.0, 1.0); 
CGContextDrawImage(bitmap, CGRectMake(-rotatedSize.width/2, -rotatedSize.height/2, rotatedSize.width, rotatedSize.height), self.CGImage); 
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return newImage; 
}
@interface rootViewController ()
@implementation rootViewController
(NSString)getMyBundlePath1:(NSString )filename 
{
NSBundle * libBundle = MYBUNDLE ; 
if ( libBundle && filename ){
NSString * s=[[libBundle resourcePath ] stringByAppendingPathComponent : filename]; return s;
} 
return nil ; 
}
(id)initWithNibName:(NSString )nibNameOrNil bundle:(NSBundle )nibBundleOrNil 
{ 
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
if (self) {
// Custom initialization self.view.backgroundColor = [UIColor redColor];
} 
return self; 
}
(void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view. 
self.title = @“路径规划”;
[self setUpUI];
textFrom.text = @“天安门”; 
textTo.text = @“百度大厦”;
routesearch = [[BMKRouteSearch alloc]init]; 
routesearch.delegate = self;// 此处记得不用的时候需要置nil,否则影响内存的释放 
mapView = [[BMKMapView alloc]initWithFrame:mapV.bounds]; 
mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放 
[mapV addSubview:_mapView];
}
-(void)setUpUI 
{
UILabel *lableFrom = [[UILabel alloc] initWithFrame:CGRectMake(20,70, 60, 30)]; lableFrom.text = @"起点"; UILabel *lableTo = [[UILabel alloc] initWithFrame:CGRectMake(20,120, 60, 30)]; lableTo.text = @"终点"; textFrom = [[UITextField alloc] initWithFrame:CGRectMake(100, 70, 80, 30)]; textFrom.backgroundColor = [UIColor greenColor]; textTo = [[UITextField alloc] initWithFrame:CGRectMake(100, 120, 80, 30)]; textTo.backgroundColor = [UIColor greenColor]; btnBus = [[UIButton alloc] initWithFrame:CGRectMake(20, 160, 40, 30)]; [btnBus setTitle:@"公交" forState:UIControlStateNormal]; btnCar = [[UIButton alloc] initWithFrame:CGRectMake(80, 160, 40, 30)]; [btnCar setTitle:@"驾车" forState:UIControlStateNormal]; btnfoot = [[UIButton alloc] initWithFrame:CGRectMake(150, 160, 40, 30)]; [btnfoot setTitle:@"步行" forState:UIControlStateNormal]; [btnfoot addTarget:self action:@selector(walkBtnClick) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview: lableFrom]; [self.view addSubview: lableTo]; [self.view addSubview: textFrom]; [self.view addSubview: textTo]; [self.view addSubview: btnBus]; [self.view addSubview: btnCar]; [self.view addSubview: btnfoot]; CGFloat height = [UIScreen mainScreen].bounds.size.height - CGRectGetMaxY(btnBus.frame) ; _mapV = [[UIView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(btnBus.frame), 320, height)]; _mapV.backgroundColor = [UIColor whiteColor]; [self.view addSubview:_mapV];
}
-(void)walkBtnClick 
{
BMKPlanNode* start = [[BMKPlanNode alloc]init] ;
start.name = textFrom.text;
start.cityName = @"北京市";
BMKPlanNode* end = [[BMKPlanNode alloc]init];
end.name = textTo.text;
end.cityName = @"北京市";
BMKWalkingRoutePlanOption *walkingRouteSearchOption = [[BMKWalkingRoutePlanOption alloc]init];
walkingRouteSearchOption.from = start;
walkingRouteSearchOption.to = end;
NSLog(@"%@------%@",start.name,end.name);
BOOL flag = [_routesearch walkingSearch:walkingRouteSearchOption];
if(flag)
{
    NSLog(@"walk检索发送成功");
}
else
{
    NSLog(@"walk检索发送失败");
} 
}
BMKWalkingRouteLine* plan = (BMKWalkingRouteLine*)[result.routes objectAtIndex:0];
int size = [plan.steps count];
int planPointCounts = 0;
for (int i = 0; i < size; i++) {
    BMKWalkingStep* transitStep = [plan.steps objectAtIndex:i];
    if(i==0){
        RouteAnnotation* item = [[RouteAnnotation alloc]init];
        item.coordinate = plan.starting.location;
        item.title = @"起点";
        item.type = 0;
        [_mapView addAnnotation:item]; // 添加起点标注
    }else if(i==size-1){
        RouteAnnotation* item = [[RouteAnnotation alloc]init];
        item.coordinate = plan.terminal.location;
        item.title = @"终点";
        item.type = 1;
        [_mapView addAnnotation:item]; // 添加起点标注
    }
    //添加annotation节点
    RouteAnnotation* item = [[RouteAnnotation alloc]init];
    item.coordinate = transitStep.entrace.location;
    item.title = transitStep.entraceInstruction;
    item.degree = transitStep.direction * 30;
    item.type = 4;
    [_mapView addAnnotation:item];
    //轨迹点总数累计
    planPointCounts += transitStep.pointsCount;
}
//轨迹点
BMKMapPoint * temppoints = new BMKMapPoint[planPointCounts];
int i = 0;
for (int j = 0; j < size; j++) {
    BMKWalkingStep* transitStep = [plan.steps objectAtIndex:j];
    int k=0;
    for(k=0;k<transitStep.pointsCount;k++) {
        temppoints[i].x = transitStep.points[k].x;
        temppoints[i].y = transitStep.points[k].y;
        i++;
    }
}
// 通过points构建BMKPolyline
BMKPolyline* polyLine = [BMKPolyline polylineWithPoints:temppoints count:planPointCounts];
[_mapView addOverlay:polyLine]; // 添加路线overlay
delete []temppoints; }}
BMKPolylineView* polylineView = [[BMKPolylineView alloc] initWithOverlay:overlay]; polylineView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:1]; polylineView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.7]; polylineView.lineWidth = 3.0; return polylineView;}
(BMKAnnotationView)getRouteAnnotationView:(BMKMapView )mapview viewForAnnotation:(RouteAnnotation)routeAnnotation 
{ 
BMKAnnotationView view = nil; 
switch (routeAnnotation.type) {
case 0:
{
    view = [mapview dequeueReusableAnnotationViewWithIdentifier:@"start_node"];
    if (view == nil) {
        view = [[BMKAnnotationView alloc]initWithAnnotation:routeAnnotation reuseIdentifier:@"start_node"] ;
        view.image = [UIImage imageWithContentsOfFile:[self getMyBundlePath1:@"images/icon_nav_start.png"]];
        view.centerOffset = CGPointMake(0, -(view.frame.size.height * 0.5));
        view.canShowCallout = TRUE;
    }
    view.annotation = routeAnnotation;
}
    break;
case 1:
{
    view = [mapview dequeueReusableAnnotationViewWithIdentifier:@"end_node"];
    if (view == nil) {
        view = [[BMKAnnotationView alloc]initWithAnnotation:routeAnnotation reuseIdentifier:@"end_node"] ;
        view.image = [UIImage imageWithContentsOfFile:[self getMyBundlePath1:@"images/icon_nav_end.png"]];
        view.centerOffset = CGPointMake(0, -(view.frame.size.height * 0.5));
        view.canShowCallout = TRUE;
    }
    view.annotation = routeAnnotation;
}
    break;
case 2:
{
    view = [mapview dequeueReusableAnnotationViewWithIdentifier:@"bus_node"];
    if (view == nil) {
        view = [[BMKAnnotationView alloc]initWithAnnotation:routeAnnotation reuseIdentifier:@"bus_node"] ;
        view.image = [UIImage imageWithContentsOfFile:[self getMyBundlePath1:@"images/icon_nav_bus.png"]];
        view.canShowCallout = TRUE;
    }
    view.annotation = routeAnnotation;
}
    break;
case 3:
{
    view = [mapview dequeueReusableAnnotationViewWithIdentifier:@"rail_node"];
    if (view == nil) {
        view = [[BMKAnnotationView alloc]initWithAnnotation:routeAnnotation reuseIdentifier:@"rail_node"] ;
        view.image = [UIImage imageWithContentsOfFile:[self getMyBundlePath1:@"images/icon_nav_rail.png"]];
        view.canShowCallout = TRUE;
    }
    view.annotation = routeAnnotation;
}
    break;
case 4:
{
    view = [mapview dequeueReusableAnnotationViewWithIdentifier:@"route_node"];
    if (view == nil) {
        view = [[BMKAnnotationView alloc]initWithAnnotation:routeAnnotation reuseIdentifier:@"route_node"] ;
        view.canShowCallout = TRUE;
    } else {
        [view setNeedsDisplay];
    }
    UIImage* image = [UIImage imageWithContentsOfFile:[self getMyBundlePath1:@"images/icon_direction.png"]];
    view.image = [image imageRotatedByDegrees:routeAnnotation.degree];
    view.annotation = routeAnnotation;
}
    break;
case 5:
{
    view = [mapview dequeueReusableAnnotationViewWithIdentifier:@"waypoint_node"];
    if (view == nil) {
        view = [[BMKAnnotationView alloc]initWithAnnotation:routeAnnotation reuseIdentifier:@"waypoint_node"] ;
        view.canShowCallout = TRUE;
    } else {
        [view setNeedsDisplay];
    }
    UIImage* image = [UIImage imageWithContentsOfFile:[self getMyBundlePath1:@"images/icon_nav_waypoint.png"]];
    view.image = [image imageRotatedByDegrees:routeAnnotation.degree];
    view.annotation = routeAnnotation;
}
    break;
default:
    break; }
return view; 
}
(BMKAnnotationView )mapView:(BMKMapView )view viewForAnnotation:(id )annotation 
{ 
if ([annotation isKindOfClass:[RouteAnnotation class]]) { 
return [self getRouteAnnotationView:view viewForAnnotation:(RouteAnnotation*)annotation];
} 
return nil; 
}
(void)didReceiveMemoryWarning 
{ 
[super didReceiveMemoryWarning]; 
// Dispose of any resources that can be recreated. 
} 
@end 
而 _routesearch.delegate = self;在设置代理的时候,使用的是BMKRouteSearch百度api中的代理,而此代理必须先实现了代理方法才能设置代理(一般我们些的代理方法,并不需要先遵守哦!)而且我们使用的是arc,所以,这行代码会报错!必须把代理属性设置为weak才行哦!
其它基本上没有什么错误了哈,其它不会可以参考官方demo哦!
原文:http://my.oschina.net/panyong/blog/306558