import requests
class RoutePlanner:
def __init__(self, api_key):
self.api_key = api_key
self.base_url = "https://restapi.amap.com/v3/direction/driving"
def get_route(self, origin, destination):
# 清理坐标格式
origin = origin.replace(' ', '')
destination = destination.replace(' ', '')
params = {
'key': self.api_key,
'origin': origin,
'destination': destination,
'strategy': 0, # 0-速度优先
'extensions': 'base'
}
try:
response = requests.get(self.base_url, params=params)
data = response.json()
if data['status'] == '1':
route = data['route']['paths'][0]
distance = int(route['distance']) / 1000 # 转换为公里
duration = int(route['duration']) / 60 # 转换为分钟
steps = route['steps']
print(f"规划路线成功!")
print(f"总距离:{distance:.1f}公里")
print(f"预计时间:{duration:.1f}分钟")
print("\n路线详情:")
for step in steps:
print(f"- {step['instruction']} ({int(step['distance'])/1000:.1f}公里)")
else:
print(f"路线规划失败,错误信息:{data.get('info', '未知错误')}")
except requests.exceptions.RequestException as e:
print(f"网络请求失败:{str(e)}")
except ValueError as e:
print(f"数据解析失败:{str(e)}")
def main():
api_key = "61d923addb5fc1--youkey"
planner = RoutePlanner(api_key)
print("高德地图小车路径规划系统")
print("示例:经度,纬度(如:116.397428,39.90923)或详细地址")
origin = input("请输入起点:")
destination = input("请输入终点:")
# 处理坐标格式
def format_coord(coord):
if ',' in coord:
return coord
if len(coord) < 14:
return coord
# 尝试在合适位置插入逗号
try:
# 经度通常在3位整数+6位小数
lon = float(coord[:9])
lat = float(coord[9:])
return f"{lon},{lat}"
except ValueError:
return coord
origin = format_coord(origin)
destination = format_coord(destination)
print(f"起点坐标:{origin}")
print(f"终点坐标:{destination}")
planner.get_route(origin, destination)
if __name__ == "__main__":
main()
运行结果:
PS F:\开发\work> python route_planner.py
高德地图小车路径规划系统
示例:经度,纬度(如:116.397428,39.90923)或详细地址
请输入起点:105.058433,29.580228
请输入终点:104.096488,30.635261
起点坐标:105.058433,29.580228
终点坐标:104.096488,30.635261
规划路线成功!
总距离:173.0公里
预计时间:127.2分钟
路线详情:
- 向东行驶8米进入环岛 (0.0公里)
- 向东北行驶160米离开环岛 (0.2公里)
- 沿新华路向北行驶65米左转 (0.1公里)
- 沿玉溪路向西行驶488米向左前方行驶 (0.5公里)
- 沿邱家嘴立交桥途径双洞路向西南行驶1.1千米向右前方行驶 (1.1公里)
- 沿双洞路向西行驶728米靠左 (0.7公里)
- 沿双洞路途径内江枢纽向西行驶162米减速行驶到达收费站 (0.2公里)
- 沿内江枢纽向西行驶33米靠右 (0.0公里)
- 沿内江枢纽向西行驶135米靠右 (0.1公里)
- 沿内江枢纽途径G76厦蓉高速向西北行驶4.6千米靠左沿主路行驶 (4.6公里)
- 沿G76厦蓉高速途径球溪河大桥向西北行驶90.0千米向右前方行驶进入匝道 (90.0公里)
- 沿清泉枢纽向东北行驶290米靠左 (0.3公里)
- 沿清泉枢纽途径S3成资渝高速、S3天府国际机场高速向西北行驶40.5千米靠左沿主路行驶 (40.5公里)
- 沿S3天府国际机场高速向西北行驶1.2千米直行进入隧道 (1.2公里)
- 沿龙泉山2号隧道途径S3天府国际机场高速向西北行驶2.5千米直行进入隧道 (2.5公里)
- 沿龙泉山1号隧道途径S3天府国际机场高速向西北行驶5.5千米靠左沿主路行驶 (5.5公里)
- 沿S3天府国际机场高速途径川心特大桥、新兴特大桥向西北行驶14.5千米减速行驶到达收费站 (14.5公里)
- 沿S3天府国际机场高速途径三圣特大桥向西北行驶4.3千米向右前方行驶进入匝道 (4.3公里)
- 沿娇子立交向东北行驶1.1千米靠左 (1.1公里)
- 沿娇子立交途径龙兴大道、龙兴大道静宁路、静安路、净居寺路向西北行驶3.2千米右转 (3.2公里)
- 沿净居寺路向东北行驶20米左转 (0.0公里)
- 沿娇子立交向东北行驶1.1千米靠左 (1.1公里)
- 沿娇子立交途径龙兴大道、龙兴大道静宁路、静安路、净居寺路向西北行驶3.2千米右转 (3.2公里)
- 沿娇子立交向东北行驶1.1千米靠左 (1.1公里)
- 沿娇子立交向东北行驶1.1千米靠左 (1.1公里)
- 沿娇子立交途径龙兴大道、龙兴大道静宁路、静安路、净居寺路向西北行驶3.2千米右转 (3.2公里)
- 沿净居寺路向东北行驶20米左转 (0.0公里)
- 沿净居寺路途径龙兴大道净居寺路、龙舟路向西北行驶1.4千米右转 (1.4公里)
- 沿莲桂南路向东北行驶633米左转 (0.6公里)
- 沿莲桂西路向西北行驶290米到达目的地 (0.3公里)
PS F:\开发\work>
方法二
import requests
def amap_route_planning(start, end, key):
url = "https://restapi.amap.com/v3/direction/driving"
params = {
"key": key,
"origin": start,
"destination": end,
}
response = requests.get(url, params=params)
data = response.json()
if data.get("status") == "1":
route = data.get("route", {})
paths = route.get("paths", [])
if paths:
# 取第一条规划路径
path = paths[0]
distance = path.get("distance", 0) # 距离,单位:米
duration = path.get("duration", 0) # 时长,单位:秒
print(f"距离: {distance} 米")
print(f"时长: {duration} 秒")
# 详细的路径信息,包含各个路段的信息,这里仅作示例
steps = path.get("steps", [])
for step in steps:
print(step.get("instruction"))
else:
print("未找到规划路径")
else:
print("请求失败,错误信息:", data.get("info"))
if __name__ == "__main__":
# 请将以下的 'your_api_key' 替换为你自己申请的高德地图 API 密钥
amap_route_planning("116.310003,39.991957", "116.405285,39.904989", "61d923addb5fc--youkey")
S F:\开发\work> & E:/Python/Python311/python.exe f:/开发/work/gueihua_1.py
距离: 19630 米
时长: 2651 秒
沿求知路向西行驶468米左转
沿颐和园路向南行驶834米左转
沿北四环西路辅路向东行驶339米向左前方行驶进入主路
沿北四环西路入口途径北四环西路、北四环中路向东行驶3.3千米向右前方行驶进入辅路
沿北四环中路出口途径北四环中路辅路向东行驶435米右转
沿学院路向南行驶788米靠左
沿西土城路途径学知桥向南行驶2.1千米靠左沿主路行驶
沿西土城路途径西直门北大街向南行驶1.7千米靠左沿主路行驶
沿西直门北大街途径西二环向南行驶3.9千米向右前方行驶进入右岔路
沿复兴门桥向南行驶202米靠左
沿复兴门桥向南行驶345米靠右
沿复兴门桥向西南行驶14米右转
沿复兴门桥向北行驶155米右转
沿复兴门内大街途径西长安街、东长安街向东行驶4.3千米右转
沿正义路向南行驶484米右转
向西行驶32米右转
向北行驶163米左转
向西行驶84米到达目的地
PS F:\开发\work>