最后更新时间:2025-03-25


路线规划

iOS 地图 SDK 提供的路线规划功能支持多种交通方式的路线计算能力,包括:

  1. 驾车(driving):支持结合实时路况、少收费、不走高速等多种偏好,精准预估到达时间(ETA)。
  2. 步行(walking):基于步行路线规划。
  3. 骑行(bicycling):基于自行车的骑行路线。
  4. 公交(transit):支持公共汽车、地铁等多种公共交通工具的换乘方案计算。
  5. 货车(trucking):基于道路客观条件产生的宽高重限制和行政部门规定的限制,结合实时路况、少收费、不走高速、躲避拥堵等多种偏好,对货车路线进行规划。



一、请求参数概览

1、驾车

QMSDrivingRouteSearchOption参数列表如下:

属性 说明
NSString *from 起点坐标格式: from=lat<纬度>,lng<经度>
NSString *from_poi 起点POI ID,传入后,优先级高于from(坐标), 样例: 4077524088693206111
NSString *from_track 起点轨迹,可通过setTrackPoints生成,格式样例:40.037029,116.316633,16,500,160….
NSString *to 终点坐标格式: to=lat<纬度>,lng<经度>
NSString *to_poi 终点POI ID(可通过腾讯位置服务地点搜索服务得到),当目的地为较大园区、小区时,会以引导点做为终点(如出入口等),体验更优;
该参数优先级高于to(坐标),但是当目的地无引导点数据或POI ID失效时,仍会使用to(坐标)作为终点样例: 4077524088693206111
NSString *policy 路线规划条件参考一下枚举值:
LEAST_TIME: 表示速度优先;
LEAST_FEE: 表示费用优先;
LEAST_DISTANCE: 表示距离优先;
REAL_TRAFFIC: 表示根据实时路况计算最优路线
QMSDrivingRoutePolicyTypeNew policyType 置查询策略,单独设置policy 中 策略参数,目前支持的策略类型
QMSDrivingRoutePolicyTypeNewLeastTime: 参考实时路况,时间最短;
QMSDrivingRoutePolicyTypeNewPickup: 网约车场景 - 接乘客;
QMSDrivingRoutePolicyTypeNewTrip: 网约车场景 – 送乘客
QMSDrivingRoutePerference perference 设置查询偏好,单独设置policy中偏好参数
1.无偏好(默认)QMSDrivingRoutePerferenceNone=0,
2.参考实时路况QMSDrivingRoutePerferenceRealTraffic=1<<0,
3.少收费QMSDrivingRoutePerferenceLeastFee=1<<1,
4.高速优先QMSDrivingRoutePerferenceHighwayFirst=1<<2,
5.不走高速QMSDrivingRoutePerferenceAvoidHighway=1<<3,
6.大路优先QMSDrivingRoutePerferenceHighroadFirst=1<<4,
7.该策略会通过终点坐标查找所在地点(如小区/大厦等),并使用地点出入口做为目的地,使路径更为合理QMSDrivingRoutePerferenceNavPointFirst=1<<5
QMSRouteTagType tag_mode 路线标签形式,默认QMSRouteTagTypeAll:0,返回全部标签v1+v2,中文标签混合返回;QMSRouteTagTypeChinese:1,返回全中文<=4字标签(仅包含v2,不包含解释性标签);
NSString *waypoints 途径点,元素类型为CLLocationCoordinate2D的NSValue类型
NSString *avoid_polygons 避让区域,元素类型为CLLocationCoordinate2D的NSValue类型 避让区域:支持32个避让区域,每个区域最多可有9个顶 格式:纬度在前,经度在后,用半角逗号 “,” 分隔,小数点后不超过6位,各经纬度之间用半角分号 “;” 分隔。各区域多边形间,用竖线符号分隔 “
NSNumber *heading 在起点位置时的车头方向,数值型,取值范围0至360(0度代表正北,顺时针一周360度)传入车头方向,对于车辆所在道路的判断非常重要,直接影响路线计算的效果
NSNumber *speed from辅助参数,速度,单位:米/秒,默认3。 当速度低于1.39米/秒时,heading将被忽略
NSNumber *accuracy from辅助参数,定位精度,单位:米,取>0数值,默认5。 当定位精度>30米时heading参数将被忽略
NSString *plate_number 车牌号,填入后,路线引擎会根据车牌对限行区域进行避让,不填则不不考虑限行问题
int get_mp 是否返回多方案,取值:
0:默认,仅返回一条路线方案;
1:返回多方案(最多可返回三条方案供用户备选)
int no_step 是否返回路线引导信息,可使回包数据量更小,取值:
0:默认,返回路线引导信息;
1:不返回
int cartype 车辆类型(影响限行规则),取值:
0:默认,普通汽车;
1:新能源
int get_speed 返回路况信息, 取值:0: [默认]不返回;1: 返回
NSDate *departure_time 出发时间。若传入时间小于当前时间或者为空,服务端则使用当前时间

