百度地图开放平台轻量路径规划

  • 背景
  • 思路
  • 完整代码
  • 代码解读
  • 结果截图
  • 注意事项

背景

由于要做等时圈研究,手头上有一些poi数据,如小区地理位置信息,地铁站点的地理位置信息,想通过等时圈把两者连接起来,如不同站点的关于小区的等时圈,这就需要时间数据,多方对比发现百度地图开放平台的轻量路径规划能够很好解决这个问题。

思路


比如要给图中绿色三角形找一些等时圈,直接构造等时圈太空洞,于是想在其周边一定范围内找一些poi散点,这样中心点到散点的时间和距离就能够通过轻量级路线规划找出来,有了周边所有散点之后就可以通过arcgis等值线圈起来。
轻量级路线规划服务(又名DirectionLite API )是一套REST风格的Web服务API,以HTTP/HTTPS形式提供了路线规划服务。由于我们主要研究对象时上班族,所以选择公交路线(含地铁)规划教适宜,公交路线规划时根据起讫(qi)点坐标规划同城公共交通出行路线和耗时,支持公交、地铁出行方式,这里的起店为地铁站,讫点所有小区。上海有415个地铁站,15000+小区,要把所有路线算出来,至少有600万条数据,数据量如此之大,完全实现不太实际,这里只选择特殊的起点来计算其到其他所有终点的距离和时间。效果大致如下

完整代码

import csv #导入csv模块
import requests #导入服务器请求模块
import pandas as pd #导入数据分析模块origin_data=pd.read_excel("起点.xlsx")#读取起点数据
destination_data=pd.read_excel("讫点.xlsx") #读取讫点数据
origin_place=origin_data["起点"] #起点名
destination_place=destination_data["讫点"] #讫点名
lng_lat_origin=origin_data["起点经纬度"] #起店经纬度字段
lng_lat_destination=destination_data["讫点经纬度"] #讫点经纬度字段def routing(): #定义根据起讫点计算路径的距离和时间并写入csvpath="transit.csv" #当前路径下新建一个等时圈csv文件with open(path, "w+", newline='') as csv_file: #打开文件,追加writer=csv.writer(csv_file) header=["起点", "讫点", "距离(m)", "时间(min)", "起点经度", "起点纬度", "讫点经度", "讫点纬度"] #构造返回结果的表头writer.writerow(header) #先写入表头  for origin_index,origin_point in enumerate(lng_lat_origin):   #起点循环 for destination_index,destination_point in enumerate(lng_lat_destination): #终点循环#print(origin_point,destination_point) #测试起讫点经纬度url="http://api.map.baidu.com/directionlite/v1/transit?origin="+origin_point+"&destination="+destination_point+"&ak=您的AK"  #GET请求#print(url)header={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'} #构造请求头response=requests.get(url,headers=header) #发出请求answer=response.json() #json化if answer["status"]==0: #如果成功返回#print(len(answer["result"]["routes"])) #总共出行方案origin_name=str(origin_place[origin_index]) #起始点destination_name=destination_place[destination_index] #讫点名称distance=str(round(answer["result"]["routes"][0]["distance"],0)) #距离,转化为千米time_cosuming=str(round(answer["result"]["routes"][0]["duration"]/60,0)) #时长,转化为分钟   origin_lng=str(lng_lat_origin[origin_index]).split(",")[1] #起点经度origin_lat=str(lng_lat_origin[origin_index]).split(",")[0] #起点纬度destination_lng=str(lng_lat_destination[destination_index]).split(",")[1] #终点经度destination_lat=str(lng_lat_destination[destination_index]).split(",")[0] #终点纬度data_row=[origin_name, destination_name, distance,time_cosuming, origin_lng, origin_lat, destination_lng, destination_lat]print(data_row) #测试writer.writerow(data_row) #写入csvcsv_file.close() #全部写入后关闭csv文件if __name__=="__main__":routing()

代码解读

构造url非常关键,一般有如下几种请求方式

  • 公交路线规划(transit)
http://api.map.baidu.com/directionlite/v1/transit?origin=40.056878,116.30815&destination=31.222965,121.505821&ak=您的AK
  • 步行路线规划(walking)
http://api.map.baidu.com/directionlite/v1/walking?origin=40.01116,116.339303&destination=39.936404,116.452562&ak=您的AK
  • 骑行路线规划(riding)
http://api.map.baidu.com/directionlite/v1/riding?origin=40.01116,116.339303&destination=39.936404,116.452562&ak=您的AK
  • 驾车路线规划(driving)
http://api.map.baidu.com/directionlite/v1/driving?origin=40.01116,116.339303&destination=39.936404,116.452562&ak=您的AK

一定要看清经度和纬度的前后关系以及出行方式,这里选择transit关键词。首先把地铁经纬度读取进来,把小区经纬度读取进来,然后构造请求的url,起点的经纬度数据为地铁站的,讫点的经纬度数据为小区的,构造好起讫点请求url,就明确了从哪里到哪里,接下来就是怎么走的问题,紧接着用requests向服务器发出请求,返回json格式数据,获取相应的字段如时间和距离等,然后把起点名,终点名和终点的经度,终点的纬度整理成一条记录最后存入csv里,便得到地铁站到所有小区的时间和距离数据,接下来就是利用arcgis软件将这些数据可视化的工作。

结果截图

注意事项

