基于高德地图导航的路径爬取
打中青杯的时候写的路径爬取小程序~~
高德地图的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拟合超方便