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