返回顶部
首页 > 资讯 > 后端开发 > Python >利用高德地图API批量获取地点经纬度和行车线路与OD距离(excel和python)
  • 127
分享到

利用高德地图API批量获取地点经纬度和行车线路与OD距离(excel和python)

python 2023-09-10 19:09:36 127人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、excel调取API方法1.申请一个key2.excel调用API 二、python方法计算地址列

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

爬取高德或百度的数据有数量限制,以高德为例,单日调取经纬度的免费额度为5000条,多个key同时调取也不能改变单日可调用总数。
当数量少的时候可以直接用excel进行操作,方便快捷,但excel在大量处理时会出现错误,数据量上千就推荐使用python,更加方便。
在开始爬取之前,将地址处理成标准格式,即“xx省xx市xx县/区xx小区/村x门x户”,不同的地区会有同名地址存在,所以省市一定要写清楚。
ps:其他地图都类似,本文只以高德为例。

一、excel调取api方法

1.申请一个key

当然申请很多个也可以,看你心情。
高德开放平台首页登录,然后点击右上方【控制台】,左侧【应用管理】-【我的应用】,然后右上角【创建新应用】,随便创建一个,会出现【添加】字样,点击添加一个key,名字随便,服务平台选【WEB服务】。

2.excel调用API

获取经纬度:

=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")

二、Python方法

计算地址列表中两两之间的OD距离和行车路线

代码如下(示例):

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)    #geocodes0→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

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作