2、步行

QMSWalkingRouteSearchOption参数列表如下:

属性 说明
NSString *from 起点坐标 格式:from=lat<纬度>,lng<经度>
NSString *to 终点坐标 格式:to=lat<纬度>,lng<经度>
NSString *from_poi 起点POI ID,传入后,优先级高于from(坐标)
样例: 4077524088693206111
NSString *to_poi 终点POI ID(可通过腾讯位置服务地点搜索服务得到),当目的地为较大园区、小区时,会以引导点做为终点(如出入口等),体验更优。
该参数优先级高于to(坐标),但是当目的地无引导点数据或POI ID失效时,仍会使用to(坐标)作为终点。
样例: 4077524088693206111

3、公交

QMSBusingRouteSearchOption参数列表如下:

属性 说明
NSString *from 起点坐标 格式:from=lat<纬度>,lng<经度>
NSString *to 终点坐标 格式:to=lat lat<纬度>,lng<经度>
NSString *policy 路线规划优先条件(非必填)
排序策略,以下三选一:
policy=LEAST_TIME:时间短(默认)
policy=LEAST_TRANSFER:少换乘
policy=LEAST_WALKING:少步行
额外限制条件,可与排序策略配合使用,如:policy=LEAST_TRANSFER,NO_SUBWAY:NO_SUBWAY,不坐地铁
NSDate *departure_time 出发时间,用于过滤掉非运营时段的线路,不传时默认使用当前时间(非必填)

二、发起检索

1、发起驾车路线检索

构建驾车路线检索请求参数,然后调用QMSSearcherAPI中的searchWithDrivingRouteSearchOption:发起驾车路线检索:

QMSDrivingRouteSearchOption *drivingOpt = [[QMSDrivingRouteSearchOption alloc] init];
[drivingOpt setPolicyWithType:QMSDrivingRoutePolicyTypeLeastTime];
[drivingOpt setFrom:@"39.983906,116.307999"];
[drivingOpt setTo:@"39.979381,116.314128"];

[self.mySearcher searchWithDrivingRouteSearchOption:drivingOpt];

2、发起步行路线检索

构建步行路线检索请求参数,然后调用QMSSearcherAPI中的searchWithWalkingRouteSearchOption:发起步行路线检索:

QMSWalkingRouteSearchOption *walkingOpt = [[QMSWalkingRouteSearchOption alloc] init];
[walkingOpt setFrom:@"39.983906,116.307999"];
[walkingOpt setTo:@"39.979381,116.314128"];

[self.mySearcher searchWithWalkingRouteSearchOption:walkingOpt];

3、发起公交路线检索

构建公交路线检索请求参数,然后调用QMSSearcherAPI中的searchWithBusingRouteSearchOption:发起公交路线检索

QMSBusingRouteSearchOption *busOpt = [[QMSBusingRouteSearchOption alloc] init];
[busOpt setFrom:@"40.015109,116.313543"];
[busOpt setTo:@"40.151850,116.296881"];
[busOpt setPolicyWithType:QMSBusingRoutePolicyTypeLeastTime];

[self.mySearcher searchWithBusingRouteSearchOption:busOpt];

三、返回结果

1、驾车检索返回结果

当检索成功后,会调用到searchWithDrivingRouteSearchOption: didReceiveResult:回调函数,通过解析 QMSDrivingRouteSearchResult 获取路径数据:

- (void)searchWithDrivingRouteSearchOption:(QMSDrivingRouteSearchOption *)drivingRouteSearchOption didRecevieResult:(QMSDrivingRouteSearchResult *)drivingRouteSearchResult
{
    self.drivingRouteResult = drivingRouteSearchResult;

    NSLog(@"Result: %@", self.drivingRouteResult);
}

QMSDrivingRouteSearchResult类属性说明:

属性 说明
QMSResultCode status 状态码, 0为成功
NSString *message 状态说明
NSArray *routes 路径规划方案数组, 元素类型为QMSRoutePlan
NSString *request_id 本次请求的唯一标识,由系统自动生成,用于追查结果有异常时使用

QMSRoutePlan类属性详见QMSSearchResult.h

