腾讯地图_批量距离计算
<h3>接口描述</h3>
<ul>
<li>用于批量计算一组起终点的路面距离(或称导航距离),可应用于网约车派单、多目的地最优路径智能计算等场景中,支持驾车、步行、骑行多种交通方式以及直线距离计算,满足不同应用需要。</li>
</ul>
<h3>请求地址</h3>
<p><code>https://api.jumdata.com/ttmap/route/matrix/drive</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>起点坐标 <strong>格式:</strong> lat,lng,[header],[roadtype],[speed],[accuracy],[timestamp]|lat,lng,[header],[roadtype],[speed],[accuracy],[timestamp]… (经度与纬度用英文逗号分隔,坐标间用英文分号分隔) [必填]lat 为纬度,lng 为经度<br/>[选填] header 为车头方向(正北为0度,顺时针一周为360度)<br/><strong>如下参数为前序点传参,仅在驾车(driving)模式下生效</strong><br/>[选填] roadtype 为道路类型,取值:0 不考虑道路类型、1 在桥上、2 在桥下、3 在主路、4 在辅路、5 在对面、6 桥下主路、7 桥下辅路<br/>[选填] speed 为速度,单位:千米/小时,无具体值时可传-1<br/> [选填] accuracy 为GPS精度,单位:毫米,无具体值时可传0<br/>[选填] timestamp 为时间戳,精确到秒,请传真实时间戳,否则前序点会不生效<br/> <strong>注意:</strong> <br/>1、 前序点之间使用“|”分隔,前序点最多支持设置5个(包含起点),最后一个点会作为此次计算的起点<br/>2、起点经纬度附近5公里内没有道路,会计算失败,返回“存在无法吸附的坐标点”<br/><strong>个数限制:</strong> 多对一计算<=200个,多对多计算from和to坐标数乘积<=625且单侧<=50个<br/> 例1:39.071510,117.190091<br/>例2:39.071510,117.190091,270;39.108951,117.279396,180 <br/>例3:39.829647,116.422462,-1,0,-1,0,1639108623&#124;39.830553,116.422924,-1,0,-1,0,1639108628&#124;39.831261,116.423289,-1,0,-1,0,1639108633</td>
</tr>
<tr>
<td>destinations</td>
<td>String</td>
<td>是</td>
<td>目的地,参数格式:lat,lng[,poi_id:POIID值];lat,lng[,poi_id:POIID值];…各目的地之间用英文分号分隔,每个目的地的经纬度和poi_id用英文逗号分隔,poi_id可选个数限制: 一对多计算<=200个,多对多计算from和to坐标数乘积<=625且单侧<=50个<br/>注意: 终点经纬度附近5公里内没有道路,会计算失败,返回“存在无法吸附的坐标点”<br/> 多个终点经纬度:39.071510,117.190091;40.007632,116.389160 <br/>目的地包含poi id<br/> 39.071510,117.190091;31.608471,120.736540,poi_id:9475739547571125600</td>
</tr>
<tr>
<td>mode</td>
<td>String</td>
<td>是</td>
<td>计算方式<br/>driving:驾车<br/>walking:步行<br/>bicycling:自行车<br/>straight:直线距离</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;rows&quot;: [ //多点到多点距离计算,结果为二维数组,rows为行,elements为列 结果数组(行)
{
&quot;elements&quot;: [ //结果数组(列)
{
&quot;distance&quot;: 38669,//起点到终点的距离,单位:米
&quot;duration&quot;: 3002 //表示从起点到终点的结合路况的时间,单位:秒
}
]
}
]
}
}</code></pre>
<h3>错误返回</h3>
<pre><code>{
&quot;msg&quot;: &quot;起点坐标不能为空&quot;,
&quot;code&quot;: 400 // 详见code返回码说明
}</code></pre>
<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>