摘 要: WebGIS網絡地理信息系統是Internet技術應用于GIS地理信息系統開發的產物。在互聯網環境下,以Web頁面作為GIS軟件的用戶界面,把Internet和GIS技術結合在一起,可為各種地理信息應用提供GIS功能,以提高系統性能,使用戶共享互聯網資源。為此,在開源軟件的基礎上,通過使用GeoServer、PostGIS數據庫和OpenLayers實現了WebGIS的展示層、處理層和數據層三層體系框架。
關鍵詞: WebGIS; GeoServer; 空間數據庫; 體系框架
中圖分類號:TP39 文獻標志碼:A 文章編號:1006-8228(2013)12-45-03
Design of WebGIS framework based on open source software
Li Dan
(Computer Department, Sichuan Univercity, Chengdu, Sichuan 610065, China)
Abstract: WebGIS Internet geographical information system is the product of the Internet technology applied to GIS. Based on Internet environment, taking the web page as the user interface of GIS software, combining the Internet with GIS technology, GIS function is offered for various geographic information applications, in order to improve performance, satisfy users' needs and share the Internet resources. A three-layer framework (presentation layers, processing layers, data layers) about WebGIS on the basis of open source software such as GeoServer, PostGIS and OpenLayers is implemented.
Key words: WebGIS; GeoServer; spatail database; framework
0 引言
GIS是基于數據庫管理系統的分析和管理空間對象的信息系統,WebGIS即網絡地理信息系統,是基于Internet平臺,客戶端應用軟件采用網絡協議,并運用在Internet上的地理信息系統。一般有多主機,多數據庫和多個客戶端分布式地連接在Internet上而組成。WebGIS是利用Web技術來擴展和完善地理信息系統的一項技術[1-2],是基于網絡的客戶機/服務器系統;利用因特網來進行客戶端和服務器之間的信息交換;是一個分布式系統,用戶和服務器可以分布在不同的地點和不同的計算機平臺上。WebGIS主要用于空間數據發布,空間查詢與檢索,空間模型服務,Web資源的組織等。WebGIS是基于Internet的GIS,可以有多種方法實現,主要有兩種模式:客戶端/服務器模式(C/S)和瀏覽器/服務器模式(B/S)。
1 設計思想
廣義WebGIS有兩種主要架構:C/S架構的GIS和B/S架構的GIS,狹義上的WebGIS是通過網頁瀏覽器訪問空間數據,進行空間操作。而WebGIS需要滿足空間數據和屬性數據的傳輸瀏覽、專業應用和空間分析等功能,所以采取C/S和B/S混合模式的WebGIS架構。
開源軟件是指開放源代碼的軟件,它最大的優勢是源代碼免費,能更好地實現代碼重用及資源改造。本文設計的WebGIS框架就是在開源軟件的基礎上進行的。
美國OGC(OpenGIS協會,OpenGIS Consortium)提出了OpenGIS(Ope Geodata Interopetation Specification)開放的地理數據互操作規范,OpenGIS是為了使不同的地理信息系統軟件之間具有更良好的互操作性,以及在異構分布數據庫中實現信息共享的途徑[3]。OpenGIS致力于建立一個無“邊界”的、分布的、基于構件的地理數據互操作環境,與傳統的地理信息處理技術相比,基于該規范的GIS軟件將具有很好的可擴展性、可升級性、可移植性、開放性、互操作性和易用性。開源的WebGIS設計思想就來源于OpenGIS。
2 工具的選擇
2.1 空間數據庫
空間數據庫是隨著地理信息系統GIS的開發和應用發展起來的數據庫新技術,主要用來處理空間數據,一般是以一系列特定結構的文件形式組織在存儲介質之上。本文所設計的WebGIS框架選用的是PostGIS數據庫。
PostGIS是空間數據庫PostgreSQL的一個擴展,它是一種對象-關系型數據庫管理系統,在PostgreSQL上增加了存儲管理空間數據的能力。PostGIS提供如下空間信息服務功能:空間對象、空間索引、空間操作函數和空間操作符等。PostGIS的版權被納入到GNU(GNU's Not Unix,革奴計劃)的GPL(General Public License,通用許可證)中,也就是說,任何人可以自由得到PostGIS的源碼并對其做研究和改進。PostGIS支持所有的空間數據類型,包括:點(POINT)、線(LINESTRING)、多邊形(POLYGON)和集合對象集(GEOMETRYCOLLECTION)等。支持所有的數據存取和構造方法,如GeomFromText()、AsBinary()以及GeometryN()等。提供簡單的空間分析函數(如Area和Length),同時也提供其他一些具有復雜分析功能的函數,比如Distance。提供了空間操作符(如Union和Difference)用于空間數據操作。比如,Union操作符融合多邊形之間的邊界,兩個交迭的多邊形通過Union運算就會形成一個新的多邊形,這個新的多邊形的邊界為兩個多邊形中最大邊界。
2.2 地圖服務器
目前較流行的地圖服務器有兩款,一款是MapServer,MapServer的內核使用C++編寫,基于CGI(Common Gateway Interface,通用接口)腳本實現,頁面調用支持PHP(Hypertext Preprocessor,超文本處理語言)、JSP(Java Server Page)等多種語言,并且對OGC的WMS(Web Map Server,網絡地圖服務)和WFS(Web Feature Server,網絡要素服務)規范提供支持。另一款是GeoServer,它是OpenGIS Web服務器規范的J2EE(Java 2 Enterprise Edition,Java2平臺企業版)實現,基于Java和Geotools庫開發。GeoServer功能全面且遵循OGC開放標準,并同時擁有PostGIS與uDig的Refractions公司的技術支持,GoServer對發布WFS和WMS服務提供便捷的支持,并以XML(Extensible Map Language,可擴展標記語言)文件描述所有地圖服務,利用GeoServer可以方便地發布地圖數據,允許用戶對特征數據進行更新、刪除、插入操作,通過GeoServer可以比較容易地在用戶之間迅速共享空間地理信息。GeoServer安裝文件有兩種,一種是常見的.EXE安裝文件,這種安裝方式最簡單,只要確保在電腦上安裝了JDK并且8080端口是開的,按照安裝步驟就可以完成安裝;另一種是以.WAR的形式安裝,開發者電腦上得先安裝有Tomcat,然后將此WAR導入即可[3]。
比較而言,MapServer對WMS的支持更為高效,而GeoServer則更擅長于結合WFS規范的屬性查詢,但就發展趨勢來看,J2EE的架構明顯要占據優勢,并且GeoServer擁有基于Eclipse RCP平臺的開源客戶端uDig,隨著GeoServer的版本更新,其有實力成為今后開源WebGIS解決方案的主流,因此本文選擇了GeoServer作為地圖服務器。
2.3 地圖客戶端
OpenLayers是由MetaCarta公司開發的,用于WebGIS客戶端的JavaScript包,它實現訪問地理空間數據的方法都符合行業標準,比如OpenGIS的WMS和WFS規范,OpenLayers采用面向對象方式開發,并使用來自Prototype.js和Rico中的一些組件。OpenLayers所能夠利用的地圖數據資源有很多,可提供給用戶選擇,比如WMS、WFS、GoogleMap等,當然,用戶還可以用簡單的圖片地圖作為背景圖。采用OpenLayers作為客戶端不會產生瀏覽器依賴性。由于OpenLayers采用JavaScript語言實現,而應用于Web瀏覽器中的DOM(文檔對象模型)用JavaScript實現,同時,Web瀏覽器(比如IE,FF等)都支持DOM。OpenLayers APIS采用動態類型腳本語言JavaScript編寫,實現了類似于Ajax功能的無刷新更新頁面,能夠帶給用戶豐富的桌面體驗[4-7]。
在操作方面,OpenLayers除了可以在瀏覽器中幫助開發者實現地圖瀏覽的基本效果,比如放大(Zoom In)、縮小(Zoom Out)、平移(Pan)等常用操作之外,還可以進行選取面、選取線、要素選擇、圖層疊加等不同的操作,甚至可以對已有的OpenLayers 操作和數據支持類型進行擴充,為其賦予更多的功能。例如,它可以為OpenLayers添加網絡處理服務WPS的操作接口,從而利用已有的空間分析處理服務來對加載的地理空間數據進行計算。同時,在OpenLayers提供的類庫當中,它還使用了類庫Prototype.js和Rico中的部分組件,為地圖瀏覽操作客戶端增加Ajax效果。
3 框架體系結構
本文所開發的WebGIS是在原有的GIS系統的基礎上所做的網絡化開發,把WebGIS框架分為三個部分:基于OpenLayers開發的地圖客戶端和web瀏覽器為展示層;以GeoServer地圖服務器和Web服務器作為處理層,這里的Web服務器選用的是Tomcat,當然也可以選用WebLogic以及GeoServer自帶的Jetty,選用Tomcat是因為OpenLayers是PHP的,所以只有安裝在支持PHP的Tomcat上了;最后以文件系統與PostGIS空間數據庫作為數據層[4-7]。
框架體系結構如圖1所示,首先,客戶端輸入信息或請求并提交給處理層,通過Web服務器處理客戶端的請求,并通過地圖服務器GeoServer提供的接口與數據層通信,數據層主要是存儲空間數據,系統數據等,然后將最終查詢到的結果通過地圖服務器GeoServer、Web服務器Tomcat、地圖客戶端OpenLayers,最后顯示在瀏覽器上。
[GeoServer][WFS] [WMS] [地圖服務器
][Web服務器][Tomcat] [文件系統] [PostgreSQL
空間數據庫][瀏覽器][地圖客戶端
OpenLayers] [展示層][處理層][數據層]
圖1 框架體系結構圖
4 框架展示
本文所采用的是C/S和B/S混合的WebGIS框架,平臺搭建過程主要按照以下步驟完成。
4.1 空間數據庫配置
PostgreSQL的安裝比較簡單,在官網下載最新的版本,按照提示進行安裝,但是在出現application list這一步時要注意,勾選上要安裝的 application,這里必須勾選上PostGIS,安裝完成后,就可以對數據庫進行操作了。PostgreSQL數據庫提供了存儲空間地理數據的模板template_PostGIS,可以以此建立自己的GIS數據庫testgis,具體代碼如下:
CREATE DATABASE testgis
WITH OWNER=postgres
ENCODING='UTF8'
TABLESPACE=pg_default
LC_COLLATE='C'
LC_CTYPE='C'
CONNECTION LIMIT=-1;
ALTER DATABASE template_PostGIS_20 SET search_path=
\"$user\", public, topology;
4.2 將SHP格式地圖數據導入空間數據庫
uDig是一款開源桌面GIS軟件,基于Java和Eclipse平臺,可以進行shp格式地圖文件的編輯和查看。在這里使用這款開源軟件,是為了生成地圖樣式(SLD)文件,Udig支持可視化調整地圖圖形元素的配色方案。
利用PostgreSQL自帶的shp2pgsql.exe工具把shp轉換成sql語句,然后在管理窗口執行C:\Program Files\PostgreSQL\9.1\bin>shp2pgsql.exe G:\shapefiles\test.shp test> G:\shapefiles\test.sql,這樣就完成了地理信息數據的建立,然后要將該數據導入到數據庫testgis中,這一步的執行代碼是:C:\Program Files\PostgreSQL\9.1\bin>psql -d testgis -f G:\shapefiles\test.sql postgre
4.3 搭建地圖服務器GeoServer
在安裝GeoServer之前,必須安裝JDK,并配置好Java的環境變量,我們要把GeoServer發布在Web服務器Tomcat上,所以需要先安裝好Tomcat,然后從官方網下載最新版本的geoserver.war包,把geoserver.war包直接復制到Tomcat的安裝目錄webapps下,啟動Tomcat就可以了。
4.4 使用OpeanLayers實現Web客戶端
Web端顯示地圖數據的實現是基于OpenLayers.js的js實現方法。建立testgis工程,把OpenLayers.js導入到web中,主要實現代碼如下:
//地圖和頁面加載函數
function init() {
//設置地圖縮放范圍和縮放等級,0級比例尺最小
map=new OpenLayers.Map( $('map'),
{ maxScale:500, minScale:500000, numZoomLevels:5 });
//加載WMS
var base=new OpenLayers.Layer.WMS(\"OpenLayers WMS\",
\"http://localhost:8081/geoserver/wms\",
{layers: \"topp:states\"});
map.addLayer(base);
//加載行政區圖層,WFS柵格圖像
var wfs=new OpenLayers.Layer.Vector(\"States\", {
strategies: [new OpenLayers.Strategy.BBOX()],
protocol: new OpenLayers.Protocol.WFS({
//version: \"1.0.0\",
//srsName: \"EPSG:4326\",
url: \"http://localhost:8081/geoserver/wfs\",
featureType: \"states\",
featureNS: \"http://www.openplans.org/topp\"
})
});
map.addLayer(wfs);
完成上述步驟,就可以基本實現圖層的顯示、放大等功能,基本功能實現如圖2所示,后續工作只需添加一些通過控件完成用戶功能需求的代碼即可。
圖2
5 結束語
WebGIS是地理信息系統GIS在Web上的實現,是利用網絡和Web技術對傳統地理信息系統的改造和實現。WebGIS正朝著分布式、標準化、大眾化和開放式的方向發展,在信息技術迅速發展的推動下,WebGIS將會給我們帶來一個更加方便、快捷、靈活的信息世界。本文設計的WebGIS框架是基于開源軟件技術,極大地節約了經濟成本,而且操作簡單方便,當然還有一些地方需要改進和優化,如用戶與瀏覽器的交互還比傳統的桌面GIS遜色,響應速度受寬帶影響等,這些將是下一步需要研究的。
參考文獻:
[1] 百度百科.http://baike.baidu.com/view/41463.htm,2012.11.
[2] 顧進.基于開源的WebGIS平臺研究與地理信息LCD實現[D].中國
礦業大學,2007.
[3] 李新通,何建邦.GIS互操作與OGC規范[J].地理信息世界,2003.5.
[4] 徐立新,趙蕾.開源WebGIS 設計與研究[J].電腦編程技巧與維護,
2012.8:18-19
[5] 任品德,牟健,姜峰.基于WebGIS 技術開發浮標綜合管理平臺系統
的研究[J].海洋技術,2011.9:5-8
[6] 周波,李琦.基于數字城市系統平臺的GIS Server服務器研究與設計[J].
計算機科學,2005.10:100-102
[7] 鄔倫,唐大仕,劉瑜.基于Web Service分布式互操作的GIS.地理信息
科學,2003.19(4):29
[8] GeoServer,the perfect tool to reduce the unemployment rate[EB/OL].
[2012-11-10].http://blog.geoserver.org/.
[9] OpenLayers: Free Maps for the Web[EB/OL].[2012-11-12].
http://www.openlayers.org/.