Python利用百度地图获取两地距离的方法
Python利用百度地图获取两地距离的方法
这篇文章主要介绍“Python利用百度地图获取两地距离的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python利用百度地图获取两地距离的方法”文章能帮助大家解决问题。
百度地图开放平台
进入百度地图开放平台后,登陆用户,点击上方的控制台,按照提示进行激活后创建服务端类型的应用,应用名任意设置,其中白名单校验不做任何限制可以填写0.0.0.0/0
。创建成功后画面应如下图所示,其中访问应用(AK)即途中红色方框圈起来的部分一定要注意不要随意泄漏,后面需要使用到,这是后面访问需要用到的一串口令。
介绍需要用到的API
本项目中所有使用的API均为Web服务API,官方开发文档。
1.地点检索服务
地点检索服务(又名Place API)是一类Web API接口服务;
服务提供多种场景的地点(POI)检索功能,包括城市检索、圆形区域检索、矩形区域检索。开发者可通过接口获取地点(POI)基础或详细地理信息。
我们利用这个API来获取指定地点的经纬度(lat, lng)两个参数。
2.批量算路服务
批量算路服务(又名RouteMatrix API)是一套以HTTP/HTTPS形式提供的轻量级批量算路接口,用户可通过该服务,根据起点和终点坐标计算路线规划距离和行驶时间,RouteMatrix API V2.0支持中国大陆地区。
我们利用这个API来获取两个地点(用经纬度来给出)之间的路线规划距离。
编写Python程序
0.需要用到的模块
requests
json
1.获取对应地点的经纬度
将传入的address
通过地点检索服务得到其经纬度,返回值为经纬度对应的字符串值,中间以逗号隔开,之后跟一个查询返回状态,如果查询失败,状态值不为0。
注意将代码中的AK换成一开始截图中的AK码。
defgetPosition(address):url=r"http://api.map.baidu.com/place/v2/search?query={}®ion=全国&output=json&ak={}".format(address,AK#这里是一开始截图用红色圈起来的部分)res=requests.get(url)json_data=json.loads(res.text)ifjson_data["status"]==0:lat=json_data["results"][0]["location"]["lat"]#纬度lng=json_data["results"][0]["location"]["lng"]#经度else:print("[ERROR]Cannotfind{}.".format(address))return"0,0",json_data["status"]returnstr(lat)+","+str(lng),json_data["status"]
2.获取两地之间的距离
将传入的两个地点(以经纬度描述)通过批量算路服务得到之间的路线规划距离。本范例是以驾车行驶(对应参数为"driving")的方式来进行计算的。
同样注意将代码中的AK换成一开始截图中的AK码。
defgetDistance(start,end):url="http://api.map.baidu.com/routematrix/v2/driving?output=json&origins={}&destinations={}&ak={}".format(start,end,AK#这里是一开始截图用红色圈起来的部分)res=requests.get(url)content=res.contentjsonv=json.loads(str(content,"utf-8"))dist=jsonv["result"][0]["distance"]["value"]returndist
3.合并函数调用
传入两个地点名,返回两地点距离,当某个地点查询不到时,返回结果设置为-1。
defcalcDistance(startName,endName):start,status1=getPosition(startName)end,status2=getPosition(endName)ifstatus1==0andstatus2==0:returngetDistance(start,end)else:return-1
4.进行简单的功能测试
运行代码输出北京和成都之间的距离,其单位为米。
5.对Excel中的批量地点计算距离
将data.xlsx
文件中的地点全部读取并计算出距离,将结果保存到本地的result.xlsx
文件中,其中我们将距离的单位设置为千米。主模块代码如下:
if__name__=="__main__":data=pd.read_excel("data.xlsx")res=[]foriinrange(0,len(data)):startName=data.iloc[i,0]endName=data.iloc[i,1]dist=calcDistance(startName,endName)res.append([startName,endName,dist/1000])pd.DataFrame(res).to_excel("result.xlsx",header=["起点","终点","距离"],index=None,encoding="utf-8")
其中data.xlsx
文件的内容为:
对应的输出result.xlsx
文件内容如下:
附录
#本次整体的源代码AK="修改为你自己的AK码即可使用"importpandasaspdimportrequestsimportjsondefgetPosition(address):url=r"http://api.map.baidu.com/place/v2/search?query={}®ion=全国&output=json&ak={}".format(address,AK#这里是一开始截图用红色圈起来的部分)res=requests.get(url)json_data=json.loads(res.text)ifjson_data["status"]==0:lat=json_data["results"][0]["location"]["lat"]#纬度lng=json_data["results"][0]["location"]["lng"]#经度else:print("[ERROR]Cannotfind{}.".format(address))return"0,0",json_data["status"]returnstr(lat)+","+str(lng),json_data["status"]defgetDistance(start,end):url="http://api.map.baidu.com/routematrix/v2/driving?output=json&origins={}&destinations={}&ak={}".format(start,end,AK#这里是一开始截图用红色圈起来的部分)res=requests.get(url)content=res.contentjsonv=json.loads(str(content,"utf-8"))dist=jsonv["result"][0]["distance"]["value"]returndistdefcalcDistance(startName,endName):start,status1=getPosition(startName)end,status2=getPosition(endName)ifstatus1==0andstatus2==0:returngetDistance(start,end)else:return-1if__name__=="__main__":data=pd.read_excel("data.xlsx")res=[]foriinrange(0,len(data)):startName=data.iloc[i,0]endName=data.iloc[i,1]dist=calcDistance(startName,endName)res.append([startName,endName,dist/1000])pd.DataFrame(res).to_excel("result.xlsx",header=["起点","终点","距离"],index=None,encoding="utf-8")
关于“Python利用百度地图获取两地距离的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注恰卡编程网行业资讯频道,小编每天都会为大家更新不同的知识点。
推荐阅读
-
python(中无效的十进制怎么解决 python怎么转换进制)
python怎么转换进制?Python执行二进制转换:1.十进制到二进制(bin)首先,让让我们看看如何将十进制转换成二进制。我...
-
python怎么清除完全相同的行(python splte如何分隔有多个相同符号的str)
pythonsplte如何分隔有多个相同符号的str?str你的string内容str_(相同的符号)执行完了以后再在相同符号的...
-
python(编程控制电脑关机 如何控制电脑关机)
如何控制电脑关机?可以在电脑的运行窗口中输入输入公式,给电脑可以设置自动关机。1.按开快捷键winr然后打开运行窗口。2.在运行窗...
-
python中的特殊标识符(python 中 标识符中可以有逗号吗)
python中标识符中可以有逗号吗?在python语言中合法的标识符是字母、数字以及_,所以我合法的标识符中肯定不能有逗号if...
-
python(excel 提取数据写入新表 python导入excel数据找不到工作簿)
python导入excel数据找不到工作簿?我可以导入数据后找不到工作,不是因为他的工作没有被转移。什么软件可提取并合并Exce...
-
python中字典定义的四种方法(python global关键字的用法详解)
pythonglobal关键字的用法详解?global标志实际上是目的是提示python讲解器,说被其修饰的变量是全局变量。这样...
-
python(array用法 python如何对两个数组做差处理)
python如何对两个数组做差处理?Python中的列表中的元素肯定不能真接相加,减。t最佳的位置的是将列表装换成Python中的...
-
python多行注释符号怎么表示
python多行注释符号怎么表示这篇文章主要介绍“python多行...
-
python支持的操作系统是什么
python支持的操作系统是什么这篇文章主要介绍“python支持...
-
python如何判断列表为空
python如何判断列表为空这篇文章主要介绍“python如何判断...