賴建智
1福建省國(guó)土測(cè)繪院,福建 廈門,361000
在經(jīng)濟(jì)社會(huì)高速發(fā)展的今天,人們的生活節(jié)奏越來(lái)越快,時(shí)間、效率成為社會(huì)公眾尤其是上班族普遍關(guān)注的話題。雖然城市交通基礎(chǔ)設(shè)施日漸完善,個(gè)人汽車也越來(lái)越普及,交通擁堵問(wèn)題仍然是制約城市發(fā)展的重大問(wèn)題之一[1]。共享單車是近幾年興起一種既簡(jiǎn)單又方便的出行模式,用戶規(guī)模呈現(xiàn)了爆炸式的增長(zhǎng)態(tài)勢(shì)[2]。共享單車的出現(xiàn)滿足了人們出行“最后一公里”的需求,減少了運(yùn)輸成本,提高了城市的通行效率[3],同時(shí)也宣揚(yáng)了一種低碳出行的生活方式,符合當(dāng)今節(jié)能減排的發(fā)展要求。
然而,由于運(yùn)營(yíng)商粗放式投入、部分公民道德素質(zhì)缺失、政府監(jiān)管機(jī)制不到位等各方面的原因,當(dāng)前共享單車隨意停放的現(xiàn)象較為普遍,不僅影響市容,也從一定程度上妨礙城市交通。因此,有必要通過(guò)測(cè)繪技術(shù)手段,全面摸清停放區(qū)情況,提供精準(zhǔn)停放區(qū)位置坐標(biāo),為后續(xù)設(shè)置電子圍欄、實(shí)施定點(diǎn)停車提供數(shù)據(jù)支撐。本文以廈門市為例介紹共享單車停放區(qū)(下文簡(jiǎn)稱“停放區(qū)”)編碼方法。
為方便公眾使用,停放區(qū)一般設(shè)置在道路兩側(cè)人行道或自行車專用道上,因此,按照道路名稱對(duì)停放區(qū)進(jìn)行編碼符合停放區(qū)的分布情況,也方便進(jìn)行查找和定位。為保證編碼的連貫性,對(duì)道路兩側(cè)的停放區(qū)分別進(jìn)行編碼??傮w思路為:將道路抽象為折線,對(duì)道路兩側(cè)各停放區(qū)查找與其距離最近的道路節(jié)點(diǎn),利用停放區(qū)所匹配的道路節(jié)點(diǎn)的序號(hào)即可確定停放區(qū)的先后順序,然后按照指定的編碼結(jié)構(gòu)進(jìn)行順序編碼。
ArcGIS系列產(chǎn)品在行業(yè)中具有重要的地位,是數(shù)據(jù)建庫(kù)管理的主要平臺(tái)[4],對(duì)于地理信息系統(tǒng)軟件而言,除了需要具有數(shù)據(jù)管理功能外,還要求能夠解進(jìn)行空間分析解決一些復(fù)雜的問(wèn)題[5],ArcGIS在地理信息系統(tǒng)中集空間數(shù)據(jù)模型的建立、編輯處理、分析應(yīng)用于一體[6],方便快捷。本文以ArcGIS空間數(shù)據(jù)庫(kù)為數(shù)據(jù)存儲(chǔ)容器進(jìn)行數(shù)據(jù)分析和處理,利用ArcGIS軟件進(jìn)行相關(guān)的數(shù)據(jù)編輯和分析,實(shí)現(xiàn)對(duì)共享單車停放區(qū)的編碼。
本研究涉及到的基礎(chǔ)數(shù)據(jù)包括共享單車停放區(qū)測(cè)量數(shù)據(jù)和路網(wǎng)數(shù)據(jù)。對(duì)停放區(qū)測(cè)量數(shù)據(jù)進(jìn)行構(gòu)面,存儲(chǔ)于面狀圖層中,每個(gè)停放區(qū)對(duì)應(yīng)一個(gè)面狀實(shí)體。路網(wǎng)數(shù)據(jù)為線狀圖層,包含道路名稱及道路寬度信息,可從已有城市基礎(chǔ)地理信息數(shù)據(jù)庫(kù)中提取,如果為面狀數(shù)據(jù)則需進(jìn)行道路中心線提取。如果共享單車圖層和道路圖層空間參考不一致還需進(jìn)行投影或投影變換,以保證后續(xù)空間分析操作的正確性。
城市道路中,同一條道路可能會(huì)被其他道路、交通附屬設(shè)施或其他地物分隔成多個(gè)路段,表現(xiàn)為道路名稱相同但空間上不連續(xù),如圖1(a)中的斗西路;或由于在矢量化時(shí)分段采集未合并從形成多個(gè)路段,表現(xiàn)為道路名稱相同且線首位端點(diǎn)相連,如圖1(a)中的廈禾路。為了保證后續(xù)處理中停放區(qū)沿道路方向編碼的關(guān)聯(lián)性和唯一性,需對(duì)相同的道路名進(jìn)行合并。利用ArcGIS中的融合工具(Dissolve)將同一道路名的所有路段合并為單個(gè)空間對(duì)象,圖1(b)中視圖區(qū)域中,廈禾路3個(gè)路段融合為一條連續(xù)的道路線;斗西路2個(gè)路段融合為一條多部件(multipart)道路線,兩部分共用同一個(gè)ID為一個(gè)整體。
圖1 多路段道路融合Fig.1 Road of Multi-part Dissolve
周邊查找是一項(xiàng)地理空間分析功能,用于從大范圍的海量地理要素中檢索出局部的地理要素[7],其中,緩沖區(qū)查找是應(yīng)用最普遍的一種周邊分析方法,用于在指定的距離內(nèi)查找特定對(duì)象[8],本文采用緩沖區(qū)分析方法確定停放區(qū)所屬最近的道路。對(duì)于線對(duì)象,ArcGIS中的緩沖區(qū)工具(Buffer)可以生成兩側(cè)或者任意一側(cè)的緩沖區(qū),本研究擬對(duì)道路兩側(cè)的停放區(qū)分開(kāi)編碼,故分別生成兩側(cè)的緩沖區(qū)。由于不同道路寬度各不相同,同一條道路不同路段的寬度也不完全一致,緩沖區(qū)構(gòu)建時(shí)以融合前的道路線為中心線,以“路段寬度×1/2+外擴(kuò)距離”為動(dòng)態(tài)緩沖寬度分別生成道路中心線兩側(cè)的緩沖區(qū),其中,外擴(kuò)距離采用20 m固定值。將道路線矢量化前進(jìn)方向左側(cè)的緩沖區(qū)標(biāo)記為road_left,右側(cè)的緩沖區(qū)標(biāo)記為road_right。道路兩側(cè)緩沖區(qū)生成后,對(duì)相同道路名同一側(cè)的緩沖區(qū)進(jìn)行融合,得到的道路兩側(cè)緩沖區(qū)效果如圖2所示。從圖2中可以看出,大部分停放區(qū)已落入緩沖區(qū)范圍中。
圖2 道路緩沖區(qū)Fig.2 Road Buffers
疊加分析方法是GIS中常用的空間信息提取方法[9,10],利用ArcGIS中的疊加分析工具(如相交、空間連接等)可提取停放區(qū)所在緩沖區(qū)對(duì)應(yīng)的道路名稱及位于道路的哪一側(cè),若停放區(qū)同時(shí)落在多條道路的緩沖區(qū)中則提取其中一條道路名,如按道路等級(jí)提取等級(jí)最高的,或者以按距離提取距離最近的,本文采用后一種方法??臻g疊加分析后的部分停放區(qū)屬性信息如表1所示。
表1 道路‐停放區(qū)緩沖區(qū)分析結(jié)果Tab.1 Road-Parking Area Buffer Analysis Result
本研究對(duì)道路兩側(cè)的停放區(qū)分別進(jìn)行編碼:左側(cè)停放區(qū)的編碼方式為“道路名稱-L-停放區(qū)序號(hào)”,右側(cè)停放區(qū)的編碼方式為“道路名稱-R-停放區(qū)序號(hào)”,同一條道路兩側(cè)的停放區(qū)序號(hào)均從1開(kāi)始,沿道路方向遞增。下面以道路左側(cè)停放區(qū)編碼過(guò)程為例,借助ArcObject編程接口,設(shè)計(jì)編碼算法如下:
1)從§1.4中得到的停放區(qū)屬性表中檢索所有道路名稱,去重后存儲(chǔ)在道路名稱列表中。
2)遍歷道路名稱列表,每次取出一條道路,執(zhí)行后續(xù)步驟3)~步驟7)的處理過(guò)程。
3)根據(jù)道路名從融合的道路線圖層中提取當(dāng)前道路的線幾何對(duì)象(Polyline),解析道路線上各個(gè)節(jié)點(diǎn)(Node)序號(hào)及對(duì)應(yīng)的坐標(biāo)并存儲(chǔ)在節(jié)點(diǎn)集合中。
4)從停放區(qū)圖層中讀取road_left為當(dāng)前道路名的所有停放區(qū),計(jì)算各停放區(qū)質(zhì)心坐標(biāo),將各停放區(qū)ID及質(zhì)心坐標(biāo)存儲(chǔ)在停放區(qū)集合中。
5)遍歷步驟4)生成的停放區(qū)集合中的各個(gè)停放區(qū),計(jì)算與步驟3)生成的道路節(jié)點(diǎn)集合中各個(gè)節(jié)點(diǎn)的距離,取距離最近道路節(jié)點(diǎn)的序號(hào),與停放區(qū)ID構(gòu)成“停放區(qū)ID-最近節(jié)點(diǎn)序號(hào)”關(guān)系序列。
6)對(duì)“停放區(qū)ID-最近節(jié)點(diǎn)序號(hào)”關(guān)系序列按最近節(jié)點(diǎn)序號(hào)進(jìn)行排序,由于空間數(shù)據(jù)庫(kù)中線對(duì)象的節(jié)點(diǎn)是是沿著線繪制方向存儲(chǔ)的,利用最近節(jié)點(diǎn)序號(hào)即可確定各停放區(qū)的先后順序。
7)對(duì)排序后的停放區(qū)按“道路名稱-L-停放區(qū)序號(hào)”方式進(jìn)行編碼,其中,停放區(qū)序號(hào)從1開(kāi)始,按停放區(qū)先后順序依次遞增,編碼結(jié)果存入停放區(qū)屬性中。
8)結(jié)束當(dāng)前道路停放區(qū)的編碼,轉(zhuǎn)到下一條道路,直至所有道路的停放區(qū)編碼完畢。
道路右側(cè)停放區(qū)編碼過(guò)程上述道路左側(cè)停放區(qū)編碼過(guò)程步驟相同,此處不再贅述。
ArcObject是整個(gè)ArcGIS的核心與基礎(chǔ),利用它可以避開(kāi)底層開(kāi)發(fā)的復(fù)雜過(guò)程,快速搭建GIS的功能模塊[11]。在Visual Studio 2012環(huán)境下,利用以C#語(yǔ)言調(diào)用ArcObject相關(guān)接口,對(duì)§1.5中的算法進(jìn)行編程實(shí)現(xiàn),編碼工具界面如圖3所示。
圖3 編碼工具界面Fig.3 Coding Tool Interface
編碼結(jié)果如圖4所示,從圖4(a)中可以看出,道路兩側(cè)的停放區(qū)已分開(kāi)編碼,但停放區(qū)的序號(hào)并未全部沿道路線方向遞增,而是存在局部交錯(cuò)。主要是由于道路線節(jié)點(diǎn)間距過(guò)大,導(dǎo)致停放區(qū)匹配最近道路節(jié)點(diǎn)時(shí)偏離較遠(yuǎn),以枋湖路右側(cè)的停放區(qū)為例,R-23停放區(qū)和R-22停放區(qū)最近的道路節(jié)點(diǎn)都為22號(hào)道路線節(jié)點(diǎn),因此在算法步驟6)中對(duì)“停放區(qū)ID-最近節(jié)點(diǎn)序號(hào)”序列按最近節(jié)點(diǎn)序號(hào)排序時(shí),無(wú)法確定兩個(gè)點(diǎn)的先后關(guān)系,最終按停放區(qū)在數(shù)據(jù)庫(kù)中檢索的順序確定先后順序,導(dǎo)致了編碼結(jié)果不符合預(yù)期效果。因此,在執(zhí)行停放區(qū)排序過(guò)程前,先利用ArcGIS中的增密工具(Densify)對(duì)道路線的節(jié)點(diǎn)進(jìn)行內(nèi)插,可有效避免停放區(qū)匹配錯(cuò)誤,如圖4所示。從圖4(b)中可以看到編碼局部交錯(cuò)的問(wèn)題已經(jīng)消除,證明該方法是有效可行的。
圖4 改進(jìn)前后的停放區(qū)編碼效果圖Fig.4 Coding Result After Between Before Improvement
本文探索了一種共享單車停放區(qū)沿道路方向自動(dòng)編碼的方法,借助ArcGIS地理處理工具及ArcObject編程接口對(duì)算法進(jìn)行了實(shí)現(xiàn)。實(shí)驗(yàn)結(jié)果表明,利用該方法可以對(duì)道路兩側(cè)的共享單車停放區(qū)分別沿道路方向自動(dòng)編碼。與人工編碼方式相比本方法具有自動(dòng)化程度高、編碼連續(xù)性好、不重不漏等優(yōu)點(diǎn),同時(shí)便于查詢和檢索。