劉學(xué)民
在地理信息數(shù)據(jù)中,道路網(wǎng)絡(luò)是構(gòu)成幾何數(shù)據(jù)和應(yīng)用分析的重要組成部分,道路網(wǎng)的描述,是用GIS 方法對(duì)自然界中人文影響和經(jīng)濟(jì)狀況的表現(xiàn)形式。對(duì)于道路網(wǎng)數(shù)據(jù)采集,往往是采用人工采集和計(jì)算機(jī)輔助自動(dòng)化采集兩種方法。在許多GIS 平臺(tái),道路面提取中心線的原理有下面兩類方法:(1)道路面按Delaunay 方法構(gòu)造三角網(wǎng),此方法在對(duì)路端喇叭形處生成的中心線表現(xiàn)為波浪折線和不正確的分叉,點(diǎn)數(shù)也較多,與理想形狀的邊線點(diǎn)幾何形似差異較大。(2)提取道路的面填充,生成柵格位圖。這種方法除了數(shù)據(jù)格式轉(zhuǎn)換煩瑣,還有矢量數(shù)據(jù)屬性的丟失。本文將針對(duì)以上情況,對(duì)路面形狀進(jìn)行邊線調(diào)整、路端處理后,依據(jù)科學(xué)的計(jì)算判別,在已有軟件中二次開發(fā)自己的工具實(shí)現(xiàn)道路中心線自動(dòng)提取的功能。
對(duì)道路面的邊線點(diǎn),按某種算法找到道路的兩端封口線,從一封口中點(diǎn)起,沿道路一側(cè)點(diǎn)順序,根據(jù)道路邊線點(diǎn)的相互關(guān)系,逐點(diǎn)查找順序點(diǎn)的路邊線另一側(cè)對(duì)稱點(diǎn),將該點(diǎn)與對(duì)稱點(diǎn)連線并取中點(diǎn)作為待求中心線新加點(diǎn)。當(dāng)此點(diǎn)不存在時(shí),求該點(diǎn)內(nèi)角平分線與道路另一側(cè)最近的實(shí)交點(diǎn),將該點(diǎn)與求得的交點(diǎn)連線,取中點(diǎn)作為待求中心線新加點(diǎn),直至道路另一封口中點(diǎn)為止。需要對(duì)道路面進(jìn)行結(jié)構(gòu)分析,找出其點(diǎn)坐標(biāo)與這些特征的關(guān)系即相關(guān)性。

圖1 路面夾角與邊線關(guān)系
在確定是否封口前,首先求出道路面的所有點(diǎn)對(duì)應(yīng)的內(nèi)角值,道路面經(jīng)作業(yè)人員整理后,路的端口線段兩頂點(diǎn)夾角基本對(duì)稱,或接近成直角(如圖A)或呈張口喇叭狀(如圖B),對(duì)于收口形的(如圖C)基本沒有。在道路面其他非端口處的各線段,當(dāng)路正常延伸時(shí),都是遠(yuǎn)大于90 度的拐角(如圖D),當(dāng)有近90或小于90 度的角時(shí),該段線如果不是封口,則另一點(diǎn)的內(nèi)角一定與本點(diǎn)內(nèi)角嚴(yán)重不相近,此時(shí)該點(diǎn)是道路的拐彎處(如圖E),相反,如果該線段兩端的內(nèi)角出現(xiàn)了接近90 度及以下并且兩角接近,那么該段線一定是封口。對(duì)于U 形路(如圖F),假如U 形底處是一段直線段,此時(shí)該處內(nèi)側(cè)和外側(cè)兩線段的頂角也是角對(duì)稱的,在U 形內(nèi)側(cè)邊線兩頂角,接近270 度,自然不會(huì)判斷為封口,在U 形外側(cè)邊線兩頂角,都接近90 度,但是,此線段的長(zhǎng)度會(huì)遠(yuǎn)大于道路的平均寬度,至少在兩倍以上,否則無法構(gòu)成U 形路面,按接近90 對(duì)稱角再加上此邊的邊長(zhǎng)與平均路寬的對(duì)比條件,可以進(jìn)行排除。經(jīng)作業(yè)員整理后的一條道路面,原則上只有兩端兩個(gè)封口,這使得此法識(shí)別封口正確性達(dá)到了百分之百。
對(duì)于路面交叉沒有斷開的情況,路面可能存在多個(gè)十字路口或丁字路口,為了按2.1 中確定單一路面封口兩端,必須對(duì)路面進(jìn)行分割,分割可以在工具中實(shí)現(xiàn),自動(dòng)分割方法如下:
(1)寫工具時(shí),取消只找到兩個(gè)封口的限制,對(duì)發(fā)現(xiàn)的可能封口全部偵測(cè)并記錄。

