何 鑫
(山西省交通科學(xué)研究院,山西 太原 030006)
隨著國民經(jīng)濟(jì)的飛速發(fā)展及人民生活水平的不斷提高,人們對于空間地理的需求也在不斷增加,地理信息系統(tǒng)(GIS)在衛(wèi)星定位、車載導(dǎo)航、城市總體規(guī)劃、地下管道維護(hù)、交通疏導(dǎo)等領(lǐng)域有著廣泛的前景與應(yīng)用價值[1]。然而隨著近年來計算機(jī)技術(shù)的發(fā)展以及所需處理地理空間數(shù)據(jù)量的空前增長,GIS在結(jié)構(gòu)組成和技術(shù)應(yīng)用等方面已經(jīng)與傳統(tǒng)的GIS技術(shù)有了很大的區(qū)別?,F(xiàn)階段的GIS,是利用網(wǎng)絡(luò)互聯(lián)出版發(fā)布空間數(shù)據(jù),為用戶提供空間數(shù)據(jù)的檢索分析等功能?;谝陨檄h(huán)境特點,與互聯(lián)網(wǎng)相結(jié)合的地理信息系統(tǒng)(WebGIS)應(yīng)運而生了[2]。
WebGIS是將地理信息系統(tǒng)通過網(wǎng)絡(luò)技術(shù)來擴(kuò)展和完善的一種技術(shù)。它是基于網(wǎng)絡(luò)的Browser/Server,即瀏覽器/服務(wù)器模式[3],將客戶端和服務(wù)器之間通過互聯(lián)網(wǎng)進(jìn)行信息交換。該技術(shù)解決了海量空間數(shù)據(jù)和屬性數(shù)據(jù)庫統(tǒng)一管理以及分布式數(shù)據(jù)與異構(gòu)平臺兼容等問題,同時還提供圖形化界面,方便用戶進(jìn)行信息檢索和查詢、統(tǒng)計分析等。WebGIS主要用于地理信息數(shù)據(jù)發(fā)布、查詢以及建模服務(wù)等。
GeoServer是一個開源項目,它是依托OpenGIS服務(wù)器規(guī)范,利用JavaEE語言實現(xiàn)的,能夠運行在任何基于JavaEE/Servlet的容器之上。數(shù)據(jù)源的支持主要有MySQL、PostgreSQL、Oracle等,能夠?qū)?yīng)輸出多種格式的網(wǎng)絡(luò)地圖資源,例如png、gif、jpeg等。當(dāng)嵌入MapBuilder時,可以支持 AJAX的地圖客戶端OpenLayers[4-5]。
GeoServer提供了全面遵循OGC(Open GIS Consortium,開放地理空間信息聯(lián)盟)開放標(biāo)準(zhǔn)的網(wǎng)絡(luò)地圖服務(wù)和網(wǎng)絡(luò)要素服務(wù)規(guī)范,并支持WFS-T(Web Feature Service-Transactional)[3,6]。其中網(wǎng)絡(luò)地圖服務(wù)能將地理位置信息數(shù)據(jù)轉(zhuǎn)換成地圖圖層影響,并根據(jù)上述數(shù)據(jù)繪制地圖;網(wǎng)絡(luò)要素服務(wù)能對數(shù)據(jù)進(jìn)行增刪改查操作,并能將數(shù)據(jù)轉(zhuǎn)換成要素級的地理標(biāo)記語言編碼[2,6]。利用GeoServer可以方便地發(fā)布地圖數(shù)據(jù)以及在用戶之間迅速共享空間地理信息[3]。
OpenLayers是一個專為WebGIS客戶端開發(fā)提供的JavaScript類庫,用于實現(xiàn)符合行業(yè)標(biāo)準(zhǔn)格式的地圖數(shù)據(jù)訪問方法。OpenLayers采用OpenGIS的WMS和WFS規(guī)范,從而保證了開發(fā)人員可以自由添加功能,為地理空間數(shù)據(jù)的信息化處理提供了極大的便利[2,4]。
OpenLayers使用來自Prototype.js和Rico中的一些組件,并采用面向?qū)ο蟮脑O(shè)計方式開發(fā)[2]。其中Prototype.js的部分組件已經(jīng)被整合到OpenLayers當(dāng)中,并不斷在此基礎(chǔ)上完善面向?qū)ο蟮拈_發(fā),Rico則實現(xiàn)了圓角化DIV。OpenLayers在利用的地圖數(shù)據(jù)資源方面可以提供給用戶較多的選擇。開發(fā)者可以通過OpenLayers實現(xiàn)在瀏覽器中對地圖數(shù)據(jù)的平移、放大、縮小、選取面、選取線、要素選擇、圖層疊加等操作。這是由于瀏覽器中的DOM(文檔對象模型)由JavaScript實現(xiàn),與OpenLayers相同,這使得OpenLayers與頁面的其他組件可以良好地契合,不存在瀏覽器的依賴性[2,7]。
WebGIS服務(wù)系統(tǒng)開發(fā)主要涉及地圖服務(wù)器技術(shù)、空間數(shù)據(jù)庫技術(shù)、客戶端顯示技術(shù),這里我們采用基于B/S的四層結(jié)構(gòu)來進(jìn)行系統(tǒng)的開發(fā)。GeoServer服務(wù)器為地圖服務(wù)層、MySql為數(shù)據(jù)層、Django+Python為Web服務(wù)層、OpenLayers為視圖層。Web服務(wù)層響應(yīng)客戶端請求,根據(jù)請求類型調(diào)用GeoServer服務(wù)器所提供的地圖圖層,與此同時Web服務(wù)層通過OpenLayers優(yōu)化從MySql數(shù)據(jù)庫中調(diào)用的地理信息數(shù)據(jù)并渲染地圖,最終客戶端利用瀏覽器實現(xiàn)對空間數(shù)據(jù)的顯示和用戶的交互。系統(tǒng)體系結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)體系結(jié)構(gòu)
根據(jù)系統(tǒng)開發(fā)的目標(biāo),最終確定系統(tǒng)的功能模塊,主要涉及對地圖、圖層的放大、縮小、平移、瀏覽等基本操作,以及對截取的部分衛(wèi)星地圖進(jìn)行相關(guān)的算法處理,例如:像素查詢、影響線性增強(qiáng)、影像銳化、影響模糊、邊緣檢測、剖面分析、主成分分析、植被指數(shù)計算、正射矯正、勻光勻色處理、影像鑲嵌、Pansharp融合等。系統(tǒng)功能模塊如圖2所示。
圖2 系統(tǒng)功能模塊
當(dāng)用戶需要訪問地圖數(shù)據(jù)時,JavaScript通過瀏覽器向Web應(yīng)用服務(wù)器發(fā)送XMLHttpRequest對象調(diào)用請求,Web應(yīng)用服務(wù)器根據(jù)對應(yīng)請求將參數(shù)傳遞給地圖服務(wù)器,地圖服務(wù)器根據(jù)系統(tǒng)客戶端發(fā)送的網(wǎng)絡(luò)地圖服務(wù)請求生成對應(yīng)的地圖信息并返回給客戶端,客戶端通過Ajax回調(diào)函數(shù)接收返回結(jié)果,并將接收到的地圖數(shù)據(jù)進(jìn)行解析,拆分出其中的空間特征信息和屬性信息,以網(wǎng)絡(luò)地圖服務(wù)及屬性窗口的形式顯示在頁面上,用戶則可根據(jù)瀏覽器查看返回的地圖信息。整個系統(tǒng)的工作流圖如圖3所示。
圖3 系統(tǒng)工作流圖
本系統(tǒng)采用瀏覽器/服務(wù)器模式(B/S),使用Python語言和Django開發(fā)框架及MySQL數(shù)據(jù)庫進(jìn)行開發(fā),該系統(tǒng)具有多層結(jié)構(gòu)、分布式和面向?qū)ο蟮慕M件體系結(jié)構(gòu)等特點。系統(tǒng)基于MVC(Model、View、Controller,即模型、視圖、控制器)的3層結(jié)構(gòu)開發(fā),使得客戶端(瀏覽器端)、應(yīng)用服務(wù)器端與基礎(chǔ)數(shù)據(jù)服務(wù)器端更加獨立清晰,同時使系統(tǒng)的升級和功能的擴(kuò)充變得容易,系統(tǒng)開發(fā)模式如圖4所示。
圖4 系統(tǒng)開發(fā)模式
3.1.1 地圖加載
地圖瀏覽是系統(tǒng)最基本的GIS功能。以WebGIS的方式實現(xiàn)這一功能需要提供地圖服務(wù)。這一步的完成需要GeoServer的配合。在GeoServer中,創(chuàng)建工作空間、MySQL數(shù)據(jù)源,在已經(jīng)連接數(shù)據(jù)庫的基礎(chǔ)上,即可發(fā)布數(shù)據(jù)庫中指定數(shù)據(jù)的空間信息。
在發(fā)布地圖信息的時候,可以對待發(fā)布的圖層進(jìn)行樣式渲染,這樣能夠使發(fā)布的地圖更加美觀鮮明。與此同時,本系統(tǒng)在地圖發(fā)布過程中,引入了OpenStreetmap這一開源的地圖服務(wù),可以更加自由直觀地編輯和查閱相關(guān)地圖信息。
要實現(xiàn)對GeoServer發(fā)布的地圖服務(wù)的解析和顯示,需要借助于OpenLayers,它能夠提供常用的解析函數(shù)和地圖控件。為了使建立的開發(fā)工程能夠?qū)ζ溥M(jìn)行引用,需要把OpenLayers的文件包整體放入到工程的發(fā)布文件目錄下。在建立好工程后即可對其進(jìn)行相關(guān)開發(fā)。
3.1.2 常用GIS功能
通過對OpenLayers API和OpenStreetmap的調(diào)用,可以實現(xiàn)地圖的拖拽、放大、縮小、距離測量、面積測量、地物查詢、區(qū)域衛(wèi)星顯示等常用GIS功能,也為后續(xù)算法功能模塊的實現(xiàn)提供必要的地圖圖層信息。
3.2.1 影像銳化
在拍攝衛(wèi)星地圖影像時,會由于各種原因?qū)е屡臄z的影像效果不理想,平滑的影像會導(dǎo)致輪廓邊界的模糊,影像銳化技術(shù)可以使模糊的邊緣清晰化,以減少這類拍攝產(chǎn)生的不良效果。影像銳化處理是為了強(qiáng)化影像邊緣,使模糊的影像變得更加清晰,顏色變得鮮明突出,影像的質(zhì)量有所改善,產(chǎn)生更適合人眼觀察和識別的影像,其根本原因是因為影像受到了平均或積分運算,因此可以對其進(jìn)行逆運算(如微分運算)使影像變的清晰。通過銳化處理后,目標(biāo)影像的邊緣變得鮮明,也為邊緣提取、圖像分割、區(qū)域識別、區(qū)域形狀提取等分析操作奠定基礎(chǔ)[8-9]。
截取部分衛(wèi)星圖層信息,選擇影像銳化選項即可對其進(jìn)行銳化處理,將所選圖層作為參數(shù)傳遞后臺函數(shù)進(jìn)行處理,生成銳化后的地圖影像,并將銳化結(jié)果顯示在瀏覽器的相應(yīng)區(qū)域。
如圖5所示,左側(cè)影像為待處理的衛(wèi)星地圖影像樣例,右側(cè)為銳化后的影像,可以看出銳化效果明顯。
圖5 影像銳化演示
3.2.2 植被指數(shù)計算
通過不同衛(wèi)星波段的探測數(shù)據(jù)組合來反映植被生長情況的指數(shù)即為植被指數(shù)。植被在近紅外波段及可見光波段反射與土壤背景之間存在著明顯的差異性,根據(jù)植被監(jiān)測的物理基礎(chǔ)我們得知,植物葉面在近紅外波段有很強(qiáng)的反射特性,而在可見光波段有很強(qiáng)的吸收特性。比值植被指數(shù)又稱為綠度,為二通道反射率之比,該指數(shù)能較好地反映植物的生長差異情況及覆蓋程度,并且與植物量的增長呈正相關(guān),在高密度、生長旺盛的植被環(huán)境監(jiān)測中特別適用[10]。
圖6 植被指數(shù)計算樣例
圖7 植被指數(shù)計算參數(shù)及輸出目錄設(shè)定
截取部分衛(wèi)星圖層信息,這里我們選擇圖6作為計算樣例,對其進(jìn)行植被指數(shù)計算。選擇紅波段和近波段的參數(shù)值,如圖7所示,其中紅波段參數(shù)為3,近波段參數(shù)為2,并選擇輸出目錄作為結(jié)果輸出路徑。點擊確定開始計算植被指數(shù)信息。以圖層信息作為參數(shù)存儲在XmlHttpRequest對象里,調(diào)用XmlHttpRequest對象的方法向服務(wù)器的URL發(fā)送異步請求,參數(shù)傳遞后臺函數(shù)進(jìn)行處理,并將處理結(jié)果存儲到數(shù)據(jù)庫結(jié)果集表中以備后續(xù)查詢,將HttpResponse對象返回給客戶端,客戶端解析響應(yīng)對象的ResponseXML包含的數(shù)據(jù)信息,并將結(jié)果以圖片的形式呈現(xiàn)在瀏覽器相應(yīng)區(qū)域。后臺計算作業(yè)完成狀態(tài)如圖8所示。
圖8 后臺進(jìn)度及計算結(jié)果顯示
當(dāng)計算完成時,即可在之前選取的輸出路徑查看計算結(jié)果輸出圖片,圖9即為結(jié)果輸出,可以看出計算結(jié)果很好地反應(yīng)樣例的植被覆蓋情況。
圖9 植被指數(shù)計算結(jié)果輸出
3.2.3 集群管理
當(dāng)我們需要處理很大數(shù)據(jù)量的數(shù)據(jù)時,單個虛擬計算節(jié)點已經(jīng)無法滿足計算負(fù)載需求,此時我們可以引入集群的概念,重新虛擬化一個或多個新的計算節(jié)點,所謂集群是指為用戶提供一組網(wǎng)絡(luò)資源及服務(wù)的一個整體,包含多個計算機(jī)節(jié)點的一組計算機(jī)系統(tǒng)。而對于地理信息服務(wù)系統(tǒng),在數(shù)據(jù)處理時也同樣實現(xiàn)了集群化管理的功能。對于單個的虛擬計算節(jié)點,可以查看其在近兩個小時的CPU使用率,內(nèi)存使用率及負(fù)載情況,如圖10所示。用于分析計算節(jié)點的計算能力及負(fù)載情況,評估是否需要增設(shè)節(jié)點以滿足當(dāng)前的計算需要。
圖10 計算節(jié)點使用情況評估
如果當(dāng)前節(jié)點超出設(shè)定閾值,已無法滿足當(dāng)前的計算量時,這就需要添加新的虛擬節(jié)點,可以為新的虛擬節(jié)點分配系統(tǒng)類型,硬盤及內(nèi)存大小等相關(guān)參數(shù)以滿足計算需要。當(dāng)虛擬節(jié)點資源過剩時,可以關(guān)閉部分虛擬節(jié)點以達(dá)到降低資源消耗的節(jié)能效果。
本系統(tǒng)的數(shù)據(jù)信息具有空間查詢和地圖分析的功能及數(shù)據(jù)統(tǒng)計及查詢分析的能力,因此可用于公路選線及改建工程中。系統(tǒng)通過DBMS數(shù)據(jù)庫與WebGIS相結(jié)合,生成公路選線框架,剝離公路數(shù)據(jù)與模型,通過數(shù)據(jù)采集公路信息對數(shù)據(jù)進(jìn)行統(tǒng)一處理及分類,并通過空間模型數(shù)據(jù)分析、選線分析、里程分析、最優(yōu)路徑分析等實現(xiàn)數(shù)據(jù)的最優(yōu)化,將公路改建方案與實際路況直觀對比輸出分析,為道路的選線與改建提出良好的建議。
本系統(tǒng)可實現(xiàn)對已知公路數(shù)據(jù)進(jìn)行編碼存檔,建立數(shù)據(jù)庫分析路網(wǎng)組成,并通過空間地理信息分析,規(guī)劃空間元素,為公路的規(guī)劃設(shè)計提供科學(xué)合理的解決方案。可減少由于經(jīng)驗的不足及資料的局限造成的資源及資金浪費,并將公路設(shè)計中的施工與避讓兩個要素與地形地貌分析相結(jié)合,通過建筑及植被分析,計算避讓權(quán)重,有效減少施工量及施工難度,將不同標(biāo)段分級分屬性不同顏色標(biāo)識,為最終道路設(shè)計圖的形成提供直觀、合理、最優(yōu)的建議。通過數(shù)據(jù)庫定期更新,為公路規(guī)劃設(shè)計的后續(xù)進(jìn)行提供實時的參考資料和數(shù)據(jù)分析,為公路的數(shù)據(jù)化建設(shè)提供良好的發(fā)展基礎(chǔ)。
WebGIS作為一種新興的地理信息系統(tǒng)開發(fā)手段,正逐步運用于各行各業(yè)的信息管理系統(tǒng)中,空間信息作為世界萬物的基本屬性,逐步引起了人們重視,隨著網(wǎng)絡(luò)的普及以及人們生活水平的提高,WebGIS技術(shù)將成為我們生活及工作領(lǐng)域中最重要的技術(shù)實現(xiàn)。
本文針對地圖操作和影像處理的需求,設(shè)計并開發(fā)了開源的GIS地理信息服務(wù)系統(tǒng)。其中開源數(shù)據(jù)庫MySQL用來存儲數(shù)據(jù),開源地圖服務(wù)器GeoServer用來提供地圖服務(wù),開源JavaScript類庫OpenLayers用來表現(xiàn)地圖,并在此基礎(chǔ)上使用Python語言和Django開發(fā)框架構(gòu)建平臺顯示。
本系統(tǒng)具有常用的GIS功能,基本實現(xiàn)了系統(tǒng)的設(shè)計目標(biāo)。用戶亦可通過更多的地理信息數(shù)據(jù)資源結(jié)合自己的需求及Web服務(wù)實現(xiàn)功能更加強(qiáng)大的WebGIS系統(tǒng)平臺。