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

工具:Python3

实现过程并不难,但是爬取过程可能会由于服务器或者参数不满足要求导致爬虫中断,注意处理这个问题即可。

最终结果是写入了txt文件,所以需要在循环遇到错误的时候写入对应的可识别的值(就是说我看到这个值就知道这个结果是错误的,可以写对应数量的NA或者0值),方便后续分析。

如果手上只有起点和终点的结构化地址数据(如:北京市海淀区上地十街十号),可以使用百度地图开发者平台的地理编码服务,可以参考这篇文章:https://mp.csdn.net/postedit/81610131

以下爬虫要改的地方:一是注意源文件的数据格式要转utf-8;二是修改文件路径;三是AK需要自行去开发者平台申请。

# -*- coding: utf-8 -*-
import pandas
import csv
import re
import time
import json
from urllib.request import urlopen
import urllib# 原数据文件格式: 序号 + 起点纬度 + 起点经度 + 终点纬度 + 终点经度
origin_path = 'E://data/起点终点坐标.xlsx'   # 原始坐标文件路径
result_path = 'E://data/result122901.txt'   # 爬取数据文件保存路径"""# 百度地图提供的api服务网址
"http://api.map.baidu.com/routematrix/v2/driving?output=json"  # 驾车(routematrix 批量算路)
'http://api.map.baidu.com/routematrix/v2/riding?output=json'  # 骑行
'http://api.map.baidu.com/routematrix/v2/walking?output=json'  # 步行
'http://api.map.baidu.com/direction/v2/transit?output=json'  # bus(direction路线规划)
"""# 声明坐标格式,bd09ll(百度经纬度坐标);bd09mc(百度摩卡托坐标);gcj02(国测局加密坐标),wgs84(gps设备获取的坐标)
cod = r"&coord_type=bd09ll"# AK为从百度地图网站申请的秘钥
AK = ['4KQuylnCQEIWYG65tEMQ9spP4FFBvNoI',]dfBase = pandas.read_excel(origin_path, names=['序号','起点纬度','起点经度','终点纬度','终点经度'])
dfBase.head()

dataList = []  # 储存获取的路线数据
akn = 0  # 使用第几个ak
for i in range(len(dfBase)):print(i)ak = AK[akn]out_lat = dfBase.at[i,'起点纬度']out_lng = dfBase.at[i,'起点经度']des_lat = dfBase.at[i,'终点纬度']des_lng = dfBase.at[i,'终点经度']"""# 获取驾车路径:常规路线规划(不考虑路况) 以下是可选参数#  tactics =10不走高速;=11常规路线;=12距离较短;=13距离较短"""url_drive = r"http://api.map.baidu.com/routematrix/v2/driving?output=json&origins={0},{1}&destinations={2},{3}&{4}&tactics=11&ak={4}".format(out_lat,out_lng,des_lat,des_lng,ak)result_drive = json.loads(urlopen(url_drive).read())  # json转dictstatus_drive = result_drive['status']print('ak秘钥:{0}  获取驾车路线状态码status:{1}'.format(ak, status_drive))if status_drive == 0:  # 状态码为0:无异常distance_drive = result_drive['result'][0]['distance']['value']  # 里程(米)timesec_drive = result_drive['result'][0]['duration']['value']  # 耗时(秒)elif status_drive == 302 or status_drive == 210 or status_drive == 201:  # 302:额度不足;210:IP验证未通过distance_drive = timesec_drive = 'AK错误'akn += 1ak = AK[akn]else:distance_drive = timesec_drive = '请求错误'"""### 以下是乘车规划可选参数tac_bus = r'&tactics_incity=0'# 市内公交换乘策略 可选,默认为0      0推荐;1少换乘;2少步行;3不坐地铁;4时间短;5地铁优先city_bus = r'&tactics_intercity=0'# 跨城公交换乘策略  可选,默认为0    0时间短;1出发早;2价格低;city_type = r'&trans_type_intercity=0'# 跨城交通方式策略  可选,默认为0  0火车优先;1飞机优先;2大巴优先;"""url_bus = r'http://api.map.baidu.com/direction/v2/transit?output=json&origin={0},{1}&destination={2},{3}&{4}&ak={4}'.format(out_lat,out_lng,des_lat,des_lng,ak)print(url_bus)result_bus = json.loads(urlopen(url_bus).read())status_bus = result_bus['status']print('ak秘钥:{0}  获取乘车路线状态码status:{1}'.format(ak, status_bus))if status_bus == 0:rsls = result_bus['result']['routes']if rsls == []:    # 无方案时状态也为0,但只返回一个空listdistance_bus = timesec_bus = cost_bus = '无公交方案'else:distance_bus = result_bus['result']['routes'][0]['distance']  # 乘车路线距离总长(米)timesec_bus = result_bus['result']['routes'][0]['duration']  # 乘车时间(秒)cost_bus = result_bus['result']['routes'][0]['price']  # 乘车费用(元)elif status_bus == 302 or status_bus == 210 or status_bus == 201:distance_bus = timesec_bus = cost_bus = 'AK错误'akn += 1ak = AK[akn]elif status_bus == 1001:distance_bus = timesec_bus = cost_bus = '无公交方案'else:  # 其他类型状态码(服务器错误)distance_bus = timesec_bus = cost_bus = '请求错误'dataList.append([ak,status_drive,distance_drive,timesec_drive,status_bus,distance_bus,timesec_bus,cost_bus])dfAll = pandas.DataFrame(dataList, columns=['ak','status_drive','distance_drive','timesec_drive','status_bus','distance_bus','timesec_bus','cost_bus'])
dfAll