圖2 交叉路口和丁字路口未斷開情況示意
(2)交叉口判別,對(duì)有三個(gè)及其以上偵測(cè)封口的路面按每個(gè)偵測(cè)的封口分別沿其兩側(cè)邊線逐點(diǎn)延長(zhǎng)尋找,各自搜索一對(duì)兩內(nèi)角都近似270 并且連線距離與平均路寬接近的點(diǎn),此兩點(diǎn)即為交叉口處,將此兩點(diǎn)作為該路面的一個(gè)結(jié)束封口,然后與出發(fā)的封口之間的點(diǎn)劃分為一段路面。距離比較時(shí),一定是兩側(cè)分別找到的270 度拐點(diǎn)之間,如圖中丁字路口中,從A 封口上邊線搜到2 號(hào)點(diǎn)與沿下邊線搜到的1 號(hào)點(diǎn)可作為交叉口,若從C 封口開始得一樣結(jié)果。若從B 封口也可搜到1 點(diǎn)和2 點(diǎn)。對(duì)于圖中的十字路口,從偵測(cè)到的四個(gè)封口任意一個(gè)開始,都會(huì)搜索到符合該條件的 3 點(diǎn)和 5 點(diǎn)、5 點(diǎn)和 6 點(diǎn)、6 點(diǎn)和 4 點(diǎn),4點(diǎn)和3 點(diǎn)其中一個(gè),逐次分割路口。
(3)對(duì)某路面上新劃分出的路段面從原面上分割下來。如圖中丁字路口,沿A 封口找到1、2 號(hào)點(diǎn)后,分割出上面的橫向路,同時(shí)還有下面的豎條路段。對(duì)于十字路口,則需要分割兩次。
(4)在分割剩余的面上繼續(xù)執(zhí)行交叉口判別、分割操作,直到所剩封口數(shù)為不多于2 個(gè)時(shí)為止。
當(dāng)路封口確定后,加在兩封口之間的各點(diǎn),構(gòu)成了道路的兩條邊線。在這兩條邊線中,有一條是包含起止點(diǎn)即面的閉合點(diǎn),另一側(cè)不包含此點(diǎn),而是順序點(diǎn)號(hào)連續(xù)的系列線段。為了提取中心線時(shí)從一封口向另一封口連續(xù)進(jìn)行,需要找到該點(diǎn)序連續(xù)的邊線。如果對(duì)道路面從開始到閉合將各點(diǎn)依次編號(hào),這些編號(hào)值有下面特征:利用道路兩封口的端點(diǎn)編號(hào)計(jì)算,最大號(hào)與最小號(hào)之間包含的線段包含閉合點(diǎn),中間點(diǎn)號(hào)不是連續(xù)的,而另一側(cè)中間點(diǎn)號(hào)是連續(xù)的。本方法中心線搜索推進(jìn)按點(diǎn)號(hào)連續(xù)一側(cè)執(zhí)行,同時(shí),還要確定對(duì)面邊的點(diǎn)序,在閉合點(diǎn)小號(hào)一側(cè),點(diǎn)號(hào)從大到小,閉合點(diǎn)大號(hào)一側(cè),是從小到大。
在正常生產(chǎn)中,經(jīng)作業(yè)員對(duì)道路調(diào)整后,同一路段的寬度是基本對(duì)稱和均勻的,對(duì)道路面內(nèi)角180±10 度即平角的點(diǎn)在角分線方向求取內(nèi)割線的長(zhǎng)度為當(dāng)前點(diǎn)的路寬。確定該點(diǎn)路寬時(shí),應(yīng)排除該割線與封口線相交的情形。該條路所有符合條件的路寬值取平均值,可作為道路的平均寬度。
將近似垂直于中心線的割于道路兩邊線之間的線段稱為弦線,弦線中點(diǎn)可作為求道路中心線的依據(jù)。確定最佳弦線是求得最佳道路中心線的中心思想。道路面經(jīng)人工調(diào)整后,道路兩側(cè)邊線往往具有明顯的對(duì)稱特征,其情況如圖3 中作為對(duì)應(yīng)的點(diǎn)應(yīng)同時(shí)滿足以下角度和距離條件。

