电竞比分网-中国电竞赛事及体育赛事平台

分享

如何利用Python獲取路網(wǎng)交通態(tài)勢(shì)

 千年老藤 2024-06-22 發(fā)布于廣西

溫馨提示:沒(méi)有設(shè)置星標(biāo)的小伙伴可能會(huì)收不到文章的推送信息,歡迎各位新老朋友給【hello trans】加個(gè)星標(biāo),以便及時(shí)獲得最新推文,感謝支持。

本文主要是提供技術(shù)路線和思路,使用Python語(yǔ)言,通過(guò)高德API接口,來(lái)獲取路網(wǎng)實(shí)時(shí)的交通態(tài)勢(shì)。

(一)效果預(yù)覽

圖片

圖片

圖片

(二)準(zhǔn)備工作

(1)高德api key申請(qǐng)

進(jìn)入高德開(kāi)放平臺(tái),地址為:https://lbs.amap.com/。當(dāng)然直接使用瀏覽器進(jìn)行搜索【高德開(kāi)放平臺(tái)】也可以快速進(jìn)入。首先進(jìn)入控制臺(tái),然后點(diǎn)擊管理key。添加一個(gè)【web服務(wù)】的key即可。

圖片

圖片

圖片

個(gè)人用戶者,每天免費(fèi)使用的key額度是有限的,以路徑規(guī)劃為例,每天免費(fèi)調(diào)用量上限為5000。換言之,我們每次構(gòu)造的OD對(duì)不能超過(guò)5000個(gè)。如果想要調(diào)用更多的量可以向高德進(jìn)行申請(qǐng)。

圖片

圖片

(2)范圍shp文件準(zhǔn)備

以arcgis為例,在arcgis中加載好高德的在線地圖,然后再右側(cè)目錄欄連接到我們的目錄(代碼所在的根目錄)。

圖片

然后在該目錄下新建一個(gè)shp文件。

圖片

名稱命名為【bounds】,要素選擇面,坐標(biāo)系選擇地理坐標(biāo)系WGS84。

圖片

然后,在左側(cè)圖層欄,選擇bounds圖層【開(kāi)始編輯】。

圖片

在新彈出的編輯窗口選擇面,然后就可以繪制出范圍了。

圖片

圖片

最后停止停止編輯,保存即可,這一步arcgis的操作比較簡(jiǎn)單,就不詳細(xì)展開(kāi)。

(三)代碼演示

要使用路徑規(guī)劃API來(lái)獲取信息就需要提前構(gòu)造OD對(duì),通過(guò)讀取邊界范圍的最大最小值來(lái)生成均勻的點(diǎn)。

圖片

構(gòu)造完OD,就需要使用路徑規(guī)劃API來(lái)獲取信息。詳細(xì)的url中的請(qǐng)求參數(shù)和返回的信息可以查看官方的開(kāi)發(fā)者文檔。

圖片

利用python寫一個(gè)循環(huán),來(lái)獲取多個(gè)od路徑。主要思路如下:

圖片

這段代碼通過(guò)高德地圖API獲取每一對(duì)起點(diǎn)(Origin)和終點(diǎn)(Destination)之間的駕車路線信息,并處理請(qǐng)求結(jié)果,包括錯(cuò)誤處理。具體步驟如下:

  • 讀取起點(diǎn)和終點(diǎn):從之前生成的O.txt和D.txt文件中讀取所有起點(diǎn)和終點(diǎn)坐標(biāo),組合成OD對(duì),并保存到一個(gè)新的OD.txt文件中。

  • 創(chuàng)建保存目錄:確保json_get目錄存在,用于存放后續(xù)請(qǐng)求的結(jié)果。

  • 構(gòu)建并發(fā)送API請(qǐng)求:遍歷每個(gè)OD對(duì),構(gòu)造包含API密鑰、起點(diǎn)、終點(diǎn)的請(qǐng)求URL,然后使用urllib.request.urlopen發(fā)送請(qǐng)求。用戶需手動(dòng)輸入高德地圖API的密鑰。

  • 處理響應(yīng):

    • 如果請(qǐng)求成功(狀態(tài)碼為1),解析返回的JSON數(shù)據(jù),提取路線信息,并記錄到結(jié)果列表中。

    • 遇到URLError或其他異常時(shí),記錄錯(cuò)誤信息,并將該OD對(duì)的狀態(tài)標(biāo)記為FAILED。

    • 每處理完一對(duì)OD,都會(huì)打印處理進(jìn)度和可能遇到的錯(cuò)誤信息。

  • 保存結(jié)果:將所有請(qǐng)求的結(jié)果(包括成功的路線數(shù)據(jù)和失敗的信息)保存到j(luò)son_get目錄下的path_results.json文件中,采用JSON格式存儲(chǔ),便于后續(xù)分析。

  • 控制請(qǐng)求速度:注釋掉了動(dòng)態(tài)延時(shí)的部分(原本設(shè)計(jì)用于遵守API請(qǐng)求速率限制),但可根據(jù)實(shí)際需求取消注釋并設(shè)置合適的延時(shí)間隔。

