示例中心
功能在线体验
控制台

高德 开发 iOS 地图SDK 开发指南 出行线路规划 驾车出行路线规划

更新时间:2017年04月05日

注意:下面介绍的功能使用的是地图SDK的搜索功能,需要在工程中导入搜索功能库(AMapSearchKit.framework)

驾车出行路线规划常用于驾车里程的价格预估,以及出行路线的提前规划。

实现驾车路线规划的步骤如下:

第 1 步,引入头文件

引入 AMapFoundationKit.h 和 AMapSearchKit.h 这两个头文件。

#import <AMapFoundationKit/AMapFoundationKit.h>

#import <AMapSearchKit/AMapSearchKit.h>
//在桥接文件中引入头文件
#import <AMapFoundationKit/AMapFoundationKit.h>

#import <AMapSearchKit/AMapSearchKit.h>

第 2 步,配置Key

在使用搜索功能时,需要添加 Key。

如果您使用的是搜索库(AMapSearchKit.framework) v4.x 版本需要引入基础 SDK AMapFoundationKit.framework ,设置 Key 的方法如下:

iOS 搜索功能 v4.x 版本设置 Key:

[AMapServices sharedServices].apiKey = @"您的key";
AMapServices.shared().apiKey = "您的Key"

如果您使用的是搜索功能 v3.x 或之前版本,请您尽快更新。

iOS 搜索功能 v3.x 版本设置 Key:

[AMapSearchServices sharedServices].apiKey = @"您的key";
AMapSearchServices.shared().apiKey = "您的Key"

第 3 步,定义 AMapSearchAPI

定义主搜索对象 AMapSearchAPI ,并继承搜索协议<AMapSearchDelegate>。

第 4 步,构造 AMapSearchAPI

构造主搜索对象 AMapSearchAPI,并设置代理。

self.search = [[AMapSearchAPI alloc] init];
self.search.delegate = self;
search = AMapSearchAPI()
search.delegate = self

第 5 步,设置驾车线路规划参数

请求参数类为 AMapDrivingRouteSearchRequest,其中:

 

  • origin:起点坐标,必设
  • 、destination:终点坐标,必设
  • waypoints:途经点,最多支持16个途经点。
  • avoidpolygons:避让区域,最多支持100个避让区域,每个区域16个点。
  • avoidroad:避让道路,设置避让道路后,避让区域失效。
  • strategy:驾车导航策略,0-速度优先(时间);1-费用优先(不走收费路段的最快道路);2-距离优先;3-不走快速路;4-结合实时交通(躲避拥堵);5-多策略(同时使用速度优先、费用优先、距离优先三个策略);6-不走高速;7-不走高速且避免收费;8-躲避收费和拥堵;9-不走高速且躲避收费和拥堵。
self.startAnnotation.coordinate = self.startCoordinate;
self.destinationAnnotation.coordinate = self.destinationCoordinate;

AMapDrivingRouteSearchRequest *navi = [[AMapDrivingRouteSearchRequest alloc] init];

navi.requireExtension = YES;
navi.strategy = 5;
/* 出发点. */
navi.origin = [AMapGeoPoint locationWithLatitude:self.startCoordinate.latitude
                                       longitude:self.startCoordinate.longitude];
/* 目的地. */
navi.destination = [AMapGeoPoint locationWithLatitude:self.destinationCoordinate.latitude
                                            longitude:self.destinationCoordinate.longitude];
startCoordinate        = CLLocationCoordinate2DMake(39.910267, 116.370888)
destinationCoordinate  = CLLocationCoordinate2DMake(39.989872, 116.481956)

let request = AMapDrivingRouteSearchRequest()
request.origin = AMapGeoPoint.location(withLatitude: CGFloat(startCoordinate.latitude), longitude: CGFloat(startCoordinate.longitude))
request.destination = AMapGeoPoint.location(withLatitude: CGFloat(destinationCoordinate.latitude), longitude: CGFloat(destinationCoordinate.longitude))
        
request.requireExtension = true
[self.search AMapDrivingRouteSearch:navi];
search.aMapDrivingRouteSearch(request)

第 7 步,在回调中处理数据

当检索成功时,会进到 onRouteSearchDone 回调函数中,在该回调中,通过解析 AMapRouteSearchResponse 获取将驾车规划路线的数据显示在地图上。

说明:

1)可以在回调中解析 response,获取驾车的路径。

2)response.route.paths 可以获取到 AMapPath 列表,驾车方案的详细信息可参考 AMapPath 类。

3)规划路径的结果构成如下图所示,可根据此结构图解析结果,准确展示线路。

/* 路径规划搜索回调. */
- (void)onRouteSearchDone:(AMapRouteSearchBaseRequest *)request response:(AMapRouteSearchResponse *)response
{
    if (response.route == nil)
    {
        return;
    }
    
   //解析response获取路径信息,具体解析见 Demo
}
func onRouteSearchDone(_ request: AMapRouteSearchBaseRequest!, response: AMapRouteSearchResponse!) {
    if response.count > 0 {
        //解析response获取路径信息
    }
}

说明

当检索失败时,会进入 didFailWithError 回调函数,通过该回调函数获取产生的失败的原因。

- (void)AMapSearchRequest:(id)request didFailWithError:(NSError *)error
{
    NSLog(@"Error: %@", error);
}
func aMapSearchRequest(_ request: Any!, didFailWithError error: Error!) {
    print("Error:\(error)")
}
示例中心 功能
在线体验
常见问题