APP下载

基于开源GIS的天地图前置服务平台的集成与应用

2016-01-24吴多朋王晓辉

北京测绘 2016年2期
关键词:空间数据数据服务前置

吴多朋 王 铮 王晓辉

(吉林省基础地理信息中心,吉林 长春130062)

1 引言

“天地图”是国家测绘地理信息局主导建设的,为政府、企业、公众提供权威、可信、统一的地理信息服务平台。截止2014年底,全国共有30个省份建成了天地图省级节点,145个市(含县级市)建立了市级节点,天地图省级节点仅在政府部门的应用达684个[1]。“天地图·吉林”是天地图省级节点之一,项目成果应用推广过程中因商业GIS软件平台使用和维护成本高,导致应用推广难度大,针对该情况探索基于开源GIS软件构建前置服务平台的可行性,实现从数据存储管理、服务发布管理到应用展现的一套技术解决方案。平台构建模式是:数据库存储管理-PostgreSQL+PostGIS;地图服务发布与管理-GeoServer;应用端地图表现-Openlayers.基于该技术架构设计开发了吉林省地理省情信息系统应用项目,运行效果表明,基于开源GIS平台的前置平台能够满足天地图中小规模应用需求,具有成本优势,值得推广。

2 开源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软件。

2.1 地图服务器Geoserver

Geoserver是一个J2EE开发的Open GIS Web服务器,它遵循OGC多项开放地理信息服务规范,如网络地图服务(WMS)、网络要素服务(WFS)和网络覆盖服务(WCS)等,实现数据作为maps/images来发布(WMS),矢量要素数据也可以直接发布实际数据形式(WFS),支持用户通过网络访问如遥感影像、数字高程模型等栅格数据(WCS),同时提供了对数据修改、删除和新增功能(WFS-T)。通过GeoServer可以比较容易在不同用户之间迅速共享空间地理信息。

2.2 WebGIS客户端Openlayers

Opnelayers是一个专为WebGIS客户端开发提供的JavaScript类库包,用于实现标准格式发布的地图数据访问,它支持多种来源的地图数据,如OpenGIS的WMS、WFS等及商业性地图服务(如 Google Maps,Bing Maps等),Openlayers实现在网络浏览器上显示浏览地图,并实现地图放大、缩小、漫游等基本操作,同时还可进行点线面选取、要素查询、图层叠加等不同操作,也可对它已有的操作和数据支持类型进行开发扩充,实现更多的功能。

2.3 空间数据库PostGIS

Post GIS是基于PostgreSQL开发的功能强大的开源空间数据库,实现对关系型数据库系统PostgreSQL存储空间数据能力的扩展,类似于Oracle中的Oracle Spatial,它提供空间对象、空间索引、空间操作函数和空间操作符等空间信息服务功能,同时实现并遵循OpenGIS规范,是目前比较著名的开源GIS数据库。

3 前置平台集成架构

平台采用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进行存储管理,其中地图瓦片数据采用文件形式管理。

4 技术难点及解决方案

4.1 空间数据库创建

在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位)数据库。

4.2 数据服务发布

利用Geoserver实现OGC标准地图服务的发布,服务发布需要进行名称空间、数据、样式类型的配置,实现地图数据在客户端的显示效果的定义。对于WFS和WFS-T服务发布样式显示配置采用开源桌面软件Udig,利用udig对地图显示样式文件SLD进行编辑设置。对于WMS和WMTS服务发布采用GeoWebCache预缓存文件,GeoWebCache相当于是客户端与服务器端之间的中介,实现提高地图显示速度,减轻GeoServer服务器工作负荷,对天地图已有的瓦片成果通过开发工具转换成预缓存支持的瓦片结构,修改geowebcache.xml配置文件实现缓存数据服务发布。前置服务中基础要素底图数据和遥感影像数据发布为WMTS服务,要素查询与分析的地名地址、道路等发布为WFS服务。

4.3 客户端地图服务应用

基于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);

4.4 成果应用

结合2014年“天地图·吉林”应用示范项目建设内容,利用以上技术路线,采用桌面GIS(QGIS)+数据库(postgis+Postgres)+GIS服务器(GeoServer)+客户端应用(Openlayers)的技术路线,开发构建了“吉林省地理省情信息系统”。系统基于B/S的三层架构,以J2EE技术规范作为标准,利用“天地图·吉林”基本数据服务资源,采用空间数据服务前置的方式,构建地理省情信息发布系统。系统显示效果如图1所示:

5 结论

本文通过对基于开源GIS软件系统架构和功能进行深入探讨和研究,选择GeoServer+PostGIS+Openlayers等开源软件技术路线构建天地图前置服务系统,并应用在吉林省地理省情信息系统建设中,探索建设了一套可将“天地图·吉林”和数字城市建设成果应用到前置服务机上的地图服务发布平台和与之相配套的客户端软件系统,探索研究了各开源软件实现原理和机制,并基于开源地理信息软件实现从数据存储管理、数据服务发布到应用展现的一整套技术解决方案。利用开源项目,搭建GIS应用系统,在系统开发和测试过程中,表现出极大的灵活性。随着国内外开源项目的不断发展,其在小、巧离线、准在线和在线GIS应用系统中的应用将更加突显。

猜你喜欢

空间数据数据服务前置
大数据时代高校图书馆数据服务的困境及优化路径
地理空间大数据服务自然资源调查监测的方向分析
基于数据中台的数据服务建设规范研究
被诊断为前置胎盘,我该怎么办
前置性学习单:让学习真实发生
国企党委前置研究的“四个界面”
精准的声音还原 Yamaha CX-A5200前置放大器
10项空间数据与信息传输领域国家标准正式发布
GIS空间数据与地图制图融合技术