然后就是將url返回的信息按照我們的需求提取出來(lái)。

圖片

最后,可以對(duì)結(jié)果進(jìn)行簡(jiǎn)單的可視化:

圖片

(四)圖形化小程序演示

為了方便使用,對(duì)進(jìn)行了整合,寫了一個(gè)圖形界面的小工具。以下對(duì)該工具進(jìn)行一個(gè)簡(jiǎn)單的介紹:

圖片

圖片

圖片

圖片

這是主要界面,一共分為四個(gè)步驟,操作的演示視頻如下:

(五)注意事項(xiàng)說(shuō)明

(1)首先需要準(zhǔn)備邊界范圍,范圍不易過(guò)大,可使用Qgis或Acrgis構(gòu)建一個(gè)shp格式的邊界。因?yàn)楦叩耴ey每天調(diào)用的額度是有限的,只有5000條。

圖片

圖片

(2)每次爬取可獲取當(dāng)前時(shí)刻下實(shí)時(shí)的交通狀態(tài),若需要爬取不同時(shí)刻的交通狀態(tài),需要手動(dòng)進(jìn)行多次爬取操作。

最終結(jié)果分別保存為shp、geojson和csv文件,其中csv文件包含以下道路信息:

圖片

第一列是道路的名稱,第二列是擁堵系數(shù),第三列是交通擁堵?tīng)顟B(tài)。

(六)效果展示

可視化預(yù)覽的最終的效果如下:

圖片

這是工作日早上八點(diǎn),案例片區(qū)的交通狀態(tài)。

然后,我分別爬取了周末和工作日早上七點(diǎn)到晚上七點(diǎn)的交通態(tài)勢(shì),將每張圖片合并成gif格式,如下:

圖片

周末全天擁堵變化

圖片

工作日全天擁堵變化

我們還可以利用csv中的擁堵系數(shù),進(jìn)行全天交通態(tài)勢(shì)變化趨勢(shì)分析。

圖片

圖片

注意:該小工具無(wú)法一次性爬取全天的交通態(tài)勢(shì)變化情況,只能獲取當(dāng)前時(shí)刻下的路網(wǎng)交通態(tài)勢(shì)。

(七)較大范圍測(cè)試

以渝中區(qū)為例:

第一步:通過(guò)邊界范圍構(gòu)造OD對(duì)

圖片
圖片
第二步:獲取json文件
我這里生成40*40=1600對(duì)OD。我大概測(cè)試了一下,調(diào)用1600次,共耗時(shí)7分44秒。產(chǎn)生的json文件約49M。

圖片圖片

圖片
第三步:提取道路信息
提取信息處理較快。僅用5s便處理完49M,共85萬(wàn)行的數(shù)據(jù)。
圖片
第四步:可視化預(yù)覽
圖片
圖片
圖片
我們可將結(jié)果文件放入Qgis或者Arcgis中進(jìn)行進(jìn)一步的處理。
圖片

為了形成良好的正向反饋,激勵(lì)作者創(chuàng)作,喜歡作者25,同時(shí)也會(huì)提供演示的代碼和小工具供讀者進(jìn)行修改和研究。該技術(shù)路線具有一定的局限性,獲取的范圍不易過(guò)大,不能自動(dòng)化連續(xù)性的爬取多個(gè)時(shí)間節(jié)點(diǎn)的數(shù)據(jù),可能無(wú)法完全滿足大家的需求,可以根據(jù)提供的代碼自行完善補(bǔ)充。

感謝閱讀本期內(nèi)容,如果您覺(jué)得有幫助,動(dòng)動(dòng)您的手指頭,【點(diǎn)贊】+【在看】,這是對(duì)我最大的支持和鼓勵(lì),非常感謝?。?!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多