一、接口简介
本接口提供基于起点和终点经纬度的公交线路规划功能,适用于各类出行导航应用开发。通过输入精确的地理坐标点,接口将返回包含多种换乘方案的公交路线数据,包括分段站点信息、站点坐标、线路名称及分段耗时等关键信息。
二、核心功能参数
请求地址
ruby
复制
https://cn.apihz.cn/api/jiaotong/gongjiao.php
请求方式
支持 GET
或 POST
请求参数
参数名称 | 参数类型 | 必填 | 说明 |
---|---|---|---|
id | 字符串 | 是 | 用户中心的数字ID(需注册获取) |
key | 字符串 | 是 | 用户中心通讯秘钥 |
starlon | 浮点数 | 是 | 起点经度(示例:121.4279) |
starlat | 浮点数 | 是 | 起点纬度(示例:31.20872) |
endlon | 浮点数 | 是 | 终点经度(示例:121.313079) |
endlat | 浮点数 | 是 | 终点纬度(示例:31.195667) |
linetype | 整数 | 否 | 线路策略(1-15,默认1=标准策略) |
type | 整数 | 否 | 数据简化:0=简略数据(默认),1=详细导航数据 |
注意:经纬度可通过设备定位或坐标查询接口获取
三、返回数据结构
字段路径 | 说明 |
---|---|
code | 状态码(200成功,400失败) |
msg | 操作结果消息 |
datas | 所有线路方案的集合(数组) |
datas[i].lineName | 换乘方案名称(竖杠分隔线路) |
datas[i].segments | 当前方案的分段数据集(数组) |
segments[j].stationStart | 分段起点信息(含名称、坐标) |
segments[j].stationEnd | 分段终点信息(含名称、坐标) |
segments[j].segmentTimes | 分段耗时(单位:分钟) |
四、调用示例
🔹 PHP 调用示例
php
php
复制
<?php
$apiUrl = "https://cn.apihz.cn/api/jiaotong/gongjiao.php";
$params = [
'id' => '10000000', // 替换为您的实际ID
'key' => '15he5h15ty854j5', // 替换为您的实际KEY
'starlon' => 121.4279,
'starlat' => 31.20872,
'endlon' => 121.313079,
'endlat' => 31.195667,
'linetype' => 1,
'type' => 0
];
// 构造请求URL
$requestUrl = $apiUrl . '?' . http_build_query($params);
// 发送GET请求
$response = file_get_contents($requestUrl);
// 处理JSON响应
$result = json_decode($response, true);
if ($result['code'] == 200) {
foreach ($result['datas'] as $route) {
echo "线路方案: " . $route['lineName'] . "\n";
foreach ($route['segments'] as $segment) {
echo "🚏 从 {$segment['stationStart']['name']} 到 {$segment['stationEnd']['name']} ";
echo "⏱️ 耗时: {$segment['segmentTimes']}分钟\n";
}
}
} else {
echo "错误: " . $result['msg'];
}
?>
🔹 Python 调用示例
python
python
运行
复制
import requests
params = {
"id": "10000000", # 替换为您的实际ID
"key": "15he5h15ty854j5", # 替换为您的实际KEY
"starlon": 121.4279,
"starlat": 31.20872,
"endlon": 121.313079,
"endlat": 31.195667,
"linetype": 1,
"type": 0
}
response = requests.get(
"https://cn.apihz.cn/api/jiaotong/gongjiao.php",
params=params
)
if response.status_code == 200:
data = response.json()
if data["code"] == 200:
for route in data["datas"]:
print(f"线路方案: {route['lineName']}")
for segment in route["segments"]:
start = segment["stationStart"]["name"] or "起点"
end = segment["stationEnd"]["name"] or "终点"
print(f"🚏 从 {start} 到 {end} ⏱️ 耗时: {segment['segmentTimes']}分钟")
else:
print("错误:", data["msg"])
else:
print("HTTP请求失败,状态码:", response.status_code)
五、返回数据示例
成功响应(200)
css
json
复制
{
"code": 200,
"datas": [
{
"lineName": "地铁10号线 |",
"segments": [
{
"stationStart": {
"name": "",
"uuid": "",
"lonlat": "121.4279,31.2087"
},
"stationEnd": {
"name": "交通大学站6号口",
"uuid": "1429089",
"lonlat": "121.429851,31.203733"
},
"segmentTimes": 14
},
{
"stationStart": {
"name": "交通大学站",
"uuid": "1429089",
"lonlat": "121.429851,31.203733"
},
"stationEnd": {
"name": "虹桥火车站",
"uuid": "1431250",
"lonlat": "121.316195,31.195677"
},
"segmentTimes": 20
}
]
},
{
"lineName": "113路|地铁10号线 |",
"segments": [
{
"stationStart": {
"name": "",
"uuid": "",
"lonlat": "121.4279,31.2087"
},
"stationEnd": {
"name": "华山路湖南路",
"uuid": "1461336",
"lonlat": "121.428817,31.20775"
},
"segmentTimes": 4
}
]
}
]
}
失败响应(400)
css
json
复制
{
"code": 400,
"msg": "查询失败,请重试。"
}
六、使用须知
- 身份认证 :必须使用接口盒子免费API平台注册获取专属ID和KEY
- 频次限制:公共ID共享频次限制,正式项目务必使用私有KEY
- 坐标精度:经纬度建议保留6位小数以保证定位准确性
- 策略说明 :
linetype
参数需根据文档调试选择(如2=时间最少、3=地铁优先等)