使用TrueWay Directions API绘路线时遇KeyError: 'features'求助
修改Python代码适配TrueWay Directions API生成路线地图
问题根源是你使用的TrueWay Directions API返回的JSON结构和教程里的不同,原代码依赖features层级解析坐标,现在需要调整为解析route->geometry->coordinates结构。以下是具体修改步骤:
1. 调整坐标解析逻辑
假设你原代码中解析坐标的部分是这样(教程示例):
# 原教程代码(适配旧API结构) coords = response_json['features'][0]['geometry']['coordinates']
替换为适配TrueWay API的代码:
# 适配TrueWay API的坐标解析 # 从返回的JSON中提取路线的几何信息 route_geometry = response_json['route']['geometry'] # 获取原始坐标列表(格式为[经度, 纬度]) coords = route_geometry['coordinates']
2. 调整坐标顺序(关键步骤)
TrueWay返回的坐标是[经度, 纬度],但绝大多数Python地图库(比如folium)要求坐标格式为[纬度, 经度],所以必须转换顺序:
# 将[lon, lat]转换为[lat, lon] adjusted_coords = [[lat, lon] for lon, lat in coords]
3. 更新地图绘制函数
修改create_map函数,使用调整后的坐标生成路线:
import folium def create_map(start_location, end_location, route_coords): # 创建地图实例,以起点为中心 map_obj = folium.Map(location=start_location, zoom_start=12) # 添加起点、终点标记 folium.Marker(start_location, popup="起点", icon=folium.Icon(color="green")).add_to(map_obj) folium.Marker(end_location, popup="终点", icon=folium.Icon(color="red")).add_to(map_obj) # 添加路线到地图 folium.PolyLine( locations=route_coords, color="blue", weight=5, opacity=0.8 ).add_to(map_obj) return map_obj
4. 调用示例
假设你已经通过API获取到响应response_json,并已知起点和终点的[lat, lon]坐标,调用方式如下:
# 示例:起点和终点坐标(格式[lat, lon]) start_loc = [34.0522, -118.2437] # 洛杉矶 end_loc = [36.1699, -115.1398] # 拉斯维加斯 # 解析并调整坐标 route_geometry = response_json['route']['geometry'] coords = route_geometry['coordinates'] adjusted_coords = [[lat, lon] for lon, lat in coords] # 生成地图 route_map = create_map(start_loc, end_loc, adjusted_coords) # 保存为HTML文件查看 route_map.save("route_map.html")
注意事项
- 确认API请求成功:调用API后先打印
response_json,确保route->geometry->coordinates层级存在,避免因API返回错误导致的KeyError。 - 若需要获取路线的距离、时长等信息,可从
response_json['route']下的对应字段提取,比如response_json['route']['distance'](单位通常为米)。
内容的提问来源于stack exchange,提问作者Olivia Foster
相关产品推荐
相关产品推荐

