开发 iOS 地图SDK 开发指南 出行线路规划 未来行程路线规划

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

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

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

第一步,引入头文件

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

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

第二步,配置KEY

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

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

第三步, 定义 AMapSearchAPI

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

第四步,构造 AMapSearchAPI

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

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驾车策略说明]

 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 并发起未来行程路线规划。

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

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

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

- (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 回调函数,通过该回调函数获取产生的失败的原因。

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



返回顶部 示例中心 常见问题 智能客服 公众号
二维码