何 為,王 浩,劉 全,喻 文 振
(1.長江勘測規劃設計研究有限責任公司,湖北 武漢 430010; 2.武漢大學 水利水電學院,湖北 武漢 430072)
隨著計算機和互聯網技術的快速發展,水利信息化建設成為水利現代化的重要組成部分,傳統工程技術與智能技術的結合將逐漸成為今后水利行業發展的必然趨勢[1]。
水電工程對外交通作為工程建設的重要組成部分,是保證工程物資供應的重要基礎設施。傳統的對外交通規劃方式存在信息采集量大、人力成本高等不足,信息量和設計周期的矛盾較大。因此,在對外交通運輸路線規劃中應用信息化技術開展相關研發具有重要的工程實際意義。
近年來,以WebGIS技術為載體的智能交通信息技術被廣泛應用于物流配送、交通規劃、氣象預報及災害預警等多個領域中[2-5]。但專業GIS系統的開發成本高、數據結構復雜,應用門檻較高。而主流GIS平臺提供免費Web API,可以滿足空間地理信息開發的需要,成為眾多行業的應用首選[6-9]。
本文針對水電工程對外交通運輸路徑優化問題,以旭龍水電站為工程背景,分析了對外交通網絡具有的多源、多路徑以及多種運輸方式的特點,建立了一種多源多層的路徑優化模型,并基于最優路徑算法求解求優。然后,結合地圖Web API技術和WebGIS技術開發了路徑優化設計系統。該系統實現了數據自動抓取和管理、運輸路徑優化及方案優選、方案可視化等功能,為大型水電工程施工組織設計提供了一定的技術支持。
(1) 路徑地理信息自動抓取。目前水電工程對外交通規劃設計主要依靠人工對交通路網、道路里程以及運輸條件等數據資料進行搜集整理,效率低、周期長、耗時耗力。隨著物聯網技術與GIS技術的快速發展,百度地圖、高德地圖等GIS平臺已經具備了完整且豐富的地理信息,并提供了獲取數據資源的服務接口。因此,考慮基于地圖API服務自動獲取數據,以降低人工成本。
(2) 運輸路徑優化及方案優選。水電工程對外交通的方案優選涉及到大量的數據分析計算工作,包括運輸成本、距離以及橋隧比等屬性值的估算,考慮通過建立合理的數學優化模型,并借助計算機技術,將復雜的數學決策模型采用高級編程語言轉化為簡單的可視化操作界面,使用計算機對不同方案進行大量的計算、分析和比較,進而實現方案自動優選。該功能可以提高數據處理效率,為該領域工作人員進行方案決策提供一定的技術支持。
(3) 對外交通方案可視化。傳統的方案展示手段主要是依靠文檔或者CAD圖紙。由于文檔方案缺乏可視性、直觀性,導致工程人員之間方案分享和交互困難。采用百度地圖API技術與WebGIS技術相結合,實現對外交通方案的直觀性、可視化展示。
該系統設計將地圖Web API技術與WebGIS技術相結合;后臺服務器語言采用Python編程,主要完成算法求解功能;數據庫管理系統采用SQL Sever 2000,用于儲存城市地點、運輸路徑、工程需求物資以及供應廠家等數據信息;客戶端瀏覽器采用Ajax技術,包括JavaScript、CSS、XML HTTP等語言,主要完成瀏覽器與Web應用服務器、百度地圖服務器的通信交互;軟件界面設計采用PyQt5語言編程。系統邏輯架構如圖1所示。
該系統基于B/S架構,運用地圖Web API技術與WebGIS技術相結合進行開發,包含數據采集層、數據層、業務邏輯層與表示層共4個層級[10-11],如圖1所示。
(1) 表示層。為用戶對象提供信息展示窗口,即人機交互操作界面。采用PyQt5語言編寫界面,并使用QWebEngineView和QWebChannel技術將Web瀏覽器嵌入軟件框架中,實現GUI與網頁的交互操作。該方法將軟件開發和網頁開發結合在一起,既可以利用Python實現對大數據的快速處理,也可以基于WebGIS實現方案的可視化展示。
(2) 業務邏輯層。用來實現系統的業務邏輯,是數據層與表示層數據交互的橋梁,主要包括:數據的加工處理,使其滿足用戶需求;路徑優化模型的程序化,實現方案屬性值的自動計算以及方案優選;基于GIS平臺的方案繪制,地圖繪制后供可視化平臺調用。
(3) 數據層。水電工程對外交通數據種類多、邏輯結構復雜,不同種類數據之間都存在聯系,難以單獨分類儲存。本文系統在保證數據之間的邏輯關系的條件下采用SQL Server數據庫結合WBS編碼技術,進行分類分區儲存,提高數據庫的管理和儲存效率。同時,系統還可以基于百度地圖API來獲取路況等實時數據。
(4) 數據采集層。本文系統的數據采集可分為數據自動抓取和人工采集兩個部分。其中,數據自動抓取是基于主流GIS平臺依據API技術實現的,主要采集公共交通網絡數據;人工采集主要包括物資需求信息、供應廠家信息以及運輸設備信息等無法通過網絡抓取的部分數據。
針對工程實際需求,該系統主要功能模塊設計包括數據自動獲取與管理、對外交通運輸路徑優化以及方案可視化展示3個部分,如圖2所示。其中,數據自動獲取和管理模塊是系統的主要數據源,也是對外交通運輸路徑優化的基礎;對外交通運輸路徑優化模塊是系統的算法核心,主要負責解算優化模型,基于當前數據源優選對外交通方案;方案可視儀展示模塊是系統的人機交互窗口,對方案進行可視化展示。3個功能模塊之間依靠數據的交互與傳遞緊密聯系,如圖3所示為系統設計的主要流程圖。下面將分別介紹不同功能的技術特點。
此功能模塊設計流程如圖3中步驟1~6所示。主要是利用百度地圖服務接口的Web服務API來獲取物資調運數據,然后經過解析和整理,提取有用信息,并將其儲存到數據庫中,同時可以在系統界面對數據進行可視化操作。
2.1.1數據抓取與解析
水電工程對外交通運輸網絡主要由各物資供應廠家、壩址以及途徑城市地址和經緯度坐標,不同城市之間運輸距離以及國道、省道等交通條件等信息組成,并且在進行路徑規劃時,還應該考慮運輸成本、橋隧比(橋梁與隧道長度的比值)等因素。
針對上述所需數據,該系統基于百度地圖Web服務API接口進行數據提取,包括正逆地理編碼、路線規劃、批量算路以及坐標轉換等API服務。主要獲取方法是利用http傳輸協議支持的GET請求方式,借助Python的request模塊將拼接好的URL地址發送至地圖API服務器,獲取JSON格式的返回參數作為信息提取的數據源。然后針對返回的數據源進行解析,利用JSON模塊將數據格式轉換為Python字典格式,再使用字典、列表或者字符串等操作命令對數據進行處理加工,提取獲得目標數據。
2.1.2數據儲存
該系統使用SQL Server 2000結合WBS編碼技術進行數據存儲。編碼是計算機信息處理的基礎。對于水電工程總布置復雜的信息處理問題,建立強健而規范的編碼是必須的。該系統目前使用的編碼系統中,不同類別的信息有著不同的類別與WBS編碼的編碼,對應關系如表1所列。目前的編碼結構為項目編碼(3位)+類編碼(3位)+序號編碼(3位),共9位編碼。
采用PyQt5.QtSql模塊實現數據庫的連接并將解析之后的數據寫入數據庫中。為方便寫入與管理,需要將數據編譯成固定的格式,通過在Python語言中執行SQL語句來分區分類儲存數據。

