Skip to content

路线规划

路线规划功能可以根据起终点经纬度,可以规划出一条路线展示在地图上,也可以用于导航

初始化导航实例

添加依赖库

  • 将解压后的DMKNaviSDK.framework文件copy或拖拽到工程文件夹中
  • 左侧目录中选中工程名,到 TARGETS->Build Phases-> Link Binary With Libaries 菜单,将DMKNaviSDK.framework拖拽进这个菜单
  • TARGETS->Build Settings->Other Linker Flags 需要添加参数 -ObjC

添加资源包

  • 导航SDK的资源包DMKNaviSDK.bundleDMKNaviSDK.frameworkDMKNaviSDK.bundle 存储了导航SDK运行必备的资源图片、相关配置文件等
  • DMKNaviSDK.bundle 需要加到 TARGETS->Build Phases-> Copy Bundle Resources 菜单中来保证app运行前会拷贝到App主bundle里

调用初始化方法

在使用导航相关功能前,需要调用初始化方法来初始化一些公共实例

objc
#import <DMKNaviSDK/DMKNavigationManager.h>

//...

[DMKNavigationManager setup];

//...

初始化路线规划相关类

DMKNavigationManager是管理路线规划和导航的类,初始化DMKNavigationManager需要先创建DMKNaviDriverView,用来展示规划好的路线,同时会帮你创建好地图实例,无需重复创建

objc
DMKNaviDriverView *naviDriverView = [[DMKNaviDriverView alloc] initWithFrame:self.view.bounds];
[self.view addSubview: naviDriverView];
self.naviDriverView = naviDriverView;
[self.naviDriverView setNaviInfoPanelHidden:YES];

DMKNavigationManager *navigationManager = [[DMKNavigationManager alloc] initWithNaviDriverView:self.naviDriverView];
self.navigationManager = navigationManager;
self.navigationManager.delegate = self;

驾车路线规划

规划一条路线需要提供路线的起点、终点、用户手机号等信息。

  • DMKNaviPoint 用来表示路线起点和终点信息
  • DMKNaviUserInfo 用来表示用户相关信息
  • DMKNaviOrderInfo 用来表示订单信息

以下是具体场景的代码示例:

1 规划订单所需的路线

  • 规划订单所需的路线需要构造DMKNaviOrderInfoDMKNaviUserInfo并调用DMKNavigationManagersearchOrderRouteWithStartPoint:endPoint:orderInfo:userInfo:方法

  • 相关参数说明:

参数说明是否必填
orderSource订单类型,滴图订单=DMKReqOrderSourceDIDI,其他订单=DMKReqOrderSourceDIDI
orderId订单号
orderStage订单阶段,接乘客=1,送乘客=4
uid用户唯一标识,用于关联用户数据
phone手机号,方便查问题用
  • 代码示例
objc
DMKNaviPoint *start = [[DMKNaviPoint alloc] initWithLatitude:40.050614 longitude:116.288738];
DMKNaviPoint *end = [[DMKNaviPoint alloc] initWithLatitude:39.942587 longitude:116.355848];
    
DMKNaviOrderInfo *orderInfo = [[DMKNaviOrderInfo alloc] init];
orderInfo.orderId = @"000111222222223344";
orderInfo.orderStage = 1;
orderInfo.orderSource = DMKReqOrderSourceOPEN;

DMKNaviUserInfo *userInfo = [[DMKNaviUserInfo alloc] init];
userInfo.uid = @"334343";
userInfo.phoneNum = @"18611516867";

[self.navigationManager searchOrderRouteWithStartPoint:start endPoint:end orderInfo:orderInfo userInfo:userInfo];

2 规划非订单所需的路线

  • 规划非订单所需的路线需要构造DMKNaviUserInfo并调用DMKNavigationManagersearchNormalRouteWithStartPoint:endPoint:userInfo:方法

  • 相关参数说明:

参数说明是否必填
uid用户唯一标识,用于关联用户数据
phone手机号,方便查问题用
  • 代码示例:
objc
DMKNaviPoint *start = [[DMKNaviPoint alloc] initWithLatitude:40.050614 longitude:116.288738];
DMKNaviPoint *end = [[DMKNaviPoint alloc] initWithLatitude:40.052798 longitude:116.306076];

DMKNaviUserInfo *userInfo = [[DMKNaviUserInfo alloc] init];
userInfo.uid = @"334343";
userInfo.phoneNum = @"18611516867";

[self.navigationManager searchNormalRouteWithStartPoint:start endPoint:end userInfo:userInfo];

3 获取路线规划结果

实现DMKNavigationManager.h中定义的DMKNavigationManagerDelegate后,就可以在回调方法中收到路线规划成功或失败的结果,并画到地图上:

objc
// 路线规划成功
- (void)routeSearchSuccessedWithResult:(DMKRouteResult *)result {
    self.routeResult = result;
    // 把结果画到地图上
    [self.naviDriverView.mapView showSearchRoute:result routeColor:-1];
}

// 路线规划失败
- (void)routeSearchFailedWithError:(NSError *)error {
    // 进行一些提示
}