基于百度地图API的交通可达性分析python
文章目錄
- 一、交通可達性是什么?
- 二、計算步驟
- 1.引入庫
- 2.調用百度API進行兩點之間的路徑查詢
- 3.輸入待計算的文件和保存結果文件路徑
- 4.讀取文件并進行時間和距離計算
- 5.代碼總覽
- 總結
一、交通可達性是什么?
交通可達性最重要的考慮因素是交通成本,即交通距離與交通時間。
可以使用API 的路徑規劃服務功能,選擇公交路線,獲取兩個位置之間的交通時間和交通距離,其使用規則是通過http/https 形式發起檢索請求,將兩個位置的坐標傳遞給百度地圖服務器,服務器通過計算后將路徑規劃結果返回。從返回的參數中選擇distance 和duration 分別表示總交通網絡距離和總交通出行時間。
案例說明:
比如我們要計算上海迪士尼樂園的公交可達性,可以先將上海劃分為500m*500m的網格,然后將網格的經緯度作為起點,將迪士尼樂園的經緯度作為終點,通過百度地圖API計算起終點的時間和距離,再借用GIS分析工具,將結果可視化在地圖上,即可生成如下可達性地圖。
該篇文章主要介紹如何借用百度API計算兩點之間的真實出行時間和距離。
二、計算步驟
1.引入庫
代碼如下(示例):
import requests import json import time2.調用百度API進行兩點之間的路徑查詢
若查詢數據量較大,服務器有時會掉線,因此做了等待后重新嘗試連接的功能。
代碼如下(示例):
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 |
| … | … | … | … | … |
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Microsoft HPC Pack 2
- 下一篇: 单片机c语言编程编码器数值,基于单片机的