表1 WBS編碼對應關系Tab.1 WBS code correspondence
2.1.3數據顯示與編輯
該功能設計目的是為了便于查看和管理數據信息,系統也提供了增刪改查等操作,便于維護更新數據源,如圖4所示。該系統采用Model/View結構進行數據顯示與編輯,由模型(Model)提取數據,然后在視圖(View)組件上顯示和編輯,并且修改編輯之后的數據又通過模型保存到數據庫中。這種方式將界面組件與數據源分離,通過數據模型實現界面與數據源的交互操作,提高了數據處理的靈活性。
該模塊主要是系統內置算法模塊,主要通過Python語言將路徑優化模型進行程序化,通過計算機進行大量的計算、分析和比較,進而實現方案自動優選。
該方案可視化的方法是根據路徑優化結果,基于百度地圖Web開發平臺的JavaScript API 在地圖上添加點、線、面圖層以及圖片、文字等覆蓋物,圖3中步驟7~11顯示了方案可視化的主要流程。
2.3.1瀏覽器嵌入及數據交互
該系統借助QWebEngineView模塊將瀏覽器嵌入到軟件框架中,使用Html、CSS、JavaScript等語言開發網頁,系統界面如圖5所示。這種方法可以保證系統在離線狀態仍可使用部分基本功能,使得Web瀏覽器專門負責基于GIS平臺的方案可視化展示,提高系統運行效率。這種方式的關鍵是數據交互技術,該系統使用QWebChannel.js對象,結合JSON庫,通過在JavaScript調用PyQt5代碼,使軟件可以與Web瀏覽器進行雙向的數據交互。
2.3.2添加覆蓋物及控件
如圖5所示,在Web瀏覽器初始界面中已經加載了百度地圖,將其作為對外交通方案繪制的底圖。其實現方法是通過Map類在百度地圖容器中創建一個地圖實例,將百度地圖顯示在地圖容器中。
經過路徑優化得到的對外交通方案數據,包括了物資供應廠家名稱和經緯度信息、途徑城市名稱及經緯度信息以及運輸成本、距離等信息。將其編碼成JSON格式傳遞到瀏覽器,再經數據解析,借助百度地圖的JavaScript API添加運輸路線、途徑城市標記以及文本標注等覆蓋物,如圖6所示。考慮到當前百度地圖API提供的路線規劃僅指公路條件,缺乏鐵路和水路,因此系統采用直線進行代替。同時考慮對不同物資的運輸路線進行區分,采用隨機顏色進行路線繪制;采用文本標注的方式顯示城市節點信息。
為便于用戶瀏覽方案,可以向地圖中添加平移、縮放以及比例尺等控件。
2.3.3疊加方案分析圖層
水電工程對外交通方案信息豐富,僅采用地圖的形式很難完整展示,因此系統采用地圖結合文本的形式進行聯合展示。其中文本信息通過在瀏覽器網頁中嵌入彈層來實現,并自定義鼠標點擊事件來觸發彈層。該彈層所顯示的信息是從全局的角度對整體方案數據進行計算整理,包括方案總投資成本、物資種類、各物資的來源地、運輸里程以及運輸類型等信息,然后按照不同物資種類進行顯示,如圖6所示。
本文所研究的是將水電工程外來物資從產地運輸到壩址的運輸路徑優化問題。水電工程外來物資種類多,包括水泥、粉煤灰以及鋼材等,每種物資又有多個供應廠家可選,每個供應地點到壩址又有多條可選路徑以及公路、鐵路或者水路等多種運輸方式。可見,水電工程對外交通運輸路徑優化問題具有多源點、多路徑以及多運輸條件的特點[12-14]。
在借鑒以往豐富的研究成果基礎上,本文基于網絡拓撲關系結合最優路徑算法對上述問題進行研究。參考實際工程中路徑規劃的基本原則和通用做法,假設交通網絡中各城市之間的運輸道路均可通行,不考慮方向限制和道路管制,將對外交通網絡轉化為權連通圖。如圖7所示,以物資供應廠家、途經城市以及壩址為節點;以城市之間的道路連接為路徑;以優化目標為邊權值。
3.2.1自定義優化目標
路徑優化問題常見的優化目標包括運輸距離、成本、時間、風險或者多個目標組合等。選擇不同的優化目標,得到的方案可能存在很大差別,并且不同的決策者,其決策偏好不同,選取的優化目標也不同。因此本文系統設置了自定義優化目標功能,便于決策者對比分析不同的優化目標得到的方案之間的區別。在分析水電工程對外交通特點的基礎上,選取了運輸距離、運輸費用分別獨立作為優化目標,同時還設置了距離、成本以及風險的多個目標組合。
本文系統基于百度地圖API抓取的數據,僅有城市節點之間的距離數據,缺乏成本和風險數據,為此本文通過以下方式進行計算。
(1) 運輸費用。水電工程外來物資調運費用涉及很多方面,如路橋費、物資裝卸費、設備運營費、道路改擴建投資等。但部分費用對路徑優化影響不大,在路徑優化時可以忽略。而路橋費、道路改擴建投資以及中轉費用與道路運輸緊密相關,可以很好地反映不同對外交通運輸方案的投資費用。因此,路段(i,j)上的運輸費用cij的計算方法如式(1)所示。
cij=c1ij+c2ij+c3
(1)
式中:c1ij和c2ij分別表示物資在路段(i,j)上運輸時,產生的路橋費和道路改擴建投資;c3表示物資從產地到壩址的運輸過程中產生的中轉費用。
(2) 運輸風險。水電工程通常地理位置偏僻,道路交通條件差,水文地質條件復雜,導致物資運輸風險因素多,來源復雜,難以辨別與估計。因此,本文采用專家打分法對存在多條可選擇路段的運輸風險進行經驗估計,而對其它運輸必然經過的路段不進行評價。
(3) 多目標組合。實際工程中,決策者往往需要同時考慮費用、距離以及風險等多個優化目標,通過期望運輸方案能夠同時達到費用最低、距離最短及運輸風險最小,但不同目標之間存在矛盾性和不可公度性,很難同時滿足。因此考慮采用賦權法來確定各決策目標的權重。
3.2.2模型構建
以旭龍水電站對外交通網絡為研究數據,針對不同物資,按照圖7方式分別建立權連通圖。考慮到同一條路段可能包括多種交通方式,因此,將交通網絡按公路、鐵路以及水路進行分層,每一層的交通網絡通過轉運站來連接,即當運輸方式發生變化時,則運輸路線經過中轉站城市節點。因此本文建立的路徑優化模型具有多源點、多路徑、多層級的特點,并且設定是否經過某路段為約束變量,屬性值為布爾類型,其模型為
(2)

