获取高德路径规划数据
1 使用高德在线地图,归还路径,并复制链接。
- 高德在线地图地址: 高德地图
2 脚本自动获取
python3 gd_url_to_sdroute.py sdroute_url_copy.json
-
gd_url_to_sdroute.py
# -*- coding: utf-8 -*- import urllib.parse from urllib.parse import urlparse, parse_qs import json import requests import os import sys from urllib.parse import urlparse def decode_url(url): decoded_url = urllib.parse.unquote(url) return decoded_url def create_file_with_path(filepath): print(filepath) # 获取文件所在路径 directory = os.path.dirname(filepath) # 检查路径是否存在 if not os.path.exists(directory): # 创建路径 os.makedirs(directory) def extract_points_from_url(url): parsed_url = urlparse(url) query_params = parse_qs(parsed_url.query) # 提取起点信息 start_name = query_params['from[name]'][0] start_lnglat = query_params['from[lnglat]'][0].split(',') start_point = { 'name': start_name, 'lng': float(start_lnglat[0]), 'lat': float(start_lnglat[1]) } # 提取终点信息 end_name = query_params['to[name]'][0] end_lnglat = query_params['to[lnglat]'][0].split(',') end_point = { 'name': end_name, 'lng': float(end_lnglat[0]), 'lat': float(end_lnglat[1]) } # 提取途经点信息 via_points = [] for i in range(6): if f'via[{i}][name]' in query_params: via_name = query_params[f'via[{i}][name]'][0] via_lnglat = query_params[f'via[{i}][lnglat]'][0].split(',') via_point = { 'name': via_name, 'lng': float(via_lnglat[0]), 'lat': float(via_lnglat[1]) } via_points.append(via_point) return start_point, end_point, via_points def get_sdroute_url(url): urldate = "https://restapi.amap.com/v3/direction/driving?key={key}&origin={start_longitude},{start_latitude}&destination={end_longitude},{end_latitude}&originid=&destinationid=&extensions=base&strategy=0&waypoints={waypoints}&avoidpolygons=&avoidroad=" key = "you-key" start_point, end_point, via_points = extract_points_from_url(url) print("起点:", start_point) print("终点:", end_point) print("途经点:", via_points) start_lon = start_point['lng'] start_lat = start_point['lat'] end_lon = end_point['lng'] end_lat = end_point['lat'] waypoints = '' for point in via_points: waypoints += f"{point['lng']},{point['lat']};" urldate = urldate.format(key=key, start_longitude=start_lon, start_latitude=start_lat, end_longitude=end_lon, end_latitude=end_lat, waypoints=waypoints) response = requests.get(urldate) resdata = response.json() return resdata def sdroute_json_to_txt(data, output_txt_path): paths = data["route"]["paths"] polylines = "" for path in paths: steps = path["steps"] for step in steps: polylines += step["polyline"] polylines += ";" create_file_with_path(output_txt_path) with open(output_txt_path, 'w') as file: file.write(polylines) def is_valid_url(url): try: result = urlparse(url) return all([result.scheme, result.netloc]) except ValueError: return False def get_urls_out_name(json_file): # 检查路径是否存在 if not os.path.exists(json_file): print("json_file " + "no exists") exit() # 读取JSON文件 with open(json_file, 'r') as file: data = json.load(file) routes = data["url"]["routes"] return routes if __name__ == '__main__': ####### # python3 gd_url_to_sdroute.py ./sdroute_url_copy.json # python3 gd_url_to_sdroute.py url sdroute.txt if len(sys.argv) != 3 and len(sys.argv) != 2: print("python3 gd_url_to_sdroute.py url fileName ") print("python3 gd_url_to_sdroute.py ./sdroute_url_copy.json ") exit() routes = [] if len(sys.argv) == 3: route = {} route["routeName"] = sys.argv[2] route["routeUrl"] = sys.argv[1] routes.append(route) if len(sys.argv) == 2: routes = get_urls_out_name(sys.argv[1]) if len(routes) == 0: print("urls error null") exit() for route in routes: out_file_path = "./{output_files_name}".format(output_files_name=route["routeName"]) if not is_valid_url(route["routeUrl"]): print("url error ") exit() out_file_path_txt = out_file_path + ".txt" sdroute_json_to_txt(get_sdroute_url(route["routeUrl"]), out_file_path_txt)
-
sdroute_url_copy.json
{ "url": { "routes": [ { "routeName": "xianlu1", "routeUrl": "https://ditu.amap.com/dir?type=car&policy=1&from%5Bid%5D=regeo_1697598238943-from&from%5Bname%5D=%E7%BF%94%E6%AE%B7%E8%B7%AF&from%5Blnglat%5D=121.518294%2C31.300787&from%5Badcode%5D=310110&from%5Bmodxy%5D=&to%5Bid%5D=regeo_1697598206752-to&to%5Bname%5D=%E7%BF%94%E6%AE%B7%E8%B7%AF%E8%BE%85%E8%B7%AF&to%5Blnglat%5D=121.517799%2C31.300419&to%5Badcode%5D=310110&to%5Bmodxy%5D=&via%5B0%5D%5Bid%5D=regeo_1698410208281&via%5B0%5D%5Bname%5D=%E9%82%AF%E9%83%B8%E8%B7%AF&via%5B0%5D%5Blnglat%5D=121.515168%2C31.299788&via%5B0%5D%5Badcode%5D=310110&via%5B0%5D%5Bmodxy%5D=&via%5B1%5D%5Bid%5D=regeo_1697598136780&via%5B1%5D%5Bname%5D=%E6%94%BF%E6%B0%91%E8%B7%AF&via%5B1%5D%5Blnglat%5D=121.501945%2C31.300842&via%5B1%5D%5Badcode%5D=310110&via%5B1%5D%5Bmodxy%5D=&via%5B2%5D%5Bid%5D=regeo_1697598146420&via%5B2%5D%5Bname%5D=%E9%80%B8%E4%BB%99%E8%B7%AF&via%5B2%5D%5Blnglat%5D=121.489364%2C31.294117&via%5B2%5D%5Badcode%5D=310109&via%5B2%5D%5Bmodxy%5D=&via%5B3%5D%5Bname%5D=%E4%B8%8A%E6%B5%B7%E5%B8%82%E8%99%B9%E5%8F%A3%E5%8C%BA%E8%BF%90%E5%85%89%E8%B7%AF&via%5B3%5D%5Bid%5D=&via%5B3%5D%5Badcode%5D=310109&via%5B3%5D%5Bpoitype%5D=&via%5B3%5D%5Blnglat%5D=121.496274%2C31.290613&via%5B3%5D%5Bmodxy%5D=&via%5B4%5D%5Bid%5D=regeo_1697598194734&via%5B4%5D%5Bname%5D=%E6%94%BF%E4%BF%AE%E8%B7%AF&via%5B4%5D%5Blnglat%5D=121.50954%2C31.295081&via%5B4%5D%5Badcode%5D=310110&via%5B4%5D%5Bmodxy%5D=" } ] } }
3 注册高德获取key(没有高德账号,自行注册)
https://lbs.amap.com/api/webservice/guide/api/direction/
注册Key:https://console.amap.com/dev/index
3.1 创建应用
3.2 添加key
### 3.3 填充key 值,使用脚本