柳春生,王科
(1.廣州市城市規(guī)劃勘測設(shè)計研究院,廣東 廣州 510060; 2.武漢大學遙感信息工程學院,湖北 武漢 430079)
隨著我國油氣工業(yè)的快速發(fā)展,油氣管道的建設(shè)速度日益加快。天然氣管道運輸企業(yè)主營業(yè)務(wù)是天然氣的管道運輸,輸氣、聯(lián)運的成本一直是天然氣輸送業(yè)務(wù)的最關(guān)鍵成本[1]。因此合理確定配送路線并制定最優(yōu)管網(wǎng)路徑,能節(jié)約建設(shè)成本、運輸時間、減少運輸費用,提高天然氣運輸效率。
目前,GIS技術(shù)應(yīng)用于最優(yōu)路徑分析成為近幾年來研究的熱點和發(fā)展趨勢。某些管理部門以C#為開發(fā)語言,基于ArcEngine技術(shù)平臺,結(jié)合Dijkstra算法開發(fā)專用的最優(yōu)路徑選取分析軟件。最短路徑算法主要分靜態(tài)最短路徑算法和動態(tài)最短路徑算法。靜態(tài)最短路徑主要有Dijkstra算法、Floyd算法[2]。動態(tài)最短路徑典型的算法有D*算法。荷蘭計算機專家E.W.Dijkstra在1959年提出了具有深遠影響的Dijkstra最短路徑算法,繼Dijkstra之后涌現(xiàn)出一大批求解最短路徑問題的方法[3,4]。Cherxassky,Goldberg和Razik在1996年對Dijkstra算法、Incremental Graph算法等17種最短路徑算法進行了對比評估,通過基于不同性質(zhì)的隨機網(wǎng)絡(luò)的分析評估之后,發(fā)現(xiàn)并沒有萬能的算法,在不同的網(wǎng)絡(luò)特性中,相應(yīng)地有不同的優(yōu)勢算法[5]。
本文主要研究的是在地下天然氣管線鋪建時最短路徑選取問題,是屬于對靜態(tài)最短路徑算法的研究范疇,因此本文運用經(jīng)典Dijkstra算法,以ArcGIS為開發(fā)平臺,開發(fā)了油氣管網(wǎng)最優(yōu)路徑的選取系統(tǒng)。
(1)組件對象模型(COM)
組件對象模型(COM)是一個關(guān)于怎么建立組件,怎樣以組件為基礎(chǔ)開發(fā)應(yīng)用程序的規(guī)范說明,可動態(tài)交替更新組件。開發(fā)人員在COM構(gòu)架下可以按照需求開發(fā)出功能不一的組件,并組合起來構(gòu)成復(fù)雜的應(yīng)用系統(tǒng)。因此不僅可以在多個應(yīng)用程序下重復(fù)利用一個組件也可以隨時根據(jù)系統(tǒng)需求對某個或多個組件進行定制更新和升級。
(2)組件式技術(shù)開發(fā)平臺
組件式GIS開發(fā)平臺主要由基礎(chǔ)組件、高級通用組件和行業(yè)性組件三級結(jié)構(gòu)組成:基礎(chǔ)組件提供基礎(chǔ)交互,用于空間數(shù)據(jù)管理以及數(shù)據(jù)庫連接;高級通用組件由基礎(chǔ)組件組成,如顯示和編輯等,主要用于通用功能的實現(xiàn)。行業(yè)性組件則把地理信息行業(yè)應(yīng)用中的特定算法抽象固化到固定的組件中,更針對性地開發(fā)行業(yè)性應(yīng)用系統(tǒng),加速開發(fā)過程[6]。
ArcGIS Engine是一個簡單的、獨立于應(yīng)用程序的Arc Objects編程環(huán)境,開發(fā)人員用于建立自定義應(yīng)用程序的嵌入式GIS組件的一個完整類庫。Arc Engine由一個軟件開發(fā)包和一個可以重新分發(fā)的為ArcGIS應(yīng)用程序提供平臺的運行時(runtime)組成。
ArcEngine功能層次由以下5個部分組成:基本服務(wù);數(shù)據(jù)存??;地圖表達;開發(fā)組件;運行時選項。
依據(jù)設(shè)計思路,并結(jié)合系統(tǒng)擬實現(xiàn)的功能,將分為三層構(gòu)架,分別為基礎(chǔ)應(yīng)用層、數(shù)據(jù)管理層以及應(yīng)用分析層?;A(chǔ)應(yīng)用層包括一些基本的底層數(shù)據(jù),包含居民地、綠地、學校等點線面數(shù)據(jù);數(shù)據(jù)管理層則主要為底圖數(shù)據(jù)和分析網(wǎng)絡(luò),用來實現(xiàn)算法;分析應(yīng)用層則為最短路徑選取以及查詢功能等,具體如圖1所示。
圖1 系統(tǒng)總體構(gòu)架
本系統(tǒng)開發(fā)和運行的環(huán)境如表1所示。
系統(tǒng)開發(fā)運行環(huán)境 表1
根據(jù)需求分析,本系統(tǒng)功能將分為以下幾大功能:①文件功能;②編輯功能;③最短路徑分析功能;④視圖功能;⑤輔助功能。如圖2所示。
圖2 系統(tǒng)功能劃分
(1)編輯功能模塊
該功能包含基本的剪切、復(fù)制、粘貼、查找、全選等功能。
查找功能:可分別對各個圖層的地物進行搜索查詢,并可漫游到查詢的地物,方便用戶快捷、精確地查詢到目標地物。
(2)查詢功能模塊
為方便用戶快速查詢相關(guān)地物,本系統(tǒng)將實現(xiàn)目標地物的快速定位并漫游到目標地物。
同時,配備相應(yīng)的屬性查詢,用戶可以清楚地查詢到相關(guān)地物的屬性信息,例如:地址、電話等相關(guān)信息。
(3)最短路徑分析功能模塊
該功能為本系統(tǒng)核心功能,可對任意兩點天然氣運輸站進行最短路徑分析,并在地圖上進行可視化標記,同時顯示最短路徑的具體路程等基本信息。
障礙點分析:若某運輸站出現(xiàn)技術(shù)故障,暫時不能正常工作,系統(tǒng)在分析時將自動繞過有障礙的運輸站。
導出圖片:可將已算出的最短路徑進行出圖保存,方便日后記錄查看。
(4)視圖功能模塊
本功能主要包括全景視圖、前一視圖、后一視圖、圖層標注、標注清除等功能。全景視圖、前一視圖、后一視圖功能的設(shè)置目的是方便用戶瀏覽地圖。
圖層標注:該功能可對目標圖層進行標注,可選擇要標注的字段,并能對標注進行字體、字號、顏色、比例尺等設(shè)置。最終在地圖上顯示標注信息。
標注清除:對已經(jīng)標注的圖層,進行標注清除。
屬性查詢:該功能可對目標地物進行屬性查詢,例如超市地址、聯(lián)系電話、優(yōu)惠信息等。選擇目標地物所屬圖層,選取目標地物,則可在圖框中查看目標地圖的所有屬性信息。
C#是微軟公司發(fā)布的一種面向?qū)ο蟮?、運行于.NET Framework之上的高級程序設(shè)計語言。C#包括了與Java幾乎同樣的語法和編譯成中間代碼再運行的過程,例如單一繼承、接口等。本系統(tǒng)用到了窗體類、自定義功能集類、BaseCommand類、BaseTool類等。從類的角度重新考慮程序的全部功能,提取耦合度較高的過程單獨封裝成類,使功能更加細化,有利于具體的代碼實現(xiàn)。圖3舉例表示了所使用類之間的關(guān)系[7]。
圖3 類之間關(guān)系
本系統(tǒng)中要素屬性查詢類和打開地圖文件類,繼承于BaseTool和BaseCommand類,這些類往往執(zhí)行一個相對獨立的任務(wù),它們通常位于工具欄中和右鍵菜單中。主要方法一般為與用戶進行交互事件相關(guān)的操作地圖的方法,如地圖屬相查詢時的Flash,Zoom to,Pan to等。
天然氣管線路徑分析系統(tǒng)的數(shù)據(jù)主要為各地物類的屬性。本設(shè)計涵蓋空間數(shù)據(jù)中基本的要素類型及數(shù)據(jù)格式,包括分析網(wǎng)絡(luò)的點、線以及各地物(超市、花園、居民地等)屬性信息,方便查閱。
ArcCatalog是地理數(shù)據(jù)的資源管理器、是ArcGIS Desktop中較為常用應(yīng)用程序之一。用戶通過ArcCatalog來組織、管理和創(chuàng)建GIS數(shù)據(jù)。Geodatabase數(shù)據(jù)模型主要是用來實現(xiàn)矢量數(shù)據(jù)和柵格數(shù)據(jù)的一體化存儲,目前主要有兩種格式,一種是基于Access文件的格式(稱之為Personal Geodatabase),另外一種是基于Oracle或SQL Server等RDBMS關(guān)系型數(shù)據(jù)庫管理系統(tǒng)的數(shù)據(jù)模型,本設(shè)計中,將采用Access文件存儲格式[8]。
(1)數(shù)據(jù)庫結(jié)構(gòu)
結(jié)合本系統(tǒng)的功能,數(shù)據(jù)庫設(shè)計如圖4所示。
圖4 數(shù)據(jù)庫結(jié)構(gòu)
(2)數(shù)據(jù)庫字段
數(shù)據(jù)的字段類型涵蓋雙精度浮點型、文本型、長整形和日期型等。具體如表2與表3所示:
①分析網(wǎng)絡(luò)
配送站表結(jié)構(gòu) 表2
②底層數(shù)據(jù)
超市表結(jié)構(gòu) 表3
本系統(tǒng)主界面設(shè)計如圖5、圖6所示。
圖5 主界面窗體設(shè)計1
圖6 主界面窗體設(shè)計2
主界面由標題欄、菜單欄、工具欄、ToolbarControl、TOCControl、MapControl、狀態(tài)欄等組成。為了迎合市場商業(yè)化,加入DotNetbar控件,使系統(tǒng)界面更加接近Windows系統(tǒng),方便使用。
設(shè)G=(V,E)是一個帶有權(quán)的有向圖,把圖中頂點集合V分成兩組,第一組為已求出最短路徑的頂點集合(用S表示,初始時S中只有一個源點,以后每求得一條最短路徑,就將其加入集合S中,直到全部頂點都加入S中,算法就結(jié)束了),第二組為其余未確定最短路徑的頂點集合(用U表示),按最短路徑長度的遞增次序依次把第二組的頂點加入S中。在加入的過程中,總保持從源點v到S中各頂點的最短路徑長度不大于從源點v到U中任何頂點的最短路徑長度。此外,每個頂點對應(yīng)一個距離,S中頂點的距離就是從v到此頂點的最短路徑長度,U中頂點的距離,是從v到此頂點只包括S中的頂點為中間頂點的當前最短路徑長度[9,10]。
Dijkstra算法步驟如下:
(1)初始時,S只包含源點,即S={v},v的距離為0。U包含除v外的其他頂點,即:U={其余頂點},若v與U中頂點u有邊,則正常有權(quán)值,若u不是v的出邊鄰接點,則權(quán)值為∞。
(2)從U中選取一個距離v最小的頂點k,把k加入S中(該選定的距離就是v到k的最短路徑長度)。
(3)以k為新考慮的中間點,修改U中各頂點的距離;若從源點v到頂點u的距離(經(jīng)過頂點k)比原來距離(不經(jīng)過頂點k)短,則修改頂點u的距離值,修改后距離值的頂點k的距離加上邊上的權(quán)。
(4)重復(fù)步驟(2)和(3)直到所有頂點都包含在S中[11]。
(1)數(shù)據(jù)讀取
系統(tǒng)讀取用于分析的分析網(wǎng)絡(luò)以及地形底圖,顯示效果如圖7所示。
圖7 數(shù)據(jù)讀取
(2)圖層選擇
選取相應(yīng)的圖層,然后進行相應(yīng)的操作。路徑分析應(yīng)在線圖層(psline)進行操作,如圖8所示。
(3)選取起始點
圖層設(shè)定完成后,選取起止點。選擇空間區(qū)域需要執(zhí)行的操作有:點擊選擇空間區(qū)域,激活主窗體,在MapControl控件中用鼠標依次選擇起點和終點。此時選擇起始點完畢,并點擊最短路徑分析,即可得到結(jié)果。結(jié)果顯示分別有兩個界面,其中一個為MapControl顯示窗口,直接用彩色標注最短路徑結(jié)果;另一個為Textbox顯示窗口,用文字記錄最短路徑。顯示效果如圖9、圖10所示。
圖8 圖層選擇
圖9 Textbox顯示窗口
圖10 MapControl顯示窗口
(4)設(shè)置障礙點功能
考慮系統(tǒng)的容錯性與綜合性,若某油氣配送站出現(xiàn)故障,暫時無法工作時,對該點進行標記,系統(tǒng)將自行避開故障配送站,進行最短路徑選取。最終效果如圖11所示。
圖11 障礙點插入顯示效果
本文在ArcGIS Engine平臺上利用C#語言實現(xiàn)了拓撲結(jié)構(gòu)生成和最短路徑分析,通過簡單的點擊操作,確定起始點便可得到最短路徑,并在電子地圖上予以顯示,方便直觀。同時也可以在線路選擇時進行障礙設(shè)置,得到有一定條件約束時的最短路徑選擇結(jié)果。本系統(tǒng)對管網(wǎng)管理的貢獻如下:最短路徑選取,支持障礙點插入分析,輔助科學規(guī)劃路線;地物查詢,為用戶快速查詢地物以及地物相關(guān)屬性提供幫助;圖層標注,為用戶提供方便的標注手段,方便地圖的查閱;系統(tǒng)的建立為科學高效地規(guī)劃地下路線提供了技術(shù)工具。本系統(tǒng)的建立,使路線規(guī)劃人員更加容易地規(guī)劃與選擇最短路徑,能夠為管理者提供輔助性決策依據(jù),在一定程度上節(jié)省了人力物力。由于時間和能力等諸方面的原因,系統(tǒng)在許多方面還有提升空間,比如算法效率提高問題。