基于高德地图导航的路径爬取

打中青杯的时候写的路径爬取小程序~~

高德地图的API种类很多,这里选用路径导航来做路线爬取~

先用pyhon通过高德地图的API爬取起始点到终点的经纬度坐标,并绘制,代码如下:

​
import requests
import json
import pandas as pd
import matplotlib.pyplot as plt
#输入起始地址和城市,终点地址和城市
start=input("start:")
start_city=input("start_city:")
end=input("end:")
end_city=input("end_city:")
#获取起点和终点的经纬度坐标
start=requests.get('https://restapi.amap.com/v3/geocode/geo?key=<在高德地图上申请的key>&address=%s&city=%s'%(start,start_city))
end=requests.get('https://restapi.amap.com/v3/geocode/geo?key=<在高德地图上申请的key>&address=%s&city=%s'%(end,end_city))
start_j=json.loads(start.text)
end_j=json.loads(end.text)
start=start_j["geocodes"][0]["location"]
end=end_j["geocodes"][0]["location"]
#获取导航信息
url='https://restapi.amap.com/v3/direction/driving?key=<在高德地图上申请的key>&origin=%s&destination=%s&originid=&destinationid=&extensions=base&strategy=0&waypoints=&avoidpolygons=&avoidroad='%(start,end)
r=requests.get(url)
j=json.loads(r.text)
#处理导航信息
s=""
for i in range(len(j["route"]["paths"][0]["steps"])):
    s=s+";" + j["route"]["paths"][0]["steps"][i]["polyline"]
new_s="jingdu,weidu"
for i in range(len(s)):
    if s[i]==";":
        new_s+="\n"
    else:
        new_s+=s[i]
with open('result.csv','w') as f:
    f.write(new_s)
    f.flush()
data=pd.read_csv('result.csv')
#画出路线
plt.plot(data.values[:,0],data.values[:,1])
plt.show()

​

其中,高德地图的key获取方式如下:

到官网:高德开放平台 | 高德地图API (amap.com)

然后右上角登陆

右上角,控制台

点击管理key点击添加应用,输入应用名称

添加,配置参数

key就弄好了,复制到代码中的<在高德地图上申请的key>(完全替换掉)

 

结果展示:

输入:

输出(高德地图的路线和爬出来的路线):

代码默认爬取路线一,可以通过配置改变方案

如果要进行路径分析,最好进行经纬度转距离m,做拟合效果比较好,经纬度简略的转换公式( 1经度=85390m,1纬度=111000m)

经纬度坐标在csv文件里,配合matlab拟合超方便