jk's notes
  • 使用高德获取路径规划数据

使用高德获取路径规划数据

文档地址: https://lbs.amap.com/api/webservice/guide/api/direction

路径规划主要是用于获取两个地点之间可行的交通方案.

规划方案有两个版本, 2.0 版本为试行版本.

使用步骤:

  1. 申请 ApiKey.
  2. 请求接口将地址转换为经纬度.
  3. 请求规划接口, 返回可用方案.

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 线路.

Last Updated:
Contributors: jk