使用高德获取路径规划数据
文档地址: https://lbs.amap.com/api/webservice/guide/api/direction
路径规划主要是用于获取两个地点之间可行的交通方案.
规划方案有两个版本, 2.0 版本为试行版本.
使用步骤:
- 申请
ApiKey
. - 请求接口将地址转换为经纬度.
- 请求规划接口, 返回可用方案.
PS: 需要自行定义 TS 类型, 否则使用比较难受.
注意! 注意! 注意: 高德接口会将返回的数据大多数转换为字符串的形式, 而若无返回数据, 则会使用空数组来描述.
1. 地理编码
高德接口的规划路线的起终点均使用经纬度. 因此首先将地址转换为经纬度.
文档地址为: https://lbs.amap.com/api/webservice/guide/api/georegeo
使用接口:
GET https://restapi.amap.com/v3/geocode/geo?parameters
参数说明 (仅给出常用, 细节参考文档)
参数 | 含义 | 规则说明 | 是否必填 | 缺省值 |
---|---|---|---|---|
key | 高德 key | 必填 | - | |
address | 需要转换的地址 | 规则遵循: 国家, 省份, 城市, 区县, 城镇, 乡村, 街道, 门牌号码, 屋邨, 大厦 | 必填 | - |
output | 返回数据格式 | 可取值: JSON , XML | 可选 | JSON |
返回结果定义成 TS
类型 (来自文档, 但请求测试后返回结果似乎并不完整)
/** 地理编码 */
export interface GeocodeResponseData {
/** 返回结果状态值: 返回值为 0 或 1,0 表示请求失败;1 表示请求成功 */
status: string;
/** 返回结果数目 */
count: string;
/**
* 返回状态说明. 当 status 为 0 时,info 会返回具体错误原因,否则返回“OK”.
* 错误码可参考: https://lbs.amap.com/api/webservice/guide/tools/info
* */
info: string;
/** 地理编码信息列表 */
geocodes: {
/** 国家 */
country: string;
/** 地址所在的省份名 */
province: string;
/** 地址所在的城市名 */
city: string;
/** 城市编码 */
citycode: number;
/** 地址所在的区 */
district: string;
/** 街道 */
street: string;
/** 门牌 */
number: string;
/** 区域编码 */
adcode: number;
/** 坐标点: 经度,纬度 */
location: string;
/** 匹配级别 */
level: string;
}[]
}
最后经纬度会用逗号分隔.
2. 路径规划
路径规划分为:
- 步行路径规划:
https://restapi.amap.com/v3/direction/walking?parameters
- 公交路径规划:
https://restapi.amap.com/v3/direction/transit/integrated?parameters
- 驾车路径规划:
https://restapi.amap.com/v3/direction/driving?parameters
- 骑行路径规划:
https://restapi.amap.com/v4/direction/bicycling?parameters
- 未来路径规划 (针对企业)
- 距离测量:
https://restapi.amap.com/v3/distance?parameters
2.3 驾车路径规划
混合交通方案
文档地址: https://lbs.amap.com/api/webservice/guide/api/direction#bus
接口:
GET https://restapi.amap.com/v3/direction/transit/integrated?parameters
参数说明:
参数 | 含义 | 规则说明 | 是否必填 | 缺省值 |
---|---|---|---|---|
key | 必填 | |||
origin | 出发点的经纬度 | 使用逗号分隔的经纬度: longitude,latitude , 小数点不超过 6 位. | 必填 | |
destination | 目的地经纬度 | 使用逗号分隔的经纬度: longitude,latitude , 小数点不超过 6 位. | 必填 | |
city | 触发城市 | 城市名字 | 必填 | |
cityd | 目的地城市 | 跨城必填 | 可选 (跨城市必填) | |
extensions | 返回结果的详略 | 可选值: base (默认, 返回基本信息), all (返回全部信息) | 可选 | base |
strategy | 换乘策略 | 可选值:0 - 最快捷模式1 - 最经济模式2 - 最少换乘模式3 - 最少步行模式4 - 最少步行模式5 - 不乘地铁模式 | 可选 | 0 |
nightflag | 是否计算夜班车 | 可选: 0 (不计算夜班车), 1 (计算夜班车) | 可选 | 0 |
date | 出发日期 | 格式为: data=2014-3-19 . 尽可能少用. | 可选 | |
time | 出发时间 | 格式为: time=22:34 . 尽可能少用. | 可选 | |
output | 输出格式 | 可选值: JSON (默认), XML | 可选 | JSON |
返回结果定义成 TS 类型 (结构比较复杂)
/** 公交路径规划 */
export interface RouteResponseData {
/** 返回结果. 0 - 是被; 1 - 成功 */
status: string;
/** 状态信息. 细节参考: https://lbs.amap.com/api/webservice/info/ */
info: string;
/** 换乘方案数 */
count: string;
/** 公交换乘信息列表 */
route: {
/** 起点坐标 */
origin: string;
/** 终点坐标 */
destination: string;
/** 起点和终点的步行距离. 单位 米 */
distance: string;
/** 出租车费用 */
taxi_cost: string;
/** 换乘列表 */
transits: Transit[];
}
}
/** 换乘方案 */
export interface Transit {
/** 该方案的换乘价格 */
cost: string;
/** 预期该方案的时间, 单位 秒 */
duration: string;
/** 时候是夜班车: 0 - 不是, 1 - 是 */
nightflag: string;
/** 此方案总步行距离. 单位 米 */
walking_distance: string;
/** 换乘路段列表 */
segments: Transitsegment[]
}
/** 换乘路段 */
export interface Transitsegment {
/** 此路段步行导航信息 */
walking: Walking,
/** 此路段公交导航信息 */
bus: Bus,
/** 地铁入口 */
entrance: EntranceExit,
/** 地铁出口 */
exit: EntranceExit,
/** 乘坐火车的信息 */
railway: {},
}
/** 步行导航信息 */
export interface Walking {
/** 起点坐标 */
origin: string;
/** 终点坐标 */
destination: string;
/** 每段线路步行距离. 单位 米 */
distance: string;
/** 步行预计时间, 单位秒 */
duration: string;
/** 步行路段列表 */
steps: Walkstep[];
}
/** 步行路段 */
export interface Walkstep {
/** 此段路的行走介绍 */
instruction: string;
/** 路的名字 */
road: string;
/** 此段路的距离 */
distance: string;
/** 此段路预计消耗时间, 单位秒 */
duration: string;
/** 此段路的坐标, 用分号分隔每一个点, 用逗号分隔经纬度. */
polyline: string;
/** 步行主要动作 */
action: string;
/** 步行辅助动作 */
assistant_action: string;
}
/** 公交方案信息列表 */
export interface Bus {
/** 步行路段列表 */
buslines: {
/** 此段起乘站信息 */
departure_stop: Busstation;
/** 此段下车站 */
arrival_stop: Busstation;
/** 公交路线名称 */
name: string;
/** 公交路线id */
id: string;
/** 公交类型 */
type: string;
/** 公交行驶距离. 单位 米 */
distance: string;
/** 公交预计行驶时间. 单位秒 */
duration: string;
/** 此段路的坐标集, 用分号分隔每一个点, 用逗号分隔经纬度. */
polyline: string;
/** 首班车时间. 格式如:0600,代表06:00 */
start_time: string;
/** 末班车时间. 格式如:2300,代表23:00 */
end_time: string;
/** 此段途经公交站数 */
via_num: string;
/** 此段途经公交站点列表 */
via_stops: Busstation[]
}[]
}
/** 公交站信息 */
export interface Busstation {
/** 站点名字 */
name: string;
/** 站点id */
id: string;
/** 站点经纬度 */
location: string;
}
/** 描述地铁出入口信息 */
export interface EntranceExit {
/** 入口名称 */
name: string;
/** 入口经纬度 */
location: string;
}
/** 火车换乘信息列表 */
export interface Railway {
/** 线路id编号 */
id: string;
/** 该线路车段耗时 */
time: string;
/** 线路名称 */
name: string;
/** 线路车次号 */
trip: string;
/** 该item换乘段的行车总距离 */
distance: string;
/** 线路车次类型 */
type: string;
/** 火车始发站信息 */
departure_stop: RailwayStartStation;
/** 火车到站信息 */
arrival_stop: RailwayEndStation;
/** 途径站点信息 */
via_stop: ViaStop[],
/** 聚合的备选方案 */
alters: Alter[],
/** 仓位及价格信息 */
spaces: Space[],
}
/** 火车始发站信息 */
export interface RailwayStartStation {
/** 上车站点ID */
id: string;
/** 上车站点名称 */
name: string;
/** 上车站点经纬度 */
location: string;
/** 上车站点所在城市的adcode */
adcode: string;
/** 上车点发车时间 */
time: string;
/** 是否始发站,1表示为始发站,0表示非始发站 */
start: string
}
/** 火车到站信息 */
export interface RailwayEndStation {
/** 下车站点ID */
id: string;
/** 下车站点名称 */
name: string;
/** 下车站点经纬度 */
location: string;
/** 下车站点所在城市的adcode */
adcode: string;
/** 到站时间,如大于24:00,则表示跨天 */
time: string;
/** 是否为终点站,1表示为终点站,0表示非终点站 */
end: string;
}
/** 途径站点信息,extensions=all时返回 */
export interface ViaStop {
/** 途径站点的ID */
id: string;
/** 途径站点的名称 */
name: string;
/** 途径站点的坐标点 */
location: string;
/** 途径站点的进站时间,如大于24:00,则表示跨天 */
time: string;
/** 途径站点的停靠时间,单位:分钟 */
wait: string;
}
/** 聚合的备选方案,extensions=all时返回 */
export interface Alter {
/** 备选方案ID */
id: string;
/** 备选线路名称 */
name: string;
}
/** 仓位及价格信息 */
export interface Space {
/** 仓位编码 */
code: string;
/** 仓位费用 */
cost: string;
}
其中公交信息中有些包含步行信息, 这个数据是先步行到达站点后换乘 bus, 所以连接线路时先计算步行线路, 再计算 bus 线路.