笔者使用的是百度地图“Web服务API”提供的路径规划功能,官方网站地址如下:
http://lbsyun.baidu.com/index.php?title=webapi

预期效果

批量输入两点经纬坐标返回多种交通方式的当前时刻预计行程时间
(若基础数据为文字地址,可使用百度地图API提供的“正/逆地理编码服务”转换为经纬坐标数据)

获取秘钥

秘钥是访问百度地图API各项功能的密码,需向百度地图申请获得

点击网址,登录百度账号,点击获取秘钥,即可进入控制台界面
我们需要以开发应用的名义申请秘钥,因此在应用管理的我的应用中点击创建应用
简单输入必要信息提交后稍等便可通过验证
返回控制台即可获得所申请应用的AK码即秘钥

路线规划

点击网址中的路线规划分区进入路线规划服务界面

百度标明了请求格式,以及返回格式

以返回参数相对复杂的公交路径规划为例

请求格式

请求格式中不可或缺的部分是API地址+起终点经纬度+AK秘钥(各要素间通过&连接)
还有许多选填参数,如输入输出坐标类型(火星坐标/百度坐标/GPS坐标)、出行者选择路径的策略
值得一提的是在公交路径规划中是可以通过控制“公交换乘策略”是否使用地铁这一变量分别获得仅公交车出行和综合使用公共交通两种状态下的行程时间的
这在需要分别获得公交车以及地铁出行数据并加以对比时十分方便

由于唯一的变量为起终点经纬度,因此可以将请求代码整合为一个函数,方便调用:

def stod(slat,slng,dlat,dlng):#输入:起点纬度、起点经度、终点纬度、终点经度url ="http://api.map.baidu.com/direction/v2/transit?" #API地址ak = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' #秘钥real_url = url +"origin="+slat+","+slng+"&destination="+dlat+","+dlng+"&ak="+ak #完整的请求代码req = requests.get(real_url)t = req.textdata = json.loads(t) #将数据保存在数组data中try:#防止某几条数据报错导致请求终止total_duration = data['result']["routes"][0]["duration"]/60stepstr = str(total_duration) #获取该条数据总行程时间steps = data['result']["routes"][0]['steps'] #获取该条路径的所有步骤for step in steps:step_tructions = step[0]["instructions"]#每一步的介绍包括乘坐公交车或地铁线路名step_duration = step[0]["duration"]#每一步所花费的时间stepstr = stepstr+"/"+step_tructions+"/"+str(step_duration/60)except:stepstr = Nonereq.close()return stepstr #返回数据为总时长/第一步/第一步耗时/第二步/第二步耗时/...

全方式整合版

由于计算每种出行方式出行时耗都要单独编写一个函数,不够简洁,笔者将公共交通、小汽车、电动车、自行车、步行五种出行方式整合为一个Class(类)方便后续在其他py文件中直接调用。
类文件如下:

import requests
import jsonclass Round_plan():"""一个关于调用百度地图API全方式路径规划功能的类"""def __init__(self,transit_mode):self.transit_mode=transit_modedef stod(self,slat,slng,dlat,dlng):self.slat=slatself.slng=slngself.dlat=dlatself.dlng=dlngif self.transit_mode=='Car':a="driving"elif self.transit_mode=='Public transit' :a="transit"elif self.transit_mode=="E-bike":a="riding"elif self.transit_mode=="Bike":a="riding"elif self.transit_mode=="Walk":a="walking"url = "http://api.map.baidu.com/direction/v2/"+a+"?"ak = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'if self.transit_mode=="E-bike":real_url = url + "origin="+slat+","+slng+"&destination="+dlat+","+dlng+"&ak="+ak+"&riding_type="+"1"else:real_url = url + "origin="+slat+","+slng+"&destination="+dlat+","+dlng+"&ak="+akreq = requests.get(real_url)t = req.textdata = json.loads(t)# print(data['result']["routes"][0])try:if self.transit_mode != 'Public transit' :total_duration = data['result']["routes"][0]["duration"]/60stepstr = str(total_duration)else:total_duration = data['result']["routes"][0]["duration"]/60stepstr = str(total_duration)steps = data['result']["routes"][0]['steps']for step in steps:step_tructions = step[0]["instructions"]step_duration = step[0]["duration"]# print(step_tructions , step_duration)stepstr = stepstr+"/"+step_tructions+"/"+str(step_duration/60)except:stepstr = Nonereq.close()return stepstr

应用案例

原始数据为test.xlsx,包含5条起终点经纬坐标:

主程序代码如下

from round_plan import Round_plan #引用类
import xlrd
import openpyxl
import time
import socket
socket.setdefaulttimeout(20)
transit_mode=input("Please input which transit mode you will choose:(Car/Public transit/E-bike/Bike/Walk)")
file_name=input("Please input the filename of the data:")
if __name__ == '__main__':  #调用文件的方式为直接执行path = file_name+r'.xlsx'xl = xlrd.open_workbook(path)sheet = xl.sheets()[0]data = []data.append(sheet.col_values(0))data.append(sheet.col_values(1))data.append(sheet.col_values(2))data.append(sheet.col_values(3))slat = data[0]slng = data[1]dlat = data[2]dlng = data[3]stepstr_list=[]# print(data)for i in range(len(slat)):print(i)if(i%100==0):time.sleep(1)rount_result=Round_plan(transit_mode)   #类的实例stepstr = rount_result.stod(str(slat[i]), str(slng[i]), str(dlat[i]), str(dlng[i]))stepstr_list.append(stepstr)wb = openpyxl.Workbook()sheet = wb.activesheet.title = 'stepstr_data'value = [stepstr_list]for i in range(0, 1):for j in range(0, len(value[i])):sheet.cell(row=j + 1, column=i + 1, value=value[i][j])wb.save(transit_mode+'-test.xlsx')print("写入数据成功!")