圖3 道路對(duì)稱點(diǎn)示意
(1)角度相關(guān):(1)對(duì)稱點(diǎn)處的內(nèi)角與180 差值絕對(duì)值近似相等,且兩個(gè)內(nèi)角和接近 360 度;圖中的 D 與 D’、E 與 E’、F 與F’、G 與 G’等處。(2)兩個(gè)角均大于 180 度,此時(shí)是喇叭拐彎處;圖中的 A 與 A’、B 與 B’、C 與 C’。
(2)距離相關(guān):道路中兩對(duì)稱點(diǎn)距前一個(gè)弦線中心點(diǎn)的距離應(yīng)近似相等如圖中的D 和D’到3 點(diǎn)的距離近似相等。設(shè)定一個(gè)范圍值,該值大小與構(gòu)成對(duì)稱點(diǎn)的對(duì)稱程度相關(guān),取決于人的作業(yè)特點(diǎn);與道路寬度沒有直接比例關(guān)系,但路寬度大時(shí)也應(yīng)略大。本例取0.2 倍路寬,道路較寬時(shí),比例數(shù)可適當(dāng)減小。
以上滿足條件的點(diǎn),確定為對(duì)稱點(diǎn)。當(dāng)對(duì)面點(diǎn)細(xì)密時(shí),一個(gè)本側(cè)點(diǎn)可能會(huì)連續(xù)找到幾個(gè)對(duì)面點(diǎn)都滿足對(duì)稱條件,此時(shí)放棄尋找對(duì)稱點(diǎn),采用角平分線法確定中心線點(diǎn)。對(duì)于找到的對(duì)面對(duì)稱點(diǎn),記錄其已成為對(duì)稱點(diǎn)的狀態(tài)并記錄兩點(diǎn)連線為弦線,在后續(xù)查找時(shí),搜索對(duì)稱點(diǎn)時(shí),應(yīng)在前面所使用過的點(diǎn)開始向后查找,所得的新對(duì)稱點(diǎn)間連線與前面使用的弦線均無除兩端外其他實(shí)交點(diǎn),防止中心線回折和交叉。當(dāng)順序點(diǎn)沒有找到對(duì)稱點(diǎn)時(shí),使用該順序點(diǎn)的內(nèi)角平分線,求與另一側(cè)的交點(diǎn)并以該交點(diǎn)與本點(diǎn)的連線作為弦線。利用對(duì)稱點(diǎn)作為提取中心線,可以最大限度地保持中心線與原道路的形狀相似。
本方法通過實(shí)際運(yùn)行,得到的中心線正確,速度快。本方法克服了一些軟件提取道路中心線的波浪小折線、分叉、點(diǎn)數(shù)大量冗余以及運(yùn)算復(fù)雜的弊端,所生成的中心線與原邊線形狀完美一致。在編輯軟件中使用,能保證道路屬性內(nèi)容保留完整,直接傳遞。由于計(jì)算方法簡(jiǎn)單,運(yùn)算速度也較快,適用于各種語言編寫工具。