Python 官方文档:入门教程 => 点击学习
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、excel调取API方法1.申请一个key2.excel调用API 二、python方法计算地址列
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
爬取高德或百度的数据有数量限制,以高德为例,单日调取经纬度的免费额度为5000条,多个key同时调取也不能改变单日可调用总数。
当数量少的时候可以直接用excel进行操作,方便快捷,但excel在大量处理时会出现错误,数据量上千就推荐使用python,更加方便。
在开始爬取之前,将地址处理成标准格式,即“xx省xx市xx县/区xx小区/村x门x户”,不同的地区会有同名地址存在,所以省市一定要写清楚。
ps:其他地图都类似,本文只以高德为例。
当然申请很多个也可以,看你心情。
在高德开放平台首页登录,然后点击右上方【控制台】,左侧【应用管理】-【我的应用】,然后右上角【创建新应用】,随便创建一个,会出现【添加】字样,点击添加一个key,名字随便,服务平台选【WEB服务】。
获取经纬度:
=FILTERXML(WEBSERVICE("https://restapi.amap.com/v3/geocode/geo?address="&[@出发地址]&"&output=XML&key=Key值"),"//location")
注意替换key值,【@出发地址】替换为地址在excel中的位置,如A1,对于终点位置的经纬度也是同样的获取方法。
获取行车距离:
=FILTERXML(WEBSERVICE("Https://restapi.amap.com/v3/distance?origins="&[@出发经纬度]&"&destination="&[@目的经纬度]&"&output=xml&key=Key值"),"//distance")
代码如下(示例):
import urllib.request #发送请求from urllib import parse #URL编码import JSON #解析json数据import jsonpath #提取json数据import pandas as pd #导入pandas库from openpyxl import load_workbook #从Excel中读取地址addList = [] #创建一个列表存放地址数据exbook = load_workbook('C:/Users/……/places.xlsx') #打开存放地址的工作表addSheet = exbook["sheet1"] #读取工作簿,如果改了工作簿名字那么这里也要改#按行读取第一列,并存入addList列表:for row in range(1,addSheet.max_row+1): addList.append(str(addSheet["A%d"%(row)].value))dict = {} #创建一个字典用于存放地址经纬度数据for i in addList: url1='https://restapi.amap.com/v3/geocode/geo?address='+i+'&output=json&key=key值' #将一些符号进行URL编码,将这里的“key值”替换成你自己申请的 newUrl1 = parse.quote(url1, safe="/:=&?#+!$,;'@()*[]") #发送请求 response1 = urllib.request.urlopen(newUrl1) #读取数据 data1 = response1.read() #解析json数据 jsonData1 = json.loads(data1) #geocodes→0→location得到经纬度,写入字典 dict[i] = jsonData1['geocodes'][0]['location']dict_route={"出发地":[],"目的地":[],"距离":[],"线路":[]}k = len(addList) #nameList列表中元素个数#遍历addList列表for m in range(k): for n in range(k): #从addList中得到地址的名称,获得dict中的经纬度 origin = dict[addList[m]] destination = dict[addList[n]] url2='https://restapi.amap.com/v3/direction/driving?origin='+origin+'&destination='+destination+'&extensions=all&output=json&strategy=6&&key=key值' #编码,这里也要替换key newUrl2 = parse.quote(url2, safe="/:=&?#+!$,;'@()*[]") #发送请求 response2 = urllib.request.urlopen(newUrl2) #接收数据 data2 = response2.read() #解析json文件 jsonData2 = json.loads(data2) #输出该json中所有road的值 road=jsonpath.jsonpath(jsonData2,'$..road') #从json文件中提取距离 distance = jsonData2['route']['paths'][0]['distance'] #字典dict_route中追加数据 dict_route.setdefault("出发地",[]).append(addList[m]) dict_route.setdefault("目的地",[]).append(addList[n]) dict_route.setdefault("距离",[]).append(distance) dict_route.setdefault("线路",[]).append(road)route=pd.DataFrame(dict_route)#将字典数据创建DataFrameroute.to_excel("C:/Users/……/route_list.xlsx",sheet_name="route") #导出
想要经纬度的话,就在输出表中把origin和destination两个变量一起输出。
官方文档里提供了很多参考代码,可以进行适当替换。百度地图的操作也是类似的,只不过我习惯于用高德了。
每天爬取到单日数据量上限的时候会收到超额提示短信和邮件,不用理会。
更多内容可见高德开发平台官方指南。
高德API示例,可以直观看到API中提供了哪些接口。
高德自定义地图,可在线对空间数据进行可视化,务必注意经纬度数据的格式和样例保持一致。
来源地址:https://blog.csdn.net/qq_35061992/article/details/128300117
--结束END--
本文标题: 利用高德地图API批量获取地点经纬度和行车线路与OD距离(excel和python)
本文链接: https://lsjlt.com/news/402541.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0