余濤 郭才?!×忠憧 ⌒炝璺?/p>
摘 要: 針對企業(yè)實際需求,設(shè)計和實現(xiàn)了一個光纖檢測webGIS系統(tǒng)。系統(tǒng)結(jié)合物聯(lián)網(wǎng)與GIS的技術(shù)優(yōu)勢,將變電站與光纖網(wǎng)的監(jiān)測和管理轉(zhuǎn)移到互聯(lián)網(wǎng)平臺上。得益于所使用的開源軟件和合理的存儲、渲染、切片等地圖數(shù)據(jù)處理機制,所設(shè)計的系統(tǒng)具有較好的擴展性、移植性和穩(wěn)定性。本系統(tǒng)的解決方案也同樣適合于其他應(yīng)用場景。
關(guān)鍵詞: webGIS; 光纖檢測; 嵌入式; 物聯(lián)網(wǎng); 地圖; 開源
中圖分類號:TP274 文獻標志碼:A 文章編號:1006-8228(2014)07-10-04
Abstract: Aiming at the actual demand of enterprises, a webGIS system for optical fiber detection is designed and implemented. Combined with the technical advantage of the Internet of things and GIS, the monitoring and management of substation and fiber optic network are transferred to the Internet platform. Benefited from the use of open source software and reasonable mechanism of map data processing, such as storage, rendering and slice, the system designed in this paper has performed with good scalability, portability and stability. The solution in this system is suitable for other similar scenarios.
Key words: webGIS; fiber detection; embedded; the Internet of things; map; open source
0 引言
webGIS是一種在網(wǎng)絡(luò)環(huán)境下存儲、分析和處理地理信息的系統(tǒng),webGIS技術(shù)改變了地理信息數(shù)據(jù)的獲取、傳輸、共享和應(yīng)用的方式[1]。目前,從國內(nèi)外的利用和發(fā)展現(xiàn)狀來看,這項技術(shù)的研究和利用并未成熟,主要表現(xiàn)在空間數(shù)據(jù)的多元性和多語義性使多個webGIS系統(tǒng)之間彼此孤立、無法共享信息。
隨著GIS技術(shù)的使用日益普遍、市場需求的不斷提高和變化,一些亟待解決的問題正逐步突顯出來,比如系統(tǒng)結(jié)構(gòu)優(yōu)化、存儲機制、渲染機制等。對于這些問題的解決,仍需更多深入研究才能得出完備的、高效的、普適的解決方案。
本文針對地圖數(shù)據(jù)存儲和地圖數(shù)據(jù)渲染問題展開討論和分析,最終得出解決方案并成功將這一方案運用于光纖在線檢測項目中,從而實現(xiàn)了一種具有較好的擴展性、移植性和穩(wěn)定性的webGIS系統(tǒng)。本文的貢獻在于為地圖數(shù)據(jù)存儲和渲染方式提供了一種新的解決方案,并且在實際應(yīng)用中檢驗了該方案的可行性及系統(tǒng)性能。
較好的移植性和擴展性是本系統(tǒng)最大的特點,這主要歸因于本系統(tǒng)使用了對平臺無依賴性的服務(wù)器端軟件,在編程上,本系統(tǒng)使用了具有“一次編譯,處處運行”特性的Java語言作為編程語言,并且選擇了功能高度模塊化的SSH框架作為編程框架?;谶@樣的選擇,本系統(tǒng)同時還具有低成本和高性能的特點。
1 系統(tǒng)結(jié)構(gòu)
如圖1所示,本系統(tǒng)采用的是基于B/S架構(gòu)的三層系統(tǒng)結(jié)構(gòu):GIS基礎(chǔ)數(shù)據(jù)庫、Web應(yīng)用服務(wù)器及Web地圖服務(wù)器、Web客戶端瀏覽器?;跀U展性和移植性的考慮,本系統(tǒng)中所使用的服務(wù)器端軟件全部具有開源、可跨平臺的特性。
在服務(wù)器端,使用可以發(fā)布動態(tài)頁面和Java應(yīng)用程序以及處理數(shù)據(jù)交互的Apache-tomcat作為Web應(yīng)用服務(wù)器,使用開源Web地圖服務(wù)器Geoserver作為本系統(tǒng)的地圖服務(wù)器,使用Geowebcache作為本系統(tǒng)的地圖切片工具用以生成地圖緩存。在數(shù)據(jù)庫的選擇上,使用MySQL作為地圖空間數(shù)據(jù)、地圖屬性數(shù)據(jù)和網(wǎng)站數(shù)據(jù)的數(shù)據(jù)庫。在客戶端,采用Ajax技術(shù)實現(xiàn)地圖數(shù)據(jù)的動態(tài)展現(xiàn)及交互,前端頁面使用Extjs搭建整體框架。在對地圖的操作上,使用OpenLayers作為地圖操作的接口工具。
客戶端向服務(wù)器請求地圖數(shù)據(jù)時,Geowebcache會首先攔截請求,并檢查切片緩存區(qū)是否存有目標地圖數(shù)據(jù),若有,則將目標數(shù)據(jù)以HTTP響應(yīng)的形式返回給客戶端;否則,Geowebcache將請求轉(zhuǎn)發(fā)至Geoserver,Geoserver從MySQL中取出地圖空間數(shù)據(jù)并從樣式配置文件中獲取對應(yīng)樣式,渲染后生成圖片地圖,再由Geowebcache對圖片地圖進行切片以作緩存,最后Geoserver取出切片后的地圖數(shù)據(jù)發(fā)送至客戶端。
2 地理數(shù)據(jù)存儲機制
webGIS系統(tǒng)的響應(yīng)性能在根本上取決于使用何種存儲機制存儲地圖數(shù)據(jù)。正是基于系統(tǒng)響應(yīng)性能的考慮,本系統(tǒng)使用MySQL作為GIS基礎(chǔ)數(shù)據(jù)庫。MySQL在5.0之后的版本提供了完整的空間數(shù)據(jù)存儲支持,MySQL的Spatial引擎使用OGC(Open GIS Consortium)定義的WKT(Well-Known Text)/WKB(Well-Known Binary)格式保存地理空間數(shù)據(jù),這為提升地圖數(shù)據(jù)的存取速度提供了基礎(chǔ)性的保障。
使用MySQL存儲地圖空間數(shù)據(jù)是本系統(tǒng)的一個特色,如何將shapefile的矢量地圖數(shù)據(jù)存儲進MySQL也是本系統(tǒng)中關(guān)鍵技術(shù)點之一。shapefile的電子地圖數(shù)據(jù)使用shp、dbf、fix、prj、qix、shp.sidx、shx這一系列格式的文件分別存儲地理空間數(shù)據(jù)的各項數(shù)據(jù)。為了將shapefile格式的電子地圖數(shù)據(jù)存入數(shù)據(jù)庫,需要首先借助shp2mysql工具將矢量地圖數(shù)據(jù)導(dǎo)出為SQL文件,然后對SQL文件進行修改,去掉多余的字段,修改部分字段名及數(shù)據(jù)表名,最后將SQL文件導(dǎo)入MySQL,這就是矢量地圖數(shù)據(jù)的存儲過程。
使用MySQL存儲空間數(shù)據(jù)的優(yōu)勢有如下幾點。
⑴ 節(jié)省存儲空間。目前存儲地圖數(shù)據(jù)的最常用方式是直接將shapefile格式的矢量數(shù)據(jù)文件存儲在文件系統(tǒng)中[2],但這樣往往會占用較大的存儲空間,尤其是在存儲高清晰度的衛(wèi)星視圖時。但是,使用MySQL存儲地圖數(shù)據(jù)可以完全避免這種狀況出現(xiàn)。
⑵ 發(fā)布速度快捷。Geoserver對MySQL數(shù)據(jù)源的支持使得使用MySQL存儲空間數(shù)據(jù)成為了可能。相比于從文件系統(tǒng)中讀取大量shapefile矢量數(shù)據(jù)進行渲染和發(fā)布,從MySQL讀取地圖數(shù)據(jù)會更加方便、快捷、高效。因為從文件系統(tǒng)中讀取矢量數(shù)據(jù)速度遠比從MySQL中讀取WKT數(shù)據(jù)慢很多。
⑶ 便于交互操作。webGIS往往需要與用戶進行交互操作,即用戶可以通過在頁面上操作地圖要素實現(xiàn)對地圖數(shù)據(jù)的修改。使用shapefile文件的GIS系統(tǒng)就很難通過Web編程實現(xiàn)對矢量數(shù)據(jù)的修改即交互操作。但是,利用Web編程修改MySQL中的數(shù)據(jù)卻可以簡單而高效地實現(xiàn)。
⑷ 數(shù)據(jù)的安全性更有保障。使用shapefile文件的GIS系統(tǒng)的所有的地圖數(shù)據(jù)均暴露在文件系統(tǒng)中,因此存在一定的安全隱患[3]。使用MySQL存儲地圖數(shù)據(jù)時,除非操作者獲知數(shù)據(jù)庫的系統(tǒng)密碼,否則無法修改甚至查看地圖數(shù)據(jù)文件。這樣就從根本上保證了地圖數(shù)據(jù)文件的安全性。
3 地圖渲染機制
常規(guī)的地圖渲染機制是先將空間地理數(shù)據(jù)和地圖樣式數(shù)據(jù)加載到客戶端,然后由客戶端完成對空間地理數(shù)據(jù)的渲染并生成圖片格式的地圖,之后再將整張地圖圖片加載至瀏覽器進行顯示。但這種機制帶來的問題是地圖在客戶端的顯示速度較慢,通常會出現(xiàn)卡頓現(xiàn)象,這種現(xiàn)象嚴重影響了用戶體驗。
為了提高地圖在客戶端的加載速度,以獲得更高的系統(tǒng)性能,本系統(tǒng)在對空間地理數(shù)據(jù)進行渲染時采用的是先渲染后加載的機制。這種機制決定了對地圖數(shù)據(jù)的渲染必須在服務(wù)器端執(zhí)行和完成。相對于服務(wù)器自身在硬件和軟件上的性能來說,這種機制并不會給服務(wù)器造成負擔。與客戶端完成地圖渲染的機制相比較,在服務(wù)器端完成渲染的機制將會使整個webGIS系統(tǒng)具有更高的地圖加載速度。
在本系統(tǒng)的地圖渲染機制中,對空間地理數(shù)據(jù)渲染是在地圖數(shù)據(jù)的發(fā)布時進行的。發(fā)布地圖數(shù)據(jù)時,Geoserver首先從MySQL中取出空間地理數(shù)據(jù),然后讀取現(xiàn)成的地圖樣式配置文件(圖1中的sld文件)或者讀取管理員給定的樣式配置。根據(jù)指定的樣式,Geoserver將空間地理數(shù)據(jù)進行渲染后生成特定風格的地圖并發(fā)布, Geowebcache會對渲染后的地圖進行切片處理,并將切片存儲到切片緩存區(qū)。
4 數(shù)據(jù)加載機制
數(shù)據(jù)加載即地圖數(shù)據(jù)從服務(wù)器端向客戶端的傳輸。地圖文件在網(wǎng)絡(luò)上傳輸時通常采用JPG/JPEG、PNG、GIF等位圖格式,在圖片較大或者網(wǎng)絡(luò)狀況不良的情況下,較低的地圖文件加載速度將會使整個webGIS系統(tǒng)的性能變得很差。
在服務(wù)器端切片并緩存、在客戶端異步下載切片的數(shù)據(jù)加載機制是一種可靠、有效的地圖數(shù)據(jù)加載機制。這種機制中,地圖數(shù)據(jù)的加載過程需要分為兩個部分,一是地圖的渲染、切片,二是切片的組織、索引。
4.1 地圖切片模型與緩存機制
對地圖切片是進行地圖緩存的鋪墊。地圖切片緩存會明顯減小整幅地圖圖像文件的存儲與傳輸數(shù)據(jù)量,因而可以在很大程度上解決地圖加載速度慢的問題。
切片操作是將已經(jīng)渲染好的一定坐標范圍的位圖格式的地圖圖片按照指定的或者默認的縮放級別(比例尺),以及指定的尺寸和存儲格式分割成若干行和列的正方形圖片(稱之為切片),然后將切片以特定的命名規(guī)則進行命名,之后再以特定的組織方式存儲到數(shù)據(jù)源[4]。對全部地圖進行切片并緩存的操作由Geowebcache完成。
由于這種緩存機制的切片組織方式類似于金字塔結(jié)構(gòu),所以這種切片緩存機制也被稱為金字塔模型的靜態(tài)地圖緩存,這種機制下的切片模型也被稱作地圖切片金字塔模型。地圖切片金字塔模型是一種多分辨率層次模型,從切片金字塔的頂層到底層,地圖顯示的比例尺依次增大,地圖的分辨率也越來越高,但每一層的地圖切片所表示的地理范圍保持不變[5]。
這種模型是一種四叉樹結(jié)構(gòu),結(jié)構(gòu)的第n層有22n個節(jié)點,第0層的節(jié)點被稱為根節(jié)點。假設(shè)在第0層的根節(jié)點圖片中可以看到整個目標區(qū)域的地圖,那么第1層的4張圖片中的每一張圖片就只能顯示1/4目標區(qū)域的地圖,在第2級的16張圖片中的每一張圖片就只能顯示目標區(qū)域的1/16[6],如圖2所示。
作為配合,本系統(tǒng)在客戶端也使用緩存策略,即實現(xiàn)服務(wù)器端和客戶端的雙緩存。客戶端使用Ajax技術(shù)異步加載服務(wù)器上的每一個切片,需要哪部分切片就加載哪部分切片,不做多余加載,并在加載完成后對所加載的切片進行緩存。因此,用戶在進行交互操作(如移動地圖)時客戶端就不必重復(fù)向服務(wù)器請求所有地圖切片,而只用加載那些需要的、未被加載的切片,已經(jīng)加載過的地圖切片可以直接從本機獲取。這種策略必然在客觀上減少用戶在地圖加載過程中的等待時間。這一策略的使用極大地提升了系統(tǒng)的性能與靈活性,該策略的具體算法流程如圖3所示。
4.2 地圖切片的組織與索引
地圖作為GIS系統(tǒng)交互操作的入口,如何使其能高速顯示是GIS系統(tǒng)首先要考慮的問題。解決這一問題需要考慮地圖數(shù)據(jù)的組織方式和地圖展現(xiàn)技術(shù)兩個方面[7]。
四叉樹結(jié)構(gòu)的地圖切片模型決定了本系統(tǒng)必須采用線性四叉樹結(jié)構(gòu)的切片組織模型來建立地圖切片的存儲與索引機制。所以,切片組織模型也是金字塔結(jié)構(gòu),模型中每一個切片都代表四叉樹中的一個節(jié)點。在地圖切片索引時,四叉樹的查找特性保證了系統(tǒng)能快速定位到目標切片,從而能夠高效使用地圖切片數(shù)據(jù)。這種切片組織和索引方式尤其適用于需要具有交互功能的、訪問量大且對響應(yīng)速度要求高的webGIS平臺,如向企業(yè)提供WebGIS服務(wù)的實際應(yīng)用型網(wǎng)站。
基于金字塔模型的地圖切片存儲與索引機制的建立包括三個步驟:首先是對地圖進行邏輯分塊,然后是對地圖進行物理分塊,最后是對切片按照一定的機制進行編碼。
邏輯分塊與上文描述的地圖切片模型相對應(yīng),進行地圖切片劃分時,從地圖左上角開始從左至右并從上至下按行、列矩陣依次劃分并編號,編號時需要保證四叉樹的層號與地圖切片金字塔模型的層號保持完全一致(見圖2)。
物理分塊是對地圖圖片進行物理切割生成地圖切片,這一操作必須要在邏輯分塊完成之后進行。為了避免切片重新拼接成地圖時會出現(xiàn)“縫隙”,分塊操作時需要對邊界切片中的多余部分用默認像素進行填充。編碼是指將分塊所得的地圖切片按切片所在的行號、列號編號保存。
Geowebcache會根據(jù)指定的或者默認的縮放級別(比例尺)對全部地圖進行切片并緩存。不同層級上的地圖切片以不同的結(jié)構(gòu)組織,層級組織名稱(編號)可由地圖切片金字塔的層數(shù)及地圖的縮放級別按照一定的算法換算生成。地圖切片的數(shù)量會隨金字塔層數(shù)的增加而劇烈增多,將過多的數(shù)據(jù)文件存儲在同一存儲區(qū)域中會導(dǎo)致對數(shù)據(jù)的管理和維護有困難。為了維護和管理方便,需要對每一層切片文件再建立索引,可直接取地圖切片時的切片組織行列式的行號數(shù)字作為索引。切片緩存文件組織結(jié)構(gòu)的組織形式如圖4所示。
地圖切片的索引可用二維數(shù)組存儲,每個二維數(shù)組對應(yīng)一層切片矩陣,每個數(shù)組元素都是一個地圖切片的存儲路徑,元素的下標值與它所存儲的地圖切片在矩陣行列中的行列號相同。另外,切片矩陣所對應(yīng)的層號可使用一維數(shù)組存儲,數(shù)組各元素的索引與切片矩陣的層號相對應(yīng)[8]。具體的索引布局如圖5所示。
服務(wù)器收到客戶端發(fā)來的地圖數(shù)據(jù)請求后會根據(jù)客戶端請求的目標地圖范圍索引到切片緩存區(qū)的對應(yīng)位置,若存在目標數(shù)據(jù)的緩存切片,則直接取出目標切片返回給客戶端。直接使用文件系統(tǒng)的形式組織和管理地圖切片不便于對地圖數(shù)據(jù)進行數(shù)據(jù)操作,而且也不利于提升整個webGIS系統(tǒng)的響應(yīng)速度和穩(wěn)定性。在統(tǒng)一的管理平臺的情況下,對大量的地圖數(shù)據(jù)切片文件進行維護和更新會比較繁瑣而低效。使用數(shù)據(jù)庫來管理數(shù)以千計甚至數(shù)以萬計的地圖切片文件是最安全有效的方式,通過地圖數(shù)據(jù)庫管理平臺,對地圖切片的更新與維護變得簡單而高效。通過各方面性能的比較與選擇,本文使用MySQL作為本系統(tǒng)的地圖數(shù)據(jù)庫。
為了加快地圖切片的加載速度,必須對切片的索引建立一種高效、可靠地機制。由于不同層級的切片的組織方式不同,所以需要對不同層級的切片建立不同的索引機制,這樣才能獲得較快的響應(yīng)速度,并兼顧了后臺地圖數(shù)據(jù)管理、快速發(fā)布和前臺地圖快速展現(xiàn),這種機制可以應(yīng)用于絕大多數(shù)的webGIS應(yīng)用。
5 結(jié)束語
本論文針對企業(yè)的應(yīng)用需求,設(shè)計和實現(xiàn)了一個具有高擴展性、高移植性、高穩(wěn)定性、高性能的webGIS系統(tǒng)。經(jīng)過實際測試,該系統(tǒng)表現(xiàn)出的優(yōu)秀性能完全滿足了企業(yè)的實際應(yīng)用需求。該系統(tǒng)的高擴展性使得該系統(tǒng)的解決方案也同樣能解決其他場景下的GIS問題。
該系統(tǒng)與其他相關(guān)研究和應(yīng)用的最大區(qū)別在于,系統(tǒng)使用了對象關(guān)系型數(shù)據(jù)庫存儲空間地理數(shù)據(jù),并使用了先渲染后發(fā)布地圖數(shù)據(jù)處理機制。在數(shù)據(jù)加載時,為了加快速度,參考并使用了其他系統(tǒng)的地圖切片技術(shù)。雖然該系統(tǒng)所提供的方案具有解決GIS問題的普遍意義,但在服務(wù)器端的性能優(yōu)化仍然是需要繼續(xù)考慮和解決的問題。
參考文獻:
[1] 高志敏.WebGIS中若干關(guān)鍵技術(shù)研究[D].浙江工商大學碩士學位論文,2011.
[2] 李曉歡.基于WebGIS的地圖共享系統(tǒng)的設(shè)計與實現(xiàn)[D].北京郵電大學碩士學位論文,2009.
[3] 商秀玉.WebGIS海量瓦片數(shù)據(jù)管理引擎的設(shè)計與實現(xiàn)[D].浙江師范大學碩士學位論文,2012.
[4] 黃夢龍.瓦片地圖技術(shù)在桌面端GIS中的應(yīng)用[J].地理空間信息,2011(4):149-151,193
[5] 黃杰.海洋環(huán)境綜合數(shù)據(jù)時空建模與可視化研究[D].浙江大學碩士學位論文,2008.
[6] 蘇旭明,譚建成.WebGIS中瓦片地圖關(guān)鍵技術(shù)研究[J].北京測繪,2012.2:9-12
[7] 曹海濤,賈博,張波.移動GIS切片地圖展現(xiàn)技術(shù)[J].計算機系統(tǒng)應(yīng)用,2013.12:215-218
[8] 周沛.智能交通系統(tǒng)中的瓦片地圖技術(shù)研究與應(yīng)用[D].同濟大學碩士學位論文,2008.