高德地图开发iOS 地图SDK出行线路规划—未来行程路线规划

高德地图开发iOS 地图SDK出行线路规划—未来行程路线规划

未来行程路线规划 最后更新时间: 2021年01月22日

自地图 SDK 搜索功能 6.9.0 版本起新增未来行程路线规划,简称ETD。 未来出行规划(ETD)服务已覆盖全国所有城市,可提供未来7天的出行路线规划。

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

第一步,引入头文件

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

Objective-C
Swift

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

第二步,配置KEY

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

Objective-C
Swift

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

第三步, 定义 AMapSearchAPI

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

第四步,构造 AMapSearchAPI

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

Objective-C
Swift

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

第五步,设置未来行程规划参数

请求参数类为 AMapDrivingRouteSearchRequest,其中:

参数名

含义

是否必填

origin

出发点坐标

必填

destination

目的点坐标

必填

beginTime

出发时间

必填

 interval

时间间隔

必填

 timeCount

时间点个数,最多48个

必填

 originId

出发点POIID

否

 destinationId

目的点POIID

否

 origintype

出发点POI类型编码

否

 destinationtype

目的点点POI类型编码

否

 parentId

目的点的父POIID

否

 plateProvince

车牌省份,用汉字填入车牌省份缩写。用于判断是否限行。

否

 plateNumber

车牌详情,填入除省份及标点之外的字母和数字(需大写)。用于判断是否限行。

否

 cartype

 驾车路径规划车辆类型

否

 strategy

路径规划的策略,可选,默认为0-速度优先;详细策略请见[下方ETD驾车策略说明]

否

Objective-C
Swift

 self.startAnnotation.coordinate = self.startCoordinate;
    self.destinationAnnotation.coordinate = self.destinationCoordinate;
    
    AMapFutureRouteSearchRequest *navi = [[AMapFutureRouteSearchRequest alloc] init];
    /* 出发点. */
    navi.origin = [AMapGeoPoint locationWithLatitude:self.startCoordinate.latitude
                                           longitude:self.startCoordinate.longitude];
    /* 目的地. */
    navi.destination = [AMapGeoPoint locationWithLatitude:self.destinationCoordinate.latitude
                                                longitude:self.destinationCoordinate.longitude];
    NSTimeInterval startTime = [[NSDate dateWithTimeIntervalSinceNow:3600] timeIntervalSince1970];
    NSString *timeString = [NSString stringWithFormat:@"%0.f", startTime];
    navi.beginTime = timeString;//出发时间设置为当前时间之后一个小时
    navi.interval = 900;//时间间隔为15分钟
    navi.timeCount = 10;
request.origin = AMapGeoPoint.location(withLatitude: CGFloat(startCoordinate.latitude), longitude: CGFloat(startCoordinate.longitude))
    request.destination = AMapGeoPoint.location(withLatitude: CGFloat(destinationCoordinate.latitude), longitude: CGFloat(destinationCoordinate.longitude))
    let request = AMapFutureRouteSearchRequest()
        
    let nowTime = Date().timeIntervalSince1970
    var timeStamp = Int(nowTime!)
    timeStamp += 3600;
    let timeStr = String(timeStamp)

    request.beginTime = timeStr
    request.interval = 900
    request.timeCount = 10

第六步,发起未来行程路线规划

调用 AMapSearchAPI 的 AMapFutureRouteSearch 并发起未来行程路线规划。

Objective-C
Swift

[self.search AMapFutureRouteSearch:navi];
search.aMapFutureRouteSearch(request)

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

当检索成功时,会进到 onFutureRouteSearchDone 回调函数中,在该回调中,通过解析 AMapFutureRouteSearchResponse 获取将未来行程规划路线的数据显示在地图上。

Objective-C
Swift

- (void)onFutureRouteSearchDone:(AMapRouteSearchBaseRequest *)request response:(AMapFutureRouteSearchResponse *)response
{
    if (!response.paths.count || !response.timeInfos.count) {
        return;
    }
    //解析response获取路径信息,具体解析见 Demo
}
func onFutureRouteSearchDone(_ request: AMapRouteSearchBaseRequest!, response: AMapFutureRouteSearchResponse!) {
        
    if response.paths.count == 0 || response.timeInfos.count == 0 {
            return
    }
    //解析response获取路径信息,具体解析见 Demo
}

ETD驾车策略说明

策略ID

策略说明

1

返回的结果考虑路况,尽量躲避拥堵而规划路径,与高德地图的“躲避拥堵”策略一致

2

返回的结果不走高速,与高德地图“不走高速”策略一致

3

返回的结果尽可能规划收费较低甚至免费的路径,与高德地图“避免收费”策略一致

4

返回的结果考虑路况,尽量躲避拥堵而规划路径,并且不走高速,与高德地图的“躲避拥堵&不走高速”策略一致

5

返回的结果尽量不走高速,并且尽量规划收费较低甚至免费的路径结果,与高德地图的“避免收费&不走高速”策略一致

6

返回路径规划结果会尽量的躲避拥堵,并且规划收费较低甚至免费的路径结果,与高德地图的“躲避拥堵&避免收费”策略一致

7

返回的结果尽量躲避拥堵,规划收费较低甚至免费的路径结果,并且尽量不走高速路,与高德地图的“避免拥堵&避免收费&不走高速”策略一致

8

返回的结果会优先选择高速路,与高德地图的“高速优先”策略一致

9

返回的结果会优先考虑高速路,并且会考虑路况躲避拥堵,与高德地图的“躲避拥堵&高速优先”策略一致

10

不考虑路况,返回速度最优、耗时最短的路线,但是此路线不一定距离最短 

11

避让拥堵&速度优先&避免收费

失败说明

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

Objective-C
Swift

- (void)AMapSearchRequest:(id)request didFailWithError:(NSError *)error
{
    NSLog(@"Error: %@", error);
}
func aMapSearchRequest(_ request: Any!, didFailWithError error: Error!) {
    print("Error:\(error)")
}

🚀 如未找到文章请搜索栏搜素 | Ctrl+D收藏本站 | 联系邮箱:15810050733@qq.com