项目需要集成百度地图,那么关于如何集成百度地图的事,就自己去百度开放平台查看文档吧,这是非常简单的事,在这里就不多说了。
那么下面我就说说我在这个demo里所做的事。
首先,项目需要具备定位及计算两地的距离
其次,项目需要根据两个地点来拿到所有路线,并且可根据不同的策略拿到对应的最佳路线。
最后,需要拿到打车相关信息
那么这里我就自己写了一个单例类,这是在内部处理所有的代理,外部可以非常方便地调用,如果有好的建议,请在评论中赐教,谢谢!
//
// HYBBaiduMapHelper.h
// BaiduMapDemo
//
// Created by 黄仪标 on 14/11/18.
// Copyright (c) 2014年 黄仪标. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "BMapKit.h"
typedef void (^HYBUserLocationCompletion)(BMKUserLocation *userLocation);
typedef void (^HYBRouteSearchCompletion)(BMKTransitRouteResult *result);
/*!
* @brief 百度地图相关API操作类
*
* @author huangyibiao
*/
@interface HYBBaiduMapHelper : NSObject
+ (HYBBaiduMapHelper *)shared;
///
/// 该方法在appdelegate的调用,在应用启动时,请求授权百度地图
- (BOOL)startWithAppKey:(NSString *)appKey;
///
/// 下面的几个方法是定位使用
- (void)locateInView:(UIView *)mapSuerView
frame:(CGRect)frame
withCompletion:(HYBUserLocationCompletion)completion;
- (void)viewWillAppear;
- (void)viewWillDisappear;
- (void)viewDidDeallocOrReceiveMemoryWarning;
///
/// 下面的方法是计算两地的距离
/// 返回距离单位为米
- (CLLocationDistance)distanceWithStartPoint:(CLLocationCoordinate2D)startPoint
endPoint:(CLLocationCoordinate2D)endPoint;
///
/// 下面的方法是路线规划获取操作
/// 注意:不能同时调用下面的这三个方法,必须是先调用完一个,返回结果后,再继续调用别的,否则会覆盖前一个操作的数据
/// 公交检索方法
/// 前两个参数,分别表示起点和终点的位置名称
/// 第三个参数,表示在哪个城市里检索
- (void)transitRouteSearchFrom:(BMKPlanNode *)startNode
to:(BMKPlanNode *)endNode
city:(NSString *)city
transitPolicy:(BMKTransitPolicy)transitPolicy
completion:(HYBRouteSearchCompletion)completion;
/// 驾乘检索方法
/// 前两个参数,分别表示起点和终点的位置名称
- (void)driveRouteSearchFrom:(BMKPlanNode *)startNode
to:(BMKPlanNode *)endNode
drivePolicy:(BMKDrivingPolicy)drivePolicy
completion:(HYBRouteSearchCompletion)completion;
/// 步行检索方法
/// 前两个参数,分别表示起点和终点的位置名称
- (void)walkRouteSearchFrom:(BMKPlanNode *)startNode
to:(BMKPlanNode *)endNode
completion:(HYBRouteSearchCompletion)completion;
@end
//
// HYBBaiduMapHelper.m
// BaiduMapDemo
//
// Created by 黄仪标 on 14/11/18.
// Copyright (c) 2014年 黄仪标. All rights reserved.
//
#import "HYBBaiduMapHelper.h"
@interface HYBBaiduMapHelper () <BMKLocationServiceDelegate,
BMKGeneralDelegate,
BMKMapViewDelegate,
BMKRouteSearchDelegate> {
BMKMapManager *_mapManager;
HYBUserLocationCompletion _locationCompletion;
HYBRouteSearchCompletion _routeSearchCompletion;
BMKMapView *_mapView;
BMKLocationService *_locationService;
BMKRouteSearch *_routeSearch;
}
@end
@implementation HYBBaiduMapHelper
+ (HYBBaiduMapHelper *)shared {
static HYBBaiduMapHelper *baiduMapHelper = nil;
static dispatch_once_t onceToken = 0;
dispatch_once(&onceToken, ^{
if (!baiduMapHelper) {
baiduMapHelper = [[[self class] alloc] init];
}
});
return baiduMapHelper;
}
- (instancetype)init {
if (self = [super init]) {
_mapManager = [[BMKMapManager alloc] init];
}
return self;
}
- (BOOL)startWithAppKey:(NSString *)appKey {
if (![appKey isKindOfClass:[NSString class]] || appKey.length == 0 || appKey == nil) {
return NO;
}
return [_mapManager start:appKey generalDelegate:self];
}
- (void)locateInView:(UIVi