属性 说明
NSString *mode 方案交通方式
CGFloat distance 方案整体距离 单位:米
CGFloat duration 方案估算时间 单位:分钟 四舍五入
NSString *direction 方案整体方向描述
NSArray *polyline 方案路线坐标点串, 导航方案经过的点, 每个step中会根据索引取得自己所对应的路段,类型为encode的CLLocationCoordinate2D。具体获取方式可参考demo
NSArray *steps 标记如何通过一个路段的信息,类型为QMSRouteStep
QMSDriveRestriction *restriction 限行信息
QMSTaxiFare *taxi_fare 预估打车费
CGFloat toll 预估过路费
CGFloat toll_distance 收费路段整体距离 单位:米, 需在额外字段added_fields中填入toll_distance
int traffic_light_count 预估红绿灯数
NSArray *tags 中文标签
NSArray <QMSTrafficCondition *> *speed 路况信息,对象中每个子项为一个QMSTrafficCondition对象
NSArray <QMSRouteWayPoint *> *waypoints 途经点,顺序与输入waypoints一致,输入此参数时,才会有此结点返回, 类型为QMSRouteWayPoint
NSArray <QMSRoutePlanCityInfo *> *cities 途径城市列表,元素为 QMSRoutePlanCityInfo, 需在额外字段added_fields中填入cities

表中涉及到的类详见:QMSSearchResult.h

QMSRouteStep类属性说明:

属性 说明
NSString *instruction 阶段路线描述
NSString *road_name 阶段路线路名(非必有)
NSString *dir_desc 阶段路线方向(如"南", 非必有)
CGFloat distance 阶段路线距离 单位:米
CGFloat duration 时间 单位:分钟 四舍五入
NSString *act_desc 阶段路线末尾动作(如 ”向南转“, 非必有)
NSString *accessorial_desc 末尾辅助动作(如 “到达终点”, 非必有)
NSArray *polyline_idx 阶段路线坐标点串在方案路线坐标点串的位置
从经纬度数组中 根据索引查询这一段路的途经点。 在WebService原始接口做了除2处理, 数据类型为NSNumber。
polyline_idx[0]:起点索引
polyline_idx[1]:终点索引
int type 阶段路线的步行设施类型(type),包含:0普通道路,1过街天桥,2地下通道,3人行横道

QMSRouteStep中一重要属性需说明:

  • NSArray *polyline_idx:阶段路线坐标点串在方案路线坐标点串的位置,从经纬度数组中,根据索引查询这一段路的途经点。在WebService原始接口做了除2处理, 数据类型为NSNumber。polyline_idx[0]:起点索引,polyline_idx[1]:终点索引。

获取到的起点索引和终点索引代表着 QMSRoutePlan类中的 NSArray *polyline 相应元素索引的坐标点串值。


2、步行检索返回结果

当检索成功后,会调用到searchWithWalkingRouteSearchOption: didReceiveResult:回调函数,通过解析 QMSWalkingRouteSearchResult 获取路线数据:

- (void)searchWithWalkingRouteSearchOption:(QMSWalkingRouteSearchOption *) walkingRouteSearchOption didRecevieResult:(QMSWalkingRouteSearchResult *) walkingRouteSearchResult
{
    self.walkingRouteResult = walkingRouteSearchResult;

    NSLog(@"Result: %@", self.walkingRouteResult);
}

腾讯地图SDK自4.4.1版本,步行路线规划检索结果会返回阶段路线的步行设施类型:

/*!
 *  @brief  阶段路线的步行设施类型(type),包含:0普通道路,1过街天桥,2地下通道,3人行横道
 */
@property (nonatomic, assign) int type;

步行的其他返回结果数据结构与驾车基本一致,返回的数据可查询QMSSearchResult.h文件。


3、公交检索返回结果

当检索成功后,会调用到 searchWithBusingRouteSearchOption: didReceiveResult: 回调函数,通过解析 QMSBusingRouteSearchResult 获取路径数据:

- (void)searchWithBusingRouteSearchOption:(QMSBusingRouteSearchOption *) busingRouteSearchOption didRecevieResult:(QMSBusingRouteSearchResult *) busingRouteSearchResult
{
    self.busRouteResult = busingRouteSearchResult;

    // 获取第一个路线
    NSLog(@"bus result is: %@", self.busRouteResult.routes[0]);
}

QMSBusingRouteSearchResult类属性说明:

属性 说明
NSArray *routes 路径规划方案数组, 元素类型QMSBusingRoutePlan,可在routes中获取不同的路线
QMSResultCode status 状态码, 0为成功
NSString *message 状态说明
NSString *request_id 本次请求的唯一标识,由系统自动生成,用于追查结果有异常时使用

QMSBusingRoutePlan 类型详见 QMSSearchResult.h


本页内容