路段的邊權值綜合反映運輸優化目標,它不僅指地理空間意義上的距離,還可以指運輸費用、風險或者多目標組合等優化目標。
針對上述建立的路徑優化模型,利用最優路徑算法達到求解求優的目的。考慮到該模型具有多源點特性,符合Floyd算法求解特點。
Floyd算法是一種從具有正或負邊緣權重的加權圖中,利用動態規劃的思想尋找多源點之間最優解的算法,該算法具有較高的可靠性和求解效率,可以算出任意兩個節點之間的最優解[15-17]。
針對本文研究的水電工程對外交通運輸路徑優化問題,基于優化目標采用Floyd算法進行求解。假設與第k種物資對應的有N個可以提供滿足工程物資需求的生產廠家,經過路徑優化之后,即可得到N種起點到壩址的運輸方案,然后通過比較不同方案的優化目標屬性值的大小來確定最終的優化方案。
旭龍水電站位于云南省德欽縣與四川省得榮縣交界的金沙江干流上游河段,為Ⅰ等大(1) 型工程。所需的建筑材料包括:水泥90.1萬t、粉煤灰30.0萬t、鋼材15.6萬t以及永久機電設備等。物資來源地分布廣泛,包括云南省、四川省以及上海市等地。本文以該水電站水泥物資的對外交通為工程案列,對系統的具體使用方法步驟進行詳細說明。工程相關資料如下:工程周邊水泥物資生產廠家分別位于樂山市、攀枝花市、大理州以及麗江市;公路運輸費率統一為1元/(t·km),裝卸費為6元/t;鐵路運價基價為0.103元/(t·km),發到基價為18.6元/t,裝卸費為15.1元/t;鐵路轉公路中轉費用為25元/t。
(1) 數據自動獲取與管理。首先根據工程相關資料在系統界面編輯工程地址、周圍關鍵城市名稱等信息,然后系統根據操作指令編輯對應的請求URL,基于百度地圖API的路徑規劃、正/逆地理編碼以及批量算路等相應的服務接口獲取城市地址信息、經緯度信息以及運輸距離等相應數據。如圖8所示為基于百度地圖獲取橋隧信息的功能界面。具體流程為輸入起點、終點以及運輸車輛等信息——系統編輯請求URL——向百度地圖API的路線規劃服務發送請求——以JSON格式返回結果參數——系統提取運輸距離、經緯度等有效數據——返回系統界面,并展示路線信息。可以采用同樣的方法獲取其他信息,包括工程周圍城市信息、供應廠家信息以及公路、鐵路和水路等運輸方式信息。
同時,用戶可以根據需要,在系統的數據可視化界面對數據進行增刪改查等操作,然后儲存到SQL Server數據庫中,如本文2.1.3節部分所述。
(2) 基于路徑優化模型的方案優選。工程周邊交通運輸網絡信息收集整理完畢后,即可按照第3節所述的模型進行路徑優化。首先在系統界面選擇物資種類,即水泥。系統經過比選,將滿足工程需要的水泥物資供應廠家信息返回界面。然后按照運輸距離、成本最低或者多目標優化等不同的優化目標進行水泥的路徑優化,優化結果返回到界面并繪制到百度地圖上,如圖6所示。通過對比分析可知:對于水泥物資的對外交通運輸,從麗江運輸到壩址的運輸距離最短、運輸風險最低;從大理運輸到壩址的運輸成本最低,但風險和距離都較高。
(3) 方案可視化展示。針對需要的不同種類外來物資,與水泥對外交通方案優選的過程類似,依次重復上述步驟,直到確定完所有種類外來物資對應的對外交通方案,并將其保存到數據庫中。最后將所有外來物資對應的對外交通方案全部繪制到一張百度地圖上,如圖9所示。具體實現原理已在2.2節闡述。主要運用了WebGIS技術和百度地圖API技術進行地圖繪制:首先加載百度地圖作為底圖,然后將步驟(2)中獲得各物資的優化方案,利用JavaScript API技術按圖層疊加到底圖上,并且為城市節點添加標記和文本。采用彈窗的方式,將方案總成本以及各物資的詳細運輸信息以文本方式輔助進行方案展示。
針對工程實際需求,通過將百度地圖API與WebGIS相結合開發了水電工程對外交通運輸路徑優化系統。通過數據自動抓取和管理、基于路徑優化模型的方案優選、方案可視化展示等功能,實現了從數據收集、方案設計到方案展示整個過程的自動化。與傳統人工方法相比,大大降低了數據收集整理復雜度,提高了數據處理效率以及方案展示的直觀性。
該系統建立的路徑優化模型充分考慮了水電工程對外交通網絡的多源、多路徑以及多種交通方式的特點,建立了一種多源多層路徑優化模型,采用自定義優化目標的方式應用Floyd算法求解。以旭龍水電站為例進行應用分析,說明了本文建立的優化模型符合工程實際情況,適用性較強。