当数据量较大时建议设置较长的每100次请求间隔时间,这是为了防止远程主机认为短时间内一款应用产生大量请求,系为恶意访问强行终止访问,报错如下

最终效果如图所示:

得到数据结构如图所示:

【Python】利用百度地图API获取多方式行程时间相关推荐

  1. 百度地图利用位置提供服务器,利用百度地图API获取当前位置信息的实例

    利用百度地图API可以做很多事情,个人感觉最核心也是最基础的就是定位功能了.这里分享一个制作的JS可以实现登录网页后定位: var map; var gpsPoint; var baiduPoint; ...

  2. 【python】python利用百度地图API:获取经纬度、地图撒点

    本文目的: python通过百度地图API,获取所给地址的经纬度,并且在百度地图上进行撒点. 另:百度地图API功能强大,如: GPS功能(单个点沿线运动). 信息窗口示例(添加纯文字的信息窗口). ...

  3. 利用百度地图API获取地理编码

    利用百度的开放平台进行操作 百度地图开放平台 | 百度地图API SDK | 地图开发 下拉至底部,点击Web服务API python 程序如下 import json from urllib.req ...

  4. python爬虫 + 百度地图api 获取城市的实时路况信息

    ​ 前言:本文写作的初衷是笔者参与了一个道路实况图的制作项目中,本人负责路况数据的抓取,本来是想要用高德地图的api来进行数据的抓取,但是很不巧的是 - 高德地图的路况查询api服务已经不能用了,于是 ...

  5. Python调用百度地图api获取起点终点路线规划距离和预估时长

    现有起点和终点坐标值(经纬度lng.lat),目的是通过百度地图开发者平台的路线规划功能获取起点终点路线规划距离和预估时长,百度地图开发者平台路线规划使用说明网址为:http://lbsyun.bai ...

  6. python地图 两点距离_使用Python调用百度地图Api获取两地距离

    完整代码可以关注公众号:Romi的杂货铺 1.获取百度api接口 首先需要在百度的公众平台http://lbsyun.baidu.com/上点击控制台,如果是新用户的话需要进行注册和验证.注册和验证完 ...

  7. [Python]调用百度地图API对地点进行搜索,利用 JSON 返回纬度/行政区域编号

    1.创建百度API应用 类似爬虫程序,在百度地图API进行注册 在此处点击控制台,在应用管理------我的应用处 创建自己的应用. 创建应用如图所示,在请求校验方式处选择sn校验方式 记住自己的AK ...

  8. python获取某地铁站经纬度_python通过百度地图API获取某地址的经纬度详解

    前言 这几天比较空闲,就接触了下百度地图的API(开发者中心链接地址:http://developer.baidu.com),发现调用还是挺方便的,本文将给大家详细的介绍关于python通过百度地图A ...

  9. python批量爬取小网格区域坐标系_Python爬虫实例_利用百度地图API批量获取城市所有的POI点...

    上篇关于爬虫的文章,我们讲解了如何运用Python的requests及BeautifuiSoup模块来完成静态网页的爬取,总结过程,网页爬虫本质就两步: 1.设置请求参数(url,headers,co ...

最新文章

  1. 使用IDEA开发Servlet程序
  2. linux下查看所有用户及所有用户组
  3. mainwindow.obj:-1: error: LNK2019: 无法解析的外部符号 public: __cdecl about::about(class QWidget *) (??0abo
  4. 查看mysql表中的所有索引
  5. 构架高性能WEB网站的几点知识
  6. C# winform DataGridView 常见属性
  7. 魔兽老玩家无需购买《燃烧远征》资料片序列号
  8. matlab guide对话框+滑动条+弹出式菜单+列表框的使用
  9. 区块链数学建模_试图通过高中数学课程来解释区块链
  10. 建设数据中心机房主要看这几点,否则被定为劣质机房
  11. 如何用wordpress搭建个人博客
  12. 《我是一只IT小小鸟》读书笔记
  13. Gentoo安装MarkDown编辑器Haroopad
  14. tomcat下面的starup.bat的作用
  15. 如何取消Idea里面的中文语法检查
  16. computed vue 不 触发_vue computed 无法触发 set
  17. u深度重装系统详细教程_u深度u盘启动盘安装win7详细步骤
  18. oracle系统pga,oracle教程之PGA管理
  19. js对abc进行排序
  20. linux 进文字界面,CentOS安装后进入时文字界面,不知如何用命令,求解

热门文章

  1. Arcgis for Android在地图上画多边形并进行边长、周长和面积的测量
  2. 【系统分析师之路】第二十章 数学与经济管理(章节重点)
  3. Outlook附件自动存储
  4. Access数据操作报错:操作必须使用一个可用的更新查询
  5. Es Bucket聚合(桶聚合) Terms Aggregation与Significant Terms Aggregation
  6. 游戏中排行榜代码实现
  7. c++ pair 加减运算符重载
  8. 创建Vo和相应的hbm.xml
  9. ScalersTalk 机器学习小组第 21 周学习笔记(深度学习-10)
  10. 这个杀手不太冷(一)