吳多朋 王 錚 王曉輝
(吉林省基礎地理信息中心,吉林 長春130062)
“天地圖”是國家測繪地理信息局主導建設的,為政府、企業、公眾提供權威、可信、統一的地理信息服務平臺。截止2014年底,全國共有30個省份建成了天地圖省級節點,145個市(含縣級市)建立了市級節點,天地圖省級節點僅在政府部門的應用達684個[1]。“天地圖·吉林”是天地圖省級節點之一,項目成果應用推廣過程中因商業GIS軟件平臺使用和維護成本高,導致應用推廣難度大,針對該情況探索基于開源GIS軟件構建前置服務平臺的可行性,實現從數據存儲管理、服務發布管理到應用展現的一套技術解決方案。平臺構建模式是:數據庫存儲管理-PostgreSQL+PostGIS;地圖服務發布與管理-GeoServer;應用端地圖表現-Openlayers.基于該技術架構設計開發了吉林省地理省情信息系統應用項目,運行效果表明,基于開源GIS平臺的前置平臺能夠滿足天地圖中小規模應用需求,具有成本優勢,值得推廣。
近年開源GIS發展迅速,國外FreeGIS網站統計約有356種開源GIS軟件[3],產品涉及桌面應用軟件、數據庫、類庫、中間件、移動GIS和WebGIS等。具有代表性的開源GIS項目有:GIS桌面軟件GRASS、QGIS,空間數據庫PostgreSQL/Post GIS、MySQL/MySQL Spatial,Web地圖服務器Geoserver、Mapserver,Web客戶端軟件Openlayers、Mapbuilder,中間件Geo Tools、Mapwindow,類庫GDAL等等。以下主要介紹前置平臺開發技術路線中使用的開源GIS軟件。
Geoserver是一個J2EE開發的Open GIS Web服務器,它遵循OGC多項開放地理信息服務規范,如網絡地圖服務(WMS)、網絡要素服務(WFS)和網絡覆蓋服務(WCS)等,實現數據作為maps/images來發布(WMS),矢量要素數據也可以直接發布實際數據形式(WFS),支持用戶通過網絡訪問如遙感影像、數字高程模型等柵格數據(WCS),同時提供了對數據修改、刪除和新增功能(WFS-T)。通過GeoServer可以比較容易在不同用戶之間迅速共享空間地理信息。
Opnelayers是一個專為WebGIS客戶端開發提供的JavaScript類庫包,用于實現標準格式發布的地圖數據訪問,它支持多種來源的地圖數據,如OpenGIS的WMS、WFS等及商業性地圖服務(如 Google Maps,Bing Maps等),Openlayers實現在網絡瀏覽器上顯示瀏覽地圖,并實現地圖放大、縮小、漫游等基本操作,同時還可進行點線面選取、要素查詢、圖層疊加等不同操作,也可對它已有的操作和數據支持類型進行開發擴充,實現更多的功能。
Post GIS是基于PostgreSQL開發的功能強大的開源空間數據庫,實現對關系型數據庫系統PostgreSQL存儲空間數據能力的擴展,類似于Oracle中的Oracle Spatial,它提供空間對象、空間索引、空間操作函數和空間操作符等空間信息服務功能,同時實現并遵循OpenGIS規范,是目前比較著名的開源GIS數據庫。
平臺采用B/S結構體系,主要分為表現層、服務層和數據層三層架構,集成方案選擇GeoServer為地圖服務器,Apache+Tomcat為Web服務器,PostgreSQL+Post GIS為業務數據和空間數據管理平臺,Open Layers為客戶端開發包。
平臺集成架構各層基本功能:
1)表現層:主要是基于web瀏覽器實現數據信息的可視化表現,為用戶提供一個交互界面。如可利用開源JavaScript類庫包Openlayers向服務器端發出服務請求,返回請求結果在瀏覽器中顯示,同時也可以基于桌面端請求數據服務,比如udig,qgis等桌面客戶端。
2)服務層:主要由GIS服務器和 WEB服務器構成,對外提供標準的數據服務。GIS服務采用GeoServer構建并對其進行集成擴展,可對外提供地圖服務符合OGC標準的空間數據互操作接口規范(WMS、WMTS、WFS),業務邏輯通過WEB服務方式實現。
3)數據層:實現對業務數據和空間數據統一化存儲和管理,業務關系數據采用PostgreSQL關系表存儲管理,空間數據使用Post GIS進行存儲管理,其中地圖瓦片數據采用文件形式管理。
在Post GIS中,數據層對應空間數據表,可以支持點、線、多邊形、多點、多線、多多變形和集合對象集等空間數據類型,可以通過四種方式實現數據庫數據的讀寫;①使用PostgreSQL內嵌的命令行工具psql語言實現讀寫;②使用一些小工具,如自身安裝目錄下的shp2pgsql和pgsql2shp,例如導入命令:PostgreSQL\bin>shp2pgsql-s 4236-c D:\test.shp public.vector|psql-d postgis-U postgres-W;③其他GIS軟件讀寫,使用QGIS連接Post GIS實現讀寫,其他軟件也可如u Dig,Grass等;④利用接口在應用程序中讀寫,利用PostgreSQL的jdbc庫或者libpq使用Java和C進行數據讀寫。系統空間數據使用shp2pgsql批量導入,實現空間數據的數據庫管理。另外,也探索了基于Arc-GIS直連開源關系數據庫PostgreSQL,實現空間數據在關系數據庫中的存儲。測試版本ArcGIS 10.1直連Postgres9.0(64位)數據庫。
利用Geoserver實現OGC標準地圖服務的發布,服務發布需要進行名稱空間、數據、樣式類型的配置,實現地圖數據在客戶端的顯示效果的定義。對于WFS和WFS-T服務發布樣式顯示配置采用開源桌面軟件Udig,利用udig對地圖顯示樣式文件SLD進行編輯設置。對于WMS和WMTS服務發布采用GeoWebCache預緩存文件,GeoWebCache相當于是客戶端與服務器端之間的中介,實現提高地圖顯示速度,減輕GeoServer服務器工作負荷,對天地圖已有的瓦片成果通過開發工具轉換成預緩存支持的瓦片結構,修改geowebcache.xml配置文件實現緩存數據服務發布。前置服務中基礎要素底圖數據和遙感影像數據發布為WMTS服務,要素查詢與分析的地名地址、道路等發布為WFS服務。
基于Openlayers在瀏覽器端實現數據服務顯示,業務信息與空間信息集成表現。對于弱GIS部門的Web GIS應用系統主要實現數據服務加載顯示、客戶端服務聚合、業務與空間的關聯查詢定位與要素分析等基本功能。
4.3.1 地圖服務數據加載
加載 WMS、WFS、WMTS等OGC服務數據源。
var wms=new Open Layers.Layer.WMS
(“layername”,”url”,”params”,”options”)
var wfs=new Open Layers.Layer.Vector
(“WFS”,{strategies:[],projection:new Open Layer.Projection(“”),protocol:new Open-Layers.Protocol.WFS({Version:””,
url:””,……}})
var wmts=new Open Layers.Layers.
WMTS ({name:””, url:””,layer:””,style:””
Matrixset:””})
4.3.2 客戶端服務聚合
客戶端服務聚合是通過客戶端服務訪問組件獲取第三方地圖服務信息,然后客戶端服務聚合器將系統本身的服務和第三方服務進行整合,提供給當前客戶端或其他客戶端訪問[4]。實現客戶端GeoServer、ArcGISSever、百度地圖地圖、Google地圖等不同數據服務的聚合。聚合天地圖數據服務地址信息:
get URL:function(bounds){
var level=this.get LevelFor Resolution(this
.map.get Resolution());
var coef=360/Math.pow(2,level);
var x_num=this.top TileFrom X<this.top Tile ToX?Math.round((bounds.leftthis.top TileFrom X )/coef ): Math.round((this.top TileFrom X-bounds.right)/coef);
var y_num=this.top TileFrom Y<
this.top TileTo Y? Math.round((bounds.bottom
-this.top TileFrom Y)/coef):Math.round ((this.top TileFrom Y -bounds.top)/coef);
4.3.3 業務與空間關聯查詢
業務數據與空間數據通過關聯字段建立關聯,實現業務與空間的掛接,指定條件進行查詢定位,關鍵實現代碼為:
markslayer=new Open Layers.Layer.Vector (″ WFS″, { strategies : [ new Open Layers.Strategy.BBOX()],
protocol:new Open Layers.Protocol.WFS({
url:″″ }),style Map:new Open Layers.Style Map({externalGraphic : 'img/markertarget.png',
graphicWidth:20,graphic Height:24,
graphic YOffset:-24,
}),//顯示樣式
filter:new Open Layers.Filter.Comparison({
type:
Open Layers.Filter.Comparison.LIKE,
property:″NAME″,
value:"*"+searchstr+"*"
})//查詢條件
});
map.add Layer(markslayer);
結合2014年“天地圖·吉林”應用示范項目建設內容,利用以上技術路線,采用桌面GIS(QGIS)+數據庫(postgis+Postgres)+GIS服務器(GeoServer)+客戶端應用(Openlayers)的技術路線,開發構建了“吉林省地理省情信息系統”。系統基于B/S的三層架構,以J2EE技術規范作為標準,利用“天地圖·吉林”基本數據服務資源,采用空間數據服務前置的方式,構建地理省情信息發布系統。系統顯示效果如圖1所示:
本文通過對基于開源GIS軟件系統架構和功能進行深入探討和研究,選擇GeoServer+PostGIS+Openlayers等開源軟件技術路線構建天地圖前置服務系統,并應用在吉林省地理省情信息系統建設中,探索建設了一套可將“天地圖·吉林”和數字城市建設成果應用到前置服務機上的地圖服務發布平臺和與之相配套的客戶端軟件系統,探索研究了各開源軟件實現原理和機制,并基于開源地理信息軟件實現從數據存儲管理、數據服務發布到應用展現的一整套技術解決方案。利用開源項目,搭建GIS應用系統,在系統開發和測試過程中,表現出極大的靈活性。隨著國內外開源項目的不斷發展,其在小、巧離線、準在線和在線GIS應用系統中的應用將更加突顯。