腾讯地图_公交路线规划
<h3>接口描述</h3>
<ul>
<li>基于公共汽车、地铁、火车等公共交通工具,计算起到终点的路线换乘方案,同时提供少换乘、少步行等偏好设置,支持一次返回多条方案以供用户选择。</li>
</ul>
<h3>请求地址</h3>
<p><code>https://api.jumdata.com/ttmap/route/public-transit</code></p>
<h3>请求方式</h3>
<ul>
<li>GET/POST</li>
</ul>
<h3>请求格式</h3>
<ul>
<li>x-www-form-urlencoded</li>
</ul>
<h3>请求参数</h3>
<table>
<thead>
<tr>
<th>名称</th>
<th>类型</th>
<th>必须</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>appId</td>
<td>String</td>
<td>是</td>
<td>服务商分配的唯一标识</td>
</tr>
<tr>
<td>timestamp</td>
<td>Long</td>
<td>是</td>
<td>当前时间的毫秒数</td>
</tr>
<tr>
<td>sign</td>
<td>String</td>
<td>是</td>
<td>签名,见签名算法说明</td>
</tr>
<tr>
<td>origins</td>
<td>String</td>
<td>是</td>
<td>起点位置坐标 <br/>格式:纬度在前,经度在后,半角逗号分隔。<br/>注:系统将吸附就近道路作为起点,最大20公里内若无道路,则会算路失败<br/> 譬如:39.915285,116.403857</td>
</tr>
<tr>
<td>originPoi</td>
<td>String</td>
<td>否</td>
<td>起点POI ID,该参数优先级高于origins(坐标)譬如:4077524088693206111</td>
</tr>
<tr>
<td>destinations</td>
<td>String</td>
<td>是</td>
<td>终点位置坐标 <br/>格式:lat,lng<br/>注:直线距离过长或过短会算路失败,最短距离不小于10米,最长距离不超过500公里<br/> 譬如:39.915285,116.803857</td>
</tr>
<tr>
<td>destinationPoi</td>
<td>String</td>
<td>否</td>
<td>终点POI ID(可通过腾讯位置服务地点搜索服务得到),当目的地为较大园区、小区时,会以引导点做为终点(如出入口等),体验更优。<br/>该参数优先级高于to(坐标),但是当目的地无引导点数据或POI ID失效时,仍会使用destinations(坐标)作为终点</td>
</tr>
<tr>
<td>departureTime</td>
<td>String</td>
<td>否</td>
<td>出发时间,用于过滤掉非运营时段的线路,格式为Unix时间戳,默认使用当前时间 譬如:1509357129</td>
</tr>
<tr>
<td>policy</td>
<td>String</td>
<td>否</td>
<td>路线计算偏好<br/> 1) 排序策略,以下四选一:<br/>LEAST_TIME:时间短(默认)<br/>LEAST_TRANSFER:少换乘<br/>LEAST_WALKING:少步行<br/>RECOMMEND:推荐策略,结合步行、换乘、耗时等多方面综合排序结果(与腾讯地图APP默认策略一致)<br/>2) 额外限制条件<br/>NO_SUBWAY:不坐地铁<br/>ONLY_SUBWAY:只坐地铁 <br/> SUBWAY_FIRST:地铁优先<br/>3) 排序策略与额外条件可同时使用,如:<br/>LEAST_TRANSFER,NO_SUBWAY</td>
</tr>
<tr>
<td>output</td>
<td>String</td>
<td>否</td>
<td>返回格式:支持JSON/JSONP,默认:JSON</td>
</tr>
<tr>
<td>callback</td>
<td>String</td>
<td>否</td>
<td>JSONP方式回调函数</td>
</tr>
</tbody>
</table>
<h3>签名算法</h3>
<pre><code>sign = sha256(appId + appSecret + timestamp)</code></pre>
<p>用服务商分配的 <strong>appId</strong>、服务商分配的 <strong>appSecret</strong>,当前时间毫秒数 <strong>timestamp</strong>,按上述顺序拼接成字符串,再进行 <strong>sha256</strong> 哈希得到。如下:</p>
<pre><code class="language-java">String appId = &quot;xyzxy2121zxyz&quot;;
String timestamp = &quot;1555378976238&quot;;
String appSecret = &quot;efcefcef1121cefcefc1212121&quot;;
String str = appId + appSecret + timestamp;
String sign = sha256(str);</code></pre>
<h3>正确返回</h3>
<pre><code>{
&quot;code&quot;: 200, // 详见code返回码说明
&quot;msg&quot;: &quot;成功&quot;, // code对应的描述
&quot;charge&quot;: true, // 计费标志
&quot;taskNo&quot;: &quot;69564903663951243279&quot;, // 本次唯一请求号
&quot;data&quot;: {
&quot;routes&quot;: [
{
&quot;distance&quot;: 48127,//本段step距离,单位:米
&quot;duration_1m&quot;: 115,
&quot;steps&quot;: [
{
&quot;distance&quot;: 733,//本段step距离,单位:米
&quot;steps&quot;: [
{
&quot;road_name&quot;: &quot;东华门大街&quot;, //本段路名
&quot;distance&quot;: 238,//本段路线距离,单位:米
&quot;act_desc&quot;: &quot;直行&quot;,//本段末尾动作:如:左转调头
&quot;polyline_idx&quot;: [ //本路段点串在polyline中的数组下标位置,格式:“polyline_idx”:[起始下标位置,结束下标位置]详细使用见下文《polyline_idx说明》
0,
25
],
&quot;dir_desc&quot;: &quot;东&quot;, //本段主要方向描述
&quot;instruction&quot;: &quot;从起点朝东,沿东华门大街行进238米,直行进入东安门大街&quot; //诱导描述,如 “沿东华门大街向西行驶74米”
}
],
&quot;mode&quot;: &quot;WALKING&quot;,//交通方式,固定值:“WALKING”,通过本参数判断数据结构类型
&quot;duration&quot;: 10,//估算时间,单位:分钟
&quot;polyline&quot;: [ //路线坐标点串,可用于在地图中绘制路线
39.915238,
116.40387
],
&quot;direction&quot;: &quot;东&quot; //方案整体方向描述,如:“南”
},
{
&quot;mode&quot;: &quot;TRANSIT&quot;,
&quot;lines&quot;: [ //lines线路信息,因为起点到终点,可能存在多条线路可选,所以lines为数组,
{
&quot;distance&quot;: 2308,//路线距离,单位:米
&quot;destination&quot;: { //终点站,用于表明乘坐方向,环线线路为下一站
&quot;title&quot;: &quot;朱辛庄&quot;, //终点站名
&quot;id&quot;: &quot;9930463473912863522&quot; //站点唯一标识
},
&quot;end_time&quot;: &quot;23:01&quot;,
&quot;station_count&quot;: 2,//经停站数
&quot;stations&quot;: [ //途经站列表
{
&quot;title&quot;: &quot;中国美术馆&quot;,//站点名称
&quot;location&quot;: { //站点经纬度坐标
&quot;lng&quot;: 116.410836,//经度
&quot;lat&quot;: 39.923708 //纬度
},
&quot;id&quot;: &quot;17429846541789871495&quot; // 站点唯一标识
}
],
&quot;title&quot;: &quot;地铁8号线&quot;,//线路名称
&quot;geton&quot;: { //上车站
&quot;title&quot;: &quot;金鱼胡同&quot;,//站点名称
&quot;exit&quot;: { //出入口
&quot;title&quot;: &quot;C西南口&quot;,//出入口名称
&quot;id&quot;: &quot;2199031508491&quot; //唯一标识
},
&quot;location&quot;: { //站点经纬度坐标
&quot;lng&quot;: 116.411276,
&quot;lat&quot;: 39.916316
},
&quot;id&quot;: &quot;2199031508070&quot;//站点唯一标识
},
&quot;vehicle&quot;: &quot;SUBWAY&quot;,//交通工具:公交车(BUS)
&quot;running_status&quot;: 300,//线路运营状态,取值范围:300:正常301:可能错过末班车302:首班车还未发出303:停运
&quot;duration&quot;: 7,//路线估算时间,单位:分钟
&quot;start_time&quot;: &quot;05:06&quot;,//首班车时间
&quot;getoff&quot;: {//下车站
&quot;title&quot;: &quot;南锣鼓巷&quot;, //站点名称
&quot;location&quot;: { //站点经纬度坐标
&quot;lng&quot;: 116.404026,
&quot;lat&quot;: 39.9338
},
&quot;id&quot;: &quot;2185101318406156001&quot;//站点唯一标识
},
&quot;price&quot;: -1,//预估费用,单位:分,返回-1时为缺少票价信息
&quot;id&quot;: &quot;6498459369252258424&quot;,//线路唯一标识
&quot;polyline&quot;: [ //线路坐标点串,可用于在地图中绘制路线
39.916314,
116.411276
]
}
]
},
{
&quot;mode&quot;: &quot;TRANSIT&quot;,
&quot;lines&quot;: [ //lines线路信息,因为起点到终点,可能存在多条线路可选,所以lines为数组,
{
&quot;distance&quot;: 12315,//路线距离,单位:米
&quot;destination&quot;: { //公交终点站(用于指示方向)
&quot;title&quot;: &quot;燕郊总站&quot;,//终点站名
&quot;id&quot;: &quot;2199033576492&quot; //站点唯一标识
},
&quot;end_time&quot;: &quot;21:10&quot;,//末班车时间
&quot;station_count&quot;: 8,//经停站数
&quot;stations&quot;: [ //经停站列表
{
&quot;title&quot;: &quot;东夏园路口北&quot;, //站点名称
&quot;location&quot;: { //站点经纬度坐标
&quot;lng&quot;: 116.736044, //经度
&quot;lat&quot;: 39.904057 //纬度
},
&quot;id&quot;: &quot;7228496891947728866&quot; //站点唯一标识
}
],
&quot;title&quot;: &quot;894路&quot;,//线路名称
&quot;geton&quot;: { //上车站
&quot;title&quot;: &quot;地铁潞城站&quot;,//站点名称
&quot;location&quot;: { //站点经纬度坐标
&quot;lng&quot;: 116.746267,//经度
&quot;lat&quot;: 39.902838 //纬度
},
&quot;id&quot;: &quot;17668525134213997010&quot; //站点唯一标识
},
&quot;vehicle&quot;: &quot;BUS&quot;,//交通工具:公交车(BUS)
&quot;running_status&quot;: 300,//线路运营状态,取值范围:300:正常301:可能错过末班车302:首班车还未发出 303:停运
&quot;duration&quot;: 34,//路线估算时间,单位:分钟
&quot;start_time&quot;: &quot;06:35&quot;,//首班车时间
&quot;getoff&quot;: { //下车站
&quot;title&quot;: &quot;西城子北&quot;, //站点名称
&quot;location&quot;: { //站点经纬度坐标
&quot;lng&quot;: 116.800722,//经度
&quot;lat&quot;: 39.912064 //纬度
},
&quot;id&quot;: &quot;2199033576481&quot; //站点唯一标识
},
&quot;price&quot;: 300,//预估费用,单位:分,返回-1时为缺少票价信息
&quot;id&quot;: &quot;15537671715386659962&quot;,//线路唯一标识
&quot;polyline&quot;: [ //线路坐标点串,可用于在地图中绘制路线
39.902841,
116.746269
]
}
]
},
{
&quot;mode&quot;: &quot;TRANSIT&quot;,
&quot;lines&quot;: [ //lines线路信息,因为起点到终点,可能存在多条线路可选,所以lines为数组,
{
&quot;distance&quot;: 12315,//路线距离,单位:米
&quot;destination&quot;: { //目的地站点
&quot;title&quot;: &quot;燕郊总站&quot;,//站名
&quot;id&quot;: &quot;2199033576492&quot; //站点唯一标识,目前火车站点始终为&quot;0&quot;
},
&quot;arrival_time&quot;: &quot;21:10&quot;,//到达时间
&quot;station_count&quot;: 8,//经停站数
&quot;days_count&quot;: 1,//耗时天数,1为当天到达,2为隔天到达,以此类推
&quot;stations&quot;: [ //途经站列表
{
&quot;title&quot;: &quot;东夏园路口北&quot;, //站点名称
&quot;location&quot;: { //站点经纬度坐标
&quot;lng&quot;: 116.736044, //经度
&quot;lat&quot;: 39.904057 //纬度
},
&quot;id&quot;: &quot;7228496891947728866&quot; //站点唯一标识
}
],
&quot;title&quot;: &quot;894路&quot;,//线路名称
&quot;geton&quot;: { //上车站
&quot;title&quot;: &quot;地铁潞城站&quot;,//站点名称
&quot;location&quot;: { //站点经纬度坐标
&quot;lng&quot;: 116.746267,//经度
&quot;lat&quot;: 39.902838 //纬度
},
&quot;id&quot;: &quot;17668525134213997010&quot; //站点唯一标识,目前火车站点始终为&quot;0&quot;
},
&quot;vehicle&quot;: &quot;RAIL&quot;,//交通工具:铁路(RAIL)
&quot;running_status&quot;: 300,//线路运营状态,取值范围:300:正常301:可能错过末班车302:首班车还未发出 303:停运
&quot;duration&quot;: 34,//路线估算时间,单位:分钟
&quot;departure_time&quot;: &quot;06:35&quot;,//发车时间
&quot;getoff&quot;: { //下车站
&quot;title&quot;: &quot;西城子北&quot;, //站点名称
&quot;location&quot;: { //站点经纬度坐标
&quot;lng&quot;: 116.800722,//经度
&quot;lat&quot;: 39.912064 //纬度
},
&quot;id&quot;: &quot;2199033576481&quot; //站点唯一标识,目前火车站点始终为&quot;0&quot;
},
&quot;price&quot;: 300,//预估费用,单位:分,返回-1时为缺少票价信息
&quot;id&quot;: &quot;15537671715386659962&quot;,//线路唯一标识
&quot;polyline&quot;: [ //线路坐标点串,可用于在地图中绘制路线
39.902841,
116.746269
]
}
]
}
]
}
]
}
}
</code></pre>
<h3>错误返回</h3>
<pre><code>{
&quot;msg&quot;: &quot;起点经纬度不能为空&quot;,
&quot;code&quot;: 400 // 详见code返回码说明
}</code></pre>
<h3>polyline 坐标解压</h3>
<hr />
<p>polyline为数值型一维数组,格式为:
[坐标1纬度 , 坐标1经度 , 坐标2纬度 , 坐标2经度 , 坐标3纬度 , 坐标3经度…],
第一个坐标为原始未被压缩过的,之后的使用前向差分进行压缩,解压方法如下:</p>
<pre><code>var coors=[50.243916,127.496637,-345,-1828,19867,-26154];
for (var i = 2; i &lt; coors.length ; i++)
{coors[i] = coors[i-2] + coors[i]/1000000}</code></pre>
<h3>polyline_idx说明</h3>
<hr />
<p>下图为polyline的数组结构,路线全程的坐标点串都在polyline中, "polyline_idx"表达的是路段点串在polyline中的数组下标位置(而非坐标个数位置)的开始到结束序号,举个例子,假设某路段(steps)在polyline中是第4到第6个坐标,则polyline_idx为 “polyline_idx”:[6,11]
<img src="http://p.qpic.cn/lbsconsole/0/f0595563c7fc14b40f7e3cf2c5d6dfcf/0" alt="" /></p>
<h3>返回字段说明</h3>
<table>
<thead>
<tr>
<th>字段名</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>code</td>
<td>返回码,详见code返回码说明(非http返回状态码)</td>
</tr>
<tr>
<td>msg</td>
<td>code对应的描述</td>
</tr>
<tr>
<td>charge</td>
<td>计费标志</td>
</tr>
<tr>
<td>taskNo</td>
<td>本次请求号</td>
</tr>
<tr>
<td>data</td>
<td>返回具体结果,object类型,详见成功返回样例</td>
</tr>
</tbody>
</table>
<h4>code返回码说明</h4>
<table>
<thead>
<tr>
<th>code</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>200</td>
<td>成功 (计费)</td>
</tr>
<tr>
<td>201</td>
<td>查无数据</td>
</tr>
<tr>
<td>400</td>
<td>参数错误</td>
</tr>
<tr>
<td>404</td>
<td>接口地址不正确</td>
</tr>
<tr>
<td>500</td>
<td>系统维护,请稍候再试</td>
</tr>
<tr>
<td>601</td>
<td>接口未开通</td>
</tr>
<tr>
<td>602</td>
<td>账号停用</td>
</tr>
<tr>
<td>603</td>
<td>余额不足请充值</td>
</tr>
<tr>
<td>604</td>
<td>接口停用</td>
</tr>
<tr>
<td>701</td>
<td>IP地址信息不存在</td>
</tr>
<tr>
<td>702</td>
<td>{ip}为内网IP地址</td>
</tr>
<tr>
<td>999</td>
<td>其他,以实际返回为准</td>
</tr>
</tbody>
</table>