(1)轻量路径规划帮助文档
(2)个人认证的用户ak配额只有30000条,注意不要超过配额了
(3)url的构造一定要纬度在前,经度在后,以英文逗号隔开
(4)经纬度记得处理成6位小数
(5)对于数据量不大的可以存为csv,没必要存到数据库里面

百度地图开放平台轻量路径规划相关推荐

  1. 后端根据百度地图真实路径距离_百度地图开放平台介绍--路线规划

    百度地图开放平台路线规划服务是结合实时交通,为用户提供覆盖国内外的路线规划服务.路线规划也是我们用户最常用到的功能之一,比如旅行时需要到达另外一个地方,通过百度地图可以快速规划距离最短路线或耗时最短路 ...

  2. php 百度逆地理编码,百度地图开放平台 Web服务API --Geocoding API (地理编码和逆地理编码)...

    百度地图开放平台地理编码服务和逆地理编码服务的api文档地址:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geoco ...

  3. 上手百度地图--开放平台必懂API使用场合(PC端)

    本篇整理仅适用与没有接触或对百度地图开放平台API基本没有概念的人 拖拽类 启用地图拖拽 默认启用 enableDragging() 对应的禁止方法 disableDragging( ) 启用地图习惯 ...

  4. 百度地图开放平台wgs84,gcj02转bd09

    百度地图开放平台wgs84,gcj02转bd09 完整代码 代码解读 参考文献 开局一张图,故事全靠编,上图是上海市257个地铁站bd09坐标和wgs84坐标的差距,可以看到bd09较wgs84往右上 ...

  5. 百度地图开放平台使用教程

    为什么要使用百度地图? 百度地图JavaScript API GL 是一套由JavaScript语言编写的应用程序接口,使用了WebGL对地图.覆盖物等进行渲染,支持3D视角展示地图.帮助开发者在网站 ...

  6. 震惊——JS中百度地图开放平台API尽然是这样使用

    百度地图js--API使用 基本使用 引用百度API资源 <!--引用资源--> <!--百度地图基础API--> <script type="text/jav ...

  7. 如何在百度地图开发平台获取开发者Key(AK)

    一.搜索百度地图开放平台 二.点进去选择控制台 三.我的应用->创建应用 四. 五. 六.获取开发版SHA1 1.第一步,如果使用的是高版本的android studio ,它会自带jdk,需要 ...

  8. 百度AI开放平台和高德开放平台的使用

    目录 1.百度AI开放平台 1.1语音合成 1.2语音识别 1.3人脸识别 1.4文字识别 1.4.1手写文字识别 1.4.2 身份证识别 1.5人体检测 2.高德开放平台 2.1天气查询 2.2地理 ...

  9. 自动驾驶技术平台分享:百度Apollo开放平台8.0再升级,更简单,更便捷,更高效

    文章目录 自动驾驶技术入门,先看平台 Appllo主要优势 版本更新新特性 颠覆更新"新"架构 全新加入软件包管理机制 加入新感知模型 感知全流程开放与提效 全新PnC工具链 写在 ...

最新文章

  1. layui 数据表格内容过长遮挡_word表格技巧:遇到这三种情况,你会处理么?
  2. Ruby之父:写Ruby时工作特别闲,总加班的人很难做出创造
  3. 样式文件修改后不起作用_Word样式,这个功能好用到让你忘不了!
  4. 【必看】Linux 或 Windows上实现端口映射
  5. Spring Boot框架表达式注入漏洞
  6. nodejs在cmd提示不是内部或外部命令解决方法
  7. docker重置mysql密码
  8. 一款比较好看的javascript轮播图代码
  9. 说说“用户无线网络时不时断开重连”的故障!
  10. 语音信号处理-概念(二):幅度谱(短时傅里叶变换谱/STFT spectrum)、梅尔谱(Mel spectrum)【语音的深度学习主要用幅度谱、梅尔谱】【用librosa或torchaudio提取】
  11. 虚拟机内linux网络连接,vmware中redhat5虚拟机无法连接网络
  12. Vue学习--黑马电商管理系统
  13. 烧毁DC/DC电路问题
  14. uni-app - 解决 H5 微信公众号授权登录后,无法回退到 “上一页“ 的问题(微信登录后如何返回到触发它的那一页?无法通过 uni.navigateBack() 返回到前一页的问题?)详细教程
  15. mysql表中字段数据类型_mysql数据表中字段的数据类型有哪些?
  16. 网页期末作业制作一个简单HTML电影网页设计(HTML+CSS)
  17. 诙谐幽默的个性自我介绍
  18. Mysql社区版安装教程
  19. html可以用搜狗浏览器打开网页,win8使用搜狗浏览器打开网页“显示WEB浏览器已对此页面进行了修改以帮助跨站脚本”怎么办...
  20. 易筋经韦驮劲十二势图及拳谱

热门文章

  1. PHP使用PDO连接带密码Access数据库(简单版)
  2. 如何在 GitLab CI 管道中构建 Docker 映像
  3. HDU1799-组合公式变形
  4. 企业微信app中退出某个企业 最新版 图文
  5. 查看从机状态 mysql_mysql常用操作命令
  6. 谱分析——连续傅里叶变换
  7. 【dubbo系列001】dubbo是什么?dubbo解决什么问题?
  8. 【文献翻译】软件设计级漏洞分类模型-Software Design Level Vulnerability Classification Mode
  9. matlab中linspace的用法,matlab中的一些基本使用方法(持续添加)
  10. nmon在linux应用