小工具知识网

当前位置: 首页 > 行业知识 > Python调用高德API进行多路径点规划,并输出地图

行业知识

Python调用高德API进行多路径点规划,并输出地图

2026-11-08 04:30:26 来源:互联网转载

前言

参比赛时,需要调用高德API进行多路径点规划,结果高德一次性只能添加16个路径点,为了让多达20个路径点出现在一张地图上便写了这个代码

准备 :

 需要一个高德官网申请的API Key

 代码需要输入经纬度(这里就不过多讲述如何获取路径点的经纬度)

 需要按照特定格式做成excel表格,相信对大家来说不是很难的

1.申请高德API

 先进入高德开放平台的控制台申请一个Key

 1.先创建一个应用

 2.选择添加key

 3.选择Web服务

 这就是我们需要的Key啦

2.代码部分

import foliumfrom folium import pluginsimport numpy as npimport pandas as pdimport requestsstrategy = 5 #规划策略 见https://lbs.amap.com/api/webservice/guide/api/direction#drivinggaode_key = '替换为你的Key' #调用高德地图keylat_and_lon = [] #储存详细坐标经纬度Lon = []   # 储存经度Lat = []   # 储存纬度df = pd.read_excel('总数据.xlsx', sheet_name='一区')way_lon = df['经度'].tolist()way_lat = df['纬度'].tolist()waypoint = '' #路径点jwd = df['经纬度'].tolist() #供应商经纬度grouped_strings = []tolls = 0duration = 0def get_routes(start, end, mode, gaode_key, waypoint):    url = f'https://restapi.amap.com/v3/direction/driving?origin={start}&destination={end}&strategy={mode}&waypoints={waypoint}&key={gaode_key}'    response = requests.get(url)    data = response.json()    if data['status'] == '1':        routes = data['route']['paths'][0]['steps']        return routes    else:        print('未获取到相关路径')        return Nonefor i in range(0, len(jwd), 16):    group = jwd[i:i + 16]    string = ';'.join(map(str, group))    start = group[0]    end = group[-1]    waypoint = string    # 获取路线规划    routes = get_routes(start, end, strategy, gaode_key, waypoint)    if routes:        for i, step in enumerate(routes):            lat_and_lon.append(step["polyline"])            tolls += int(step["tolls"])            duration += int(step["duration"])    else:        print('无法获取路线规划。')# 提取坐标点并全添加到 Lon 和 Lat 列表中for item in lat_and_lon:    points = item.split(';')    for point in points:        coords = point.split(',')        Lon.append(float(coords[0]))        Lat.append(float(coords[1]))def Map(Lat, Lon, la, lo):    tri = np.array(list(zip(Lat, Lon)))    san_map = folium.Map(        location=[23.243466, 113.637713],        zoom_start=16,        # 调用高德街道图        tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}',        # tiles='http://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}', # 高德卫星图        attr='default')    folium.PolyLine(tri, color='#ff0000').add_to(san_map)    marker_cluster = plugins.MarkerCluster().add_to(san_map)    for lat, lon in zip(la, lo):        icon = folium.Icon(color='red', icon='info-sign')  # 自定义图标        folium.Marker([lat, lon], icon=icon).add_to(marker_cluster)    san_map.save('地图.html')    print("总花费{}元".format(tolls))    print("耗费{}分钟".format(duration/60))def main():    Map(Lat, Lon, way_lat, way_lon)if __name__ == '__main__':    main()

3.文件格式

 index.php/tags-301.html" >数据读取格式需要如下EXCEL表格格式

 获取经纬度也是有其余方法的就麻烦大家自己找一下,这里不过多阐述

 默认第一行为起点,最后一行为终点,中间的为途径点

4.输出结果

 输出的结果保存在代码目录的【地图.html】文件中

 直接用浏览器打开就行

5.结果展示

 有卫星地图和街道地图2种模式,这里仅展示一种

最后

 还有可优化的余地,请大家自便

 关于strategy路线选取策略,可移步高德的官方文档查看

上一篇:大众怎么打开在线服务器?

下一篇:Java服务端源码深度解析,核心功能及实现细节探究