路线规划
iOS 地图 SDK 提供的路线规划功能支持多种交通方式的路线计算能力,包括:
- 驾车(driving):支持结合实时路况、少收费、不走高速等多种偏好,精准预估到达时间(ETA);
- 步行(walking):基于步行路线规划;
- 公交(transit):支持公共汽车、地铁等多种公共交通工具的换乘方案计算;
请求参数概览
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: 表示根据实时路况计算最优路线 |
NSString *waypoints | 途径点,元素类型为CLLocationCoordinate2D的NSValue类型 |
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:新能源 |
NSString *avoid_polygons | 避让区域,元素类型为CLLocationCoordinate2D的NSValue类型。 避让区域:支持32个避让区域,每个区域最多可有16个顶点(如果是四边形则有4个坐标点,如果是五边形则有5个坐标点) |
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 |
QMSRoutePlan类属性说明:
属性 | 说明 |
---|---|
NSString *mode | 方案交通方式 |
CGFloat distance | 方案整体距离 单位:米 |
CGFloat duration | 方案估算时间 单位:分钟 四舍五入 |
NSString *direction | 方案整体方向描述 |
NSArray *polyline | 方案路线坐标点串, 导航方案经过的点, 每个step中会根据索引取得自己所对应的路段,类型为encode的CLLocationCoordinate2D。具体获取方式可参考demo |
NSArray *steps | 标记如何通过一个路段的信息,类型为QMSRouteStep |
CGFloat toll | 预估过路费 |
int traffic_light_count | 预估红绿灯数 |
NSArray *tags | 中文标签 |
QMSRouteStep类属性说明:
属性 | 说明 |
---|---|
NSString *instruction | 阶段路线描述 |
NSString *road_name | 阶段路线路名(非必有) |
NSString *dir_desc | 阶段路线方向(如"南", 非必有) |
CGFloat distance | 阶段路线距离 单位:米 |
CGFloat duration | 时间 单位:分钟 四舍五入 |
NSString *act_desc | 阶段路线末尾动作(如 ”向南转“, 非必有) |
NSArray *polyline_idx | 阶段路线坐标点串在方案路线坐标点串的位置 从经纬度数组中 根据索引查询这一段路的途经点。 在WebService原始接口做了除2处理, 数据类型为NSNumber。 polyline_idx[0]:起点索引 polyline_idx[1]:终点索引 |
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中获取不同的路线 |
QMSBusingRoutePlan类属性说明:
属性 | 说明 |
---|---|
CGFloat distance | 距离,单位:米 |
CGFloat duration | 时间,单位:分钟 四舍五入 |
NSString *bounds | 路线bounds,用于显示地图时使用 |
NSArray *steps | 分段描述,类型为:QMSBusingSegmentRoutePlan,从属性 steps 中可获得公交分段方案(QMSBusingSegmentRoutePlan),解析后的数据可用于在地图上绘制路线。 |
QMSBusingSegmentRoutePlan类属性说明:
属性 | 说明 |
---|---|
NSString *mode | 标记路径规划类型 “DRIVING”:驾车 “WALKING”:步行 “TRANSIT”:公交 |
CGFloat distance | 距离 单位:米 |
CGFloat duration | 时间 单位:分钟 四舍五入 |
CGFloat price | 阶段路线所花费用 单位:元 |
NSString *direction | 方向描述 |
NSArray *polyline | 方案路线坐标点串, 导航方案经过的点, 每个step中会根据索引取得自己所对应的路段,类型为encode的CLLocationCoordinate2D |
NSArray *lines | 同个路段多趟车的选择, 元素类型QMSBusingRouteTransitLine |
NSArray *polyline | 解析后的数据可以用于绘制分段的polyline,具体获取方式可参考demo |
QMSBusingRouteTransitLine类说明:
属性 | 说明 |
---|---|
NSString *vehicle | 交通工具 |
NSString *id_ | id |
CGFloat distance | 距离(米) |
NSTimeInterval duration | 预计耗时(分钟) |
NSString *title | 标题 |
NSArray *polyline | 途经点数组,类型为encode的CLLocationCoordinate2D,具体获取方式可参考demo |
NSInteger station_count | 经停站数目 |
NSArray<QMSBusStation *> *stations | 上车站数组,元素类型为QMSBusStation |
QMSStationEntrance *destination | 目的地地址 |
QMSBusStation *geton | 上车站 |
QMSBusStation *getoff | 下车站 |
int running_status | 线路运营状态,取值范围: 300:正常; 301:可能错过末班车; 302:首班车还未发出; 303:停运 |
QMSBusStation,QMSStationEntrance等类详情请参考 QMSSearchResult.h 文件。