获取高德路径规划数据

获取高德路径规划数据

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 值,使用脚本
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值