張清華
(湖北省城市規(guī)劃設計研究院有限責任公司, 武漢 430071)
車輛出行路徑信息含車輛出行起點、途徑的路段及節(jié)點、出行終點等,結合出行時間信息,還原車輛出行路徑,能獲取豐富的交通時間序列信息. 車輛路徑數(shù)據(jù)在現(xiàn)實情況下較難提取,傳統(tǒng)調查手段諸如人工記錄車輛牌照法等費時費力,抽樣率低. 車輛GPS數(shù)據(jù)可分析車輛出行,可生成車輛出行路徑,但因私人車輛GPS數(shù)據(jù)涉及隱私,不易獲取及使用. 手機定位數(shù)據(jù)采樣率高,但獲取成本高,對出行方式及出行路徑的判定為間接推算,實際應用壁壘較高.
目前,以智能卡口、路況監(jiān)控等功能為主的交通卡口視頻監(jiān)控設施在國內城市普遍設置,每天生成海量車牌照信息. 除了利用車牌照數(shù)據(jù)進行車速測量、違章處罰[1]等外,融合車牌、車型、位置、時間等的車牌照數(shù)據(jù),還可獲取車輛出行OD[2]、行程時間和延誤[3]等傳統(tǒng)道路交通指標,甚至可推導傳統(tǒng)交通調查手段較難以全樣獲取的毗鄰區(qū)域交通量[4]、出行軌跡[5]、通勤交通[6]等指標. 本文基于OSM、Python、VBA等搭建了一種簡易的車輛識別數(shù)據(jù)分析方法,利用仙桃市城區(qū)數(shù)據(jù),獲取了車輛出行路徑,為后續(xù)識別車輛OD、路段流量統(tǒng)計、路段旅行時間分析等提供技術支持.
基于機動車出行被連續(xù)檢測的條件可認為:車輛在1次完整的出行中,下一卡口識別點往往是上一卡口識別點的下游節(jié)點,且在當次出行中的最后一個卡口識別點為當次出行的終點.
如圖1所示,基于車輛連續(xù)出行的前提,結合仙桃市卡口車牌識別數(shù)據(jù)中存在多次出行記錄的車輛記錄,可將車輛出行行為概括為2種形式:
1)單次出行無中斷:在一次出行中,駕駛人在設置卡口的節(jié)點Ai被識別記錄,Ai即為本次機動車出行的起點O1,經(jīng)連續(xù)行駛,最終在Dk被卡口結束本次出行,Dk即為本次機動車出行的終點D1.
2)多次出行:通常情況下,車輛出行鏈包含了車輛在1 d之內的所有出行,即在多個OD對之間發(fā)生了出行行為. 在圖示2次出行中,駕駛人在設置卡口的節(jié)點Ai被識別記錄,Ai即為本次機動車出行的起點O1,經(jīng)連續(xù)行駛,最終在Cj卡口結束第1次本次出行,Cj即為本次機動車出行的終點D1;經(jīng)過一段較長時間的停頓或中斷,Cj節(jié)點再次檢測到同一車輛的記錄,此處的Cj節(jié)點即為下一次出行的起點O2,經(jīng)連續(xù)行駛,最終在Dk被卡口結束出行,Dk即為下一次機動車出行的終點D2.
圖1 典型車輛出行行為(左:單次出行,右:多次出行)
高速公路采用加密路段視頻卡口檢測設備,以密度換準確率,解決車輛路徑識別計算難題,雖城市路網(wǎng)及居民機動車出行條件較高速公路車輛出行更為復雜,且卡口設備布設存在一定的稀疏性,但基于機動車連續(xù)性出行及出行時間較短的特性,仍能識別駕駛人出行路徑,具體需解決卡口間路徑推算及出行鏈打斷判斷2個難點.
城市卡口主要沿城區(qū)出入口、干路節(jié)點等布設,在實際布設中未考慮路徑推算需求. 在不同卡口間距不等前提下,需考慮路徑選擇模型,以便對相鄰卡口間車輛行駛路徑進行還原. 車輛出行鏈包含了車輛在1 d之內的所有出行,即在多個OD對之間發(fā)生了出行行為. 將1輛車輛被卡口識別記錄的數(shù)據(jù)按時間排序后,可得到其全天的出行記錄. 因大部分車輛每天的出行鏈都包括多次出行,即存在多個OD對,為此需要對車輛出行鏈進行劃分.
王蓓[4]僅處理卡口間序列,建立卡口上下游子序列,不考慮卡口間具體路徑選擇,再建立車輛出行距離與出行時距判斷條件用以識別出行鏈閾值. 王龍飛[5]利用棧式存儲結構結合圖論中深度優(yōu)先搜索算法,獲得卡口間1次可達路徑,而后,采用有效行駛速度區(qū)間[15 km/h,60 km/h]計算旅行時間閾值. 龔越[6]采用最短路徑進行路徑識別,之后同樣采用卡口間時間閾值條件識別出行鏈.
路徑選擇涉及圖論尋優(yōu)算法,對普通規(guī)劃設計人員能力要求較高,因此最短路徑應用最廣,但需具備相應的編程能力. 同時,卡口間旅行時間既受到平均車速影響,又需考慮中途停車、加油、事故等因素. 此外,卡口間距離越短,其旅行時間閾值相應越小,單一選取車速或固定的時間閾值均有一定缺陷.
基于既有研究提出了一種實用的卡口車輛識別數(shù)據(jù)處理、車輛路徑及出行鏈推算的方法,見圖2.
圖2 技術流程圖
1)對原始車輛牌照數(shù)據(jù)進行預處理后,獲得所有車輛按時間進行排序的車輛基礎序列記錄表.
2)將卡口信息表投影至OSM地圖,獲取卡口間實際距離矩陣,并經(jīng)計算轉換出卡口間旅行時間閾值矩陣.
3)基于車輛多次出行的連續(xù)性條件,采用旅行時間閥值條件匹配算法將車輛全部卡口識別數(shù)據(jù)打斷,獲取出行鏈表.
4)利用獲得的出行鏈表,開展車牌識別數(shù)據(jù)應用分析.
1)卡口間路徑及旅行時間矩陣
卡口間路徑計算類似于導航的簡單應用,要實現(xiàn)這一功能,需要構建道路網(wǎng)絡,能計算道路長度、求取最短路徑和規(guī)劃路線等,通常依賴地圖公司提供的LBS接口,而此類接口對調取次數(shù)有限制.
networkx是一款用于復雜網(wǎng)絡分析Python第3方包, OSMnx依賴networkx等開發(fā)分析OSM路網(wǎng)的另一款Python第3方包,OSMnx配合networkx,可實現(xiàn)調取現(xiàn)狀機動車路網(wǎng)、卡口投影、最短路徑計算等功能,使交通規(guī)劃設計人員專注數(shù)據(jù)分析本身.
結合Song[8]的研究,基于OSM開源路網(wǎng),利用Python第3方庫既可方便的調取卡口間最短路徑,亦可獲得卡口間路網(wǎng)距離矩陣,計算思路如下:
①在Python3.x中加載OSMnx,并下載指定區(qū)域機動車路網(wǎng),讀取卡口信息表,并投影至OSM路網(wǎng)中最近的節(jié)點.
②加載networkx,基于OSM機動車路網(wǎng),批量計算指定節(jié)點間最短路徑長度(亦可獲得卡口間最短路徑信息).
③解碼指定節(jié)點距離矩陣獲取卡口間路網(wǎng)距離矩陣(對異常數(shù)據(jù)對,用歐式距離乘計算系數(shù)補齊).
2)卡口間旅行時間閾值矩陣
經(jīng)預處理后的卡口車牌識別數(shù)據(jù)序列中,同一車牌全部的記錄均按時間排序,僅需將后一記錄與前次記錄的時刻相減,即可獲得同一車輛通過前后兩卡口的旅行時間. 對存在多次出行的車輛,一個可行的出行鏈打斷方式是設定旅行時間閾值,當車輛通過卡口間的旅行時間超過閾值,即對出行鏈進行打斷.
獲取了卡口間路網(wǎng)距離矩陣,下一步需將其轉換為旅行時間閾值矩陣. 參考前述研究,卡口間旅行時間既受到平均車速影響,又需考慮中途停車、加油、事故等因素. 此外,卡口間距離越短,其旅行時間閾值相應越小,單一選取車速或固定的時間閾值均有一定缺陷. 為此,本文提出一種綜合考慮最小車速、距離及中途延誤等因素的卡口間旅行時間閾值計算算法,設定最小行程車速10 km/h,計算獲得最小車速行程時間. 而后,引入里程延誤,包括路口延誤及路段延誤,其中路段延誤設定為每1 km里程行程時間增加180 s,路口延誤取固定值500 s,最終綜合最小車速行程時間、路口延誤及路段延誤等因素設計計算公式,且設定最大旅行時間閾值為2 100 s.
T=500+L180+3 600L/V;T≤2 100
(1)
式中,T為旅行時間閾值/s. 當計算數(shù)值超過2 100 s(35 min)時,旅行時間閾值取2 100 s,否則,取計算值;L為卡口間路網(wǎng)實際距離/km;V為車輛最小行程車速/km·h-1,本文設定為10 km/h.
3)生成車輛出行鏈
車輛出行鏈的打斷對于分析車輛OD及研究路網(wǎng)上、下游流量鏈路來源等具有重要的作用,確定同一車輛上、下2個卡口記錄間有效的旅行時間閾值,是出行鏈打斷的關鍵. 基礎序列記錄表中包含車輛通過卡口的時刻,同一車輛上、下2個卡口過車數(shù)據(jù)的差值為實際記錄的旅行時間t,再利用本文提出的卡口間旅行時間閾值計算出相鄰卡口間合理的旅行時間閾值T,并比較t與T值,即可完成車輛出行鏈的打斷. 圖3為詳細流程圖,具體算法如下:
Setp1:導入基礎序列記錄表,讀取第1條記錄,并標記i=1;
Setp2:記錄讀取車牌=A車輛總記錄數(shù)M,讀取第k=1條出行記錄,其中M在前述基礎序列出行表中已進行了計算標記,此處僅需讀取即可;
Setp3:讀取車牌=A車輛下一次出行記錄;
Setp4:判斷i+k-1≤M-1,遍歷車牌=A車輛記錄,當讀取的記錄個數(shù)不到最后一行時,進入步驟5,否則表示車牌=A車輛記錄全部計算完全,i=i+M,M=0,返回讀取下一車牌記錄;
Setp5:計算當前車輛當前卡口出行時刻與同一車輛下一相鄰出行時刻的旅行時間差值t,調取當前卡口與下一相鄰卡口間綜合考慮最小車速、距離及中途延誤等因素后的卡口間旅行時間閾值T;
Setp6:比較t與T,當t Setp7:判定是否至倒數(shù)第2條記錄,不滿足轉至Setp3,滿足則存儲車輛出行信息,并結束程序. 圖3 車輛出行鏈劃分流程圖 本研究原始數(shù)據(jù)包括2個重要的數(shù)據(jù)表:過車信息數(shù)據(jù)表,由仙桃市交警支隊提供(2019-03-02全天記錄)和卡口信息表. 過車信息數(shù)據(jù)表記錄了各車輛被城區(qū)卡口識別的詳細信息,由車牌號碼、路口名稱、車道、方向、車牌類型、時刻、車速、車牌顏色等多達14個字段組成,核心字段包括車牌號碼、路口名稱、方向、時刻等. 卡口信息表記錄各卡口類別、卡口名稱及地理位置坐標信息,核心字段包括各卡口點位名稱、經(jīng)度、緯度等. 卡口點位信息表同過車信息數(shù)據(jù)表經(jīng)字段匹配,過車信息數(shù)據(jù)成為具有時刻信息及地理位置信息的空間數(shù)據(jù),這對后續(xù)計算車輛出行鏈尤為關鍵. 仙桃市主城區(qū)卡口點位分布情況見圖4. 圖4 卡口點位分布圖 受設備故障、識別精度誤差、環(huán)境干擾等因素影響,卡口過車數(shù)據(jù)需進行預處理,提高基礎數(shù)據(jù)質量,具體包括: 1)未識別數(shù)據(jù)清洗 原始過車信息表內車牌號碼字段存在一定丟失情形,無法進行出行鏈匹配,需刪除此類無效數(shù)據(jù). 2)重復數(shù)據(jù)清洗 道路擁堵及其他未知因素可造成同一車輛在短時間內的重復記錄,也需進行清理: ①按照車牌號碼、時刻對去除未識別數(shù)據(jù)后的過車信息表進行排序; ②對存在2條以上記錄的同一車輛,計算每一條數(shù)據(jù)與前一條數(shù)據(jù)的時間差; ③借鑒王握[9]研究,對時間差<300 s,且車牌號碼、路口名稱、方向等信息相同的記錄,予以去重. 3)車輛信息數(shù)據(jù)重排序 匯集各車輛當天全部過車信息數(shù)據(jù),統(tǒng)計其總出現(xiàn)次數(shù),按時間排序后標記次序,并刪去僅包含一次記錄的數(shù)據(jù),保留包含2次及2次以上記錄的數(shù)據(jù),生成如表1所示車輛基礎序列記錄表,作為后續(xù)車輛出行鏈分析的基礎數(shù)據(jù)表. 表1 車輛基礎序列記錄表 采用2.2節(jié)方法,首先調取python第3庫OSMnx及networkx,批量調用single_source_dijkstra_path_length函數(shù)獲得卡口間路網(wǎng)距離矩陣,表2為以行列式形式展示的路網(wǎng)距離矩陣. 表2 路網(wǎng)距離矩陣行列式 實例中獲取的卡口樣本數(shù)量少且均位于城市關鍵出入口及主要干路,卡口節(jié)點均可方便匹配OSM路網(wǎng)并獲取任意兩卡口間路網(wǎng)距離及最短路徑. 對其他城市而言,考慮路網(wǎng)節(jié)點差異或數(shù)據(jù)集較大的情形,可能存在部分異常的距離值(過大或過小),需要再做一些處理來對這些異常值進行處理. 本文計算了仙桃城區(qū)卡口間實際路網(wǎng)距離和直線距離,并統(tǒng)計路網(wǎng)距離與直線距離比值. 見圖5,當路網(wǎng)距離在2 km以內時,路網(wǎng)距離與直線距離比值波動最大,超過2 km以后,比值系數(shù)為1.10~1.42,因此,對于可能存在的異常數(shù)據(jù),推薦采用歐式距離乘1.4(平均直線系數(shù))補齊異常距離數(shù)據(jù). 為將路網(wǎng)距離矩陣轉換為旅行時間閾值矩陣,提出一種綜合考慮最小車速、距離及中途延誤等因素的卡口間旅行時間閾值計算算法,結合出行鏈打斷算法,利用VBA編程,即可獲得車輛出行鏈及車輛出行路徑信息. 表3截取了部分計算數(shù)據(jù),其中鄂AM****車牌全天被卡口識別9次,利用出行鏈打斷算法獲得4條出行鏈,對應4次出行,各次出行的完整出行節(jié)點對及上下游節(jié)點對均被提取出來,并對下游節(jié)點的異常時刻進行了修正. 車輛出行鏈表作為基礎信息表,通過算法處理,可進一步獲取車輛出行OD、路段及節(jié)點流量、路段旅行時間等時空數(shù)據(jù),圖6即為提取車輛全部出行鏈并擴樣后的卡口間OD分布圖. 圖5 卡口間路網(wǎng)距離與路網(wǎng)直線系數(shù)分布 表3 車輛出行鏈表 卡口車牌識別數(shù)據(jù)在推算車輛出行路徑方面具有其他數(shù)據(jù)無法比擬的優(yōu)勢,但其中涉及空間數(shù)據(jù)匹配及圖論中的路徑計算算法等,存在一定的技術難度. 采用python、VBA聯(lián)合編程手段,首先調取python第3庫OSMnx及networkx,采用屬性查詢方式直接獲得卡口間路網(wǎng)距離矩陣并計算卡口間旅行時間閾值矩陣,簡單直觀且無調取次數(shù)限制. 其次,利用VBA編寫腳本,采用本文提出的卡口間旅行時間閾值計算及出行鏈打斷算法,快速識別車輛出行路徑. 相較于傳統(tǒng)的通過人工抽樣調查推算車輛OD或構建交通模型模擬車輛路徑而言,提供一種更加經(jīng)濟、快速、簡便的車輛路徑識別方法. 圖6 卡口間OD分布3 實例
3.1 基礎數(shù)據(jù)
3.2 數(shù)據(jù)預處理
3.3 卡口間距離及旅行時間閾值
4 總結