最后保存为Excel:

result_path = r'E://data/路线规划结果.xls'   # 爬取数据文件保存路径
dfAll.to_excel(result_path )

有什么问题欢迎骚扰我微信:

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

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

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

  2. Python调用百度地图api路径查询

    通过调用百度地图api获取两个地点的距离和时间.参数详见百度地图api官方文档. # -*- coding: utf-8 -*- """ Created on Thu M ...

  3. c语言api获取百度地图,H5调用百度地图API获取地理位置

    //获取当前位置 var geolocation = new BMap.Geolocation(); geolocation.getCurrentPosition(function(r){ alert ...

  4. HTML5页面调用百度地图API,获取当前位置并导航到目的地

    微信也可用, <!DOCTYPE html> <html lang="zh-cmn-Hans"><meta charset="UTF-8&q ...

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

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

  6. 调用百度地图API获取经纬度(详细步骤)

    前端调用百度地图API获取经纬度(详细操作) 1. 浏览器搜索百度地图开放平台 2. 创建应用 点击控制台 --> 应用管理 --> 我的应用 --> 注册账号(如果没有注册过) - ...

  7. python调用百度地图API爬取西安市POI数据

    任务前提 做该项目之前,首先得有基础知识: 编程语言:python 编译工具:PyCharm 网络爬虫相关知识,xpath库,numpy,pandas等库. 任务准备: 去百度地图开放平台申请密匙:h ...

  8. python 调用百度地图api 实现批量经纬度转换为实际省市地点(api调用,json解析,mysql读取与写入)

    1.获取秘钥 调用百度地图API实现得申请百度账号或者登陆百度账号,然后申请自己的ak秘钥.链接如下:添加链接描述 下面是百度创建的app设置: 2.调用API将经纬度信息解析成json信息 def ...

  9. python调用百度地图API批量查询全国高速收费站点经纬度

    写在前面 大家好,我是饭都吃不起的南南 昨天帮朋友爬了全国的高速站点收费站这里下载 [http://www.bestunion.cn/gaosu/p_4/sfzlist.html] 由于该网站并没有西 ...

最新文章

  1. 实例理解q—learning-Python强化学习
  2. hdu 5339 Untitled【搜索】
  3. android 绘制分割线,Android EditText在其drawable和它的文本之间绘制一个分隔线
  4. java学习(66):局部类内方法访问
  5. Windows7 Xp Mode部署与讲解
  6. adb隐藏状态栏图标_[应用]华为手机怎么设置隐藏状态栏上的图标
  7. mac下安装elasticsearch
  8. matlab 贝叶斯工具箱,matlab的BNT贝叶斯工具箱错误求教
  9. git 提交代码到新的库,不保留原来的提交历史记录
  10. java object 数组_Java用Object实现数组队列的泛思与理解
  11. a人工智能b大数据c云计算_解读云计算、大数据、AI 对数据中心的影响,最全面的解说分析!...
  12. 逻辑覆盖测试(五)条件组合覆盖
  13. 【Chrome】678- Chrome插件开发全攻略
  14. 洛谷.3733.[HAOI2017]八纵八横(线性基 线段树分治 bitset)
  15. MMO手游地图同步方案总结
  16. C语言(求最小公倍数的3种方法)
  17. 灰度发布、蓝绿部署、金丝雀都是啥?
  18. cad打开卡死_求助,cad 一打开就卡死,完全没办法运行,怎么处理
  19. JavaWeb基础(黑马配套)
  20. 20年代下的VR发展趋势

热门文章

  1. 购物管理系统(管理员,客户)
  2. 2021-11-15 求100以内偶数与奇数之和
  3. Springboot整合Mysql集群
  4. 毕业设计日志--第一篇——确定选题
  5. Program week15 workexperiment
  6. 因聚而生 为你所能 | 华为伙伴暨开发者大会2022盛大召开
  7. Shell教程day02
  8. matlab中b逆,matlab中,表示()A.矩阵A的逆右乘BB.B矩阵A的逆左乘BC.矩阵B的逆左乘AD.矩阵B的逆右乘A...
  9. Apache Kylin 4.0.2 集群模式安装部署指南
  10. CS大类专硕都有哪些?前景如何?