基于百度地图API的交通可达性分析python
文章目录
- 一、交通可达性是什么?
- 二、计算步骤
- 1.引入库
- 2.调用百度API进行两点之间的路径查询
- 3.输入待计算的文件和保存结果文件路径
- 4.读取文件并进行时间和距离计算
- 5.代码总览
- 总结
一、交通可达性是什么?
交通可达性最重要的考虑因素是交通成本,即交通距离与交通时间。
可以使用API 的路径规划服务功能,选择公交路线,获取两个位置之间的交通时间和交通距离,其使用规则是通过http/https 形式发起检索请求,将两个位置的坐标传递给百度地图服务器,服务器通过计算后将路径规划结果返回。从返回的参数中选择distance 和duration 分别表示总交通网络距离和总交通出行时间。
案例说明:
比如我们要计算上海迪士尼乐园的公交可达性,可以先将上海划分为500m*500m的网格,然后将网格的经纬度作为起点,将迪士尼乐园的经纬度作为终点,通过百度地图API计算起终点的时间和距离,再借用GIS分析工具,将结果可视化在地图上,即可生成如下可达性地图。
该篇文章主要介绍如何借用百度API计算两点之间的真实出行时间和距离。
二、计算步骤
1.引入库
代码如下(示例):
import requests
import json
import time
2.调用百度API进行两点之间的路径查询
若查询数据量较大,服务器有时会掉线,因此做了等待后重新尝试连接的功能。
代码如下(示例):
def getjson(ocoo,dcoo):# 先纬度后经度url='http://api.map.baidu.com/direction/v2/driving?origin='+ocoo+'&destination='+dcoo+'&coord_type=wgs84&departure_time=1595548800&tactics_incity=4&ak=XXX'while True:try:response=requests.get(url=url,timeout=5)breakexcept requests.exceptions.ConnectionError:print ('ConnectionError -- please wait 3 sec')time.sleep(3)except requests.exceptions.ChunkedEncodingError:print ('ChunkedEncodingError -- please wait 3 sec')time.sleep(3)except:print ('Unknow error')time.sleep(3)html=response.textdecodejson=json.loads(html)return decodejson
3.输入待计算的文件和保存结果文件路径
将待查询的两点的位置属性保存到文本文件,文件格式为
记录编号 | 起点经度 | 起点纬度 | 终点经度 | 终点纬度 |
---|---|---|---|---|
1 | 113.8375 | 22.8075 | 113.8275 | 22.8175 |
2 | 113.8375 | 22.5655 | 113.8875 | 22.4626 |
3 | 113.8375 | 22.1658 | 113.8732 | 22.1235 |
… | … | … | … | … |
# 输入查询文件的路径
file_object=open(r'D:\input\fromsz_base202011.csv','r')
# 输出结果文件的保存路径
file_object2=open(r'D:\fromsz_base_dis202011.txt','w')
4.读取文件并进行时间和距离计算
try:for line in file_object:count=count+1spline=line.split(',')idn=spline[0]coor=spline[5].strip()+','+spline[4].strip()door=spline[7].strip()+','+spline[6].strip()#print coordecodejson=getjson(coor,door)if decodejson.get('status')==0:#表示运行成功result=decodejson.get('result')routes=result.get('routes')#获得需要的时间和距离if len(routes)>0: time2=routes[0].get('duration')distance=routes[0].get('distance')file_object2.write(str(idn)+','+str(time2)+','+str(distance) +'\n')if count%10==0:finishtime=time.asctime( time.localtime(time.time()))finishtime1=time.time()print (count)print ('duration:',(finishtime1-starttime1)/60.0,'mins')else:print (str(coor)+','+ str(decodejson.get('status'))+decodejson.get('message'))
5.代码总览
# -*- coding: utf-8 -*-
# @Author: Xie
# @Date: 2021-04-15 11:49:25
# @Last Modified by: Xie
# @Last Modified time: 2021-04-15 11:58:10import requests
import json
import time
starttime=time.asctime(time.localtime(time.time()))
starttime1=time.time();
# 调用百度API进行两点之间的路径查询
def getjson(ocoo,dcoo):# 先纬度后经度url='http://api.map.baidu.com/direction/v2/driving?origin='+ocoo+'&destination='+dcoo+'&coord_type=wgs84&departure_time=1595548800&tactics_incity=4&ak=XXX'while True:try:response=requests.get(url=url,timeout=5)breakexcept requests.exceptions.ConnectionError:print ('ConnectionError -- please wait 3 sec')time.sleep(3)except requests.exceptions.ChunkedEncodingError:print ('ChunkedEncodingError -- please wait 3 sec')time.sleep(3)except:print ('Unknow error')time.sleep(3)html=response.textdecodejson=json.loads(html)return decodejson
# 输入查询文件的路径
file_object=open(r'D:\input\fromsz_base202011.csv','r')
# 输入结果文件的保存路径
file_object2=open(r'D:\fromsz_base_dis202011.txt','w')
count=0
try:for line in file_object:count=count+1spline=line.split(',')idn=spline[0]coor=spline[5].strip()+','+spline[4].strip()door=spline[7].strip()+','+spline[6].strip()#print coordecodejson=getjson(coor,door)if decodejson.get('status')==0:#表示运行成功result=decodejson.get('result')routes=result.get('routes')#获得需要的时间和距离if len(routes)>0: time2=routes[0].get('duration')distance=routes[0].get('distance')file_object2.write(str(idn)+','+str(time2)+','+str(distance) +'\n')if count%10==0:finishtime=time.asctime( time.localtime(time.time()))finishtime1=time.time()print (count)print ('duration:',(finishtime1-starttime1)/60.0,'mins')else:print (str(coor)+','+ str(decodejson.get('status'))+decodejson.get('message'))
finally:file_object.close()file_object2.close()print ('finish')
总结
以上就是利用地图API进行可达性计算的方法,操作简单,用户友好,结果准确。
而传统的GIS可达性计算,需要构建完善的GIS 交通网络模型,工作量较大。
注:API个人key有查询额度限制,企业key额度较高,若有大量查询需求,可私信提供企业key。
若有可达性分析需求,也可私信帮忙!
参考文献:
[1]《大型公共服务设施公共交通可达性评价方法》
[2]百度API文档:http://lbsyun.baidu.com/index.php?title=webapi/direction-api-v2
基于百度地图API的交通可达性分析python相关推荐
- Android开发-基于百度地图API开发仿滴滴出行APP界面的实现
前 言 近年来,由于移动互联网快速的发展以及基于移动设备的APP的普及,移动互联网改变了人们的生活方式.从线上的电子支付到线下的出行,移动互联网是当今社会人们生活不可或缺的一部分,而线下出行的网约车的 ...
- (亲测很实用)地理位置批量转经纬度,基于百度地图api
遇到很多地理位置需要得到其经纬度的时候,又不想或者不会写代码就很恼火, 只能一个一个去搜索去一个个复制 不管你会不会写前后端代码, 使用下面的方法就可以轻松的实现经纬度的批量查询(提示:基于百度地图a ...
- 基于百度地图API在AI Studio上的卫星地图块图像处理与分类
基于百度地图API在AI Stduio上的瓦片地图块图像处理与分类 项目介绍 本项目基于百度地图API获取了不同的瓦片地图并进行合并等处理,可用于遥感和抽象地图的地图块的图像分类.分割.检测等数据的制 ...
- 气象地图gis php代码,基于百度地图API实现自动气象站点信息显示
本栏目责任编辑:代 影数据库与信息管理 ComputerKnowledgeand Technology 电脑知识与技术 第9卷第27期 (2013年09月) 基于百度地图API实现自动气象站点信息显示 ...
- 基于百度地图API实现“网易出行“
基于百度地图API实现"网易出行&Travel Planing" 作者:黑衣侠客 一.前言 这次项目主要是因为软件工程老师布置的作业,实现一个名为Travel Planin ...
- 基于百度地图API计算任意两点间的出行距离
文章目录 前言 使用步骤 1.导入相关包 2.计算小汽车距离 3.计算骑行距离 4.创建主函数 总结 前言 为了方便自己以后查找代码,也不想让自己的桌面变得凌乱不堪,所以将把自己之前的代码保存到这里面 ...
- 基于百度地图API的微信周边搜索
这是百度LBS与微信结合的一个例子~~,已经加到 功能描述:点击微信的[+]后发送[位置]给微信公众号,会返回周边信息,也可以发送[附近xxx],如[附近公交],或者自己标注百度地图,标注您的连锁点或 ...
- android的百度地图sdk获取ip,基于百度地图API的ip地址查询
说明:使用ip地址查询太麻烦,偶然搜索发现有人已经写过基于百度API的ip地址查询,这个是前人的结晶,我只是修改了一些,勿喷. 用的python2.7,编码问题真是坑. 百度mapAPI私钥申请:ht ...
- 基于百度地图api实现计算目标点与自身位置的距离(js)
这里写自定义目录标题 导入api 获取自身定位 获取目标点定位 通过经纬度计算距离的函数 导入api 下面展示一些 内联代码片. ```javascript<script type=" ...
最新文章
- java多线程11.非阻塞同步机制
- 《转》八大算法详细讲解
- 一文带你快速读懂.NET CLI
- c语言交通违章编程代码,C语言程序设计之交通处罚单管理系统 报告(内含代码).doc...
- oracle中的nls在哪,Oracle的NLS设置
- 查看文件大小du -sh ./ ll -h
- Nginx的原理解析
- 2019-12-17 drivers/clocksource/arm_arch_timer.c
- Ubuntu在docker容器中安装TensorFlow-1.5
- 基于python的学生信息管理系统毕业论文_学生信息管理系统毕业论文
- 为什么有符号整型最小值是-32768?
- React中使用worker线程
- WMS库存盘点流程 WMS库存盘点计划
- 【2016】【论文笔记】差频可调谐THz技术——
- Win32学习笔记 - WndProc回调函数
- 无法通过 Internet 连接到 Visual Paradigm 的服务器
- Kubernetes(k8s) YAML文件详解
- 利用VBA在EXCEL 获取网页上的天气
- PADS逻辑系列含义
- 2018年SCI论文--整合GEO数据挖掘完整复现 八 :STRING数据库构建蛋白质相互作用网络(PPI),cytoscape软件筛选hub基因