张海兵
摘要:
为了突破国外地理信息产业的技术封锁,以及商业地理信息软件对用户的限制,降低地理信息软件开发成本,基于桌面开源GIS软件SharpMap,从源码体系上分析其数据访问、图层扩展和地图渲染等机制,结合GIS中間件设计并实现了GIS系统。该系统具备较好的地图渲染功能,并支持GIS的空间分析。采用SharpMap开发的系统可突破商业软件的限制,降低用户成本。
关键词:
开源软件;SharpMap;GIS中间件;空间分析
DOIDOI:10.11907/rjdk.172797
中图分类号:TP319
文献标识码:A文章编号文章编号:16727800(2018)003013105
英文摘要Abstract:In order to break the technical blockade of foreign geographic information industry, break the restriction of commercial geographic information software to users, and reduce the development cost of GIS software, this paper analyzes data access, layer extension and map rendering mechanism of SharpMap source code. Based on the SharpMap, GIS system has been designed and implemented with GIS middleware, which support vector layer mapping rendering and GIS spatial analysis function. The GIS system based on SharpMap could break the limitation of commercial and reduce user cost.
英文关键词Key Words:open source software; SharpMap; GIS middleware; render;spatial analysis
0引言
随着云计算等技术的不断发展与变革,促进了地理信息系统的发展,涌现出越来越多的开源GIS软件。SharpMap作为开源GIS桌面软件系统,是基于.Net开发的Map渲染类库,支持多种数据格式和几何图形类型,且开发便捷。
国内研究者基于SharpMap开展了多方面的应用研究。赵欣等[1]利用开源软件SharpMap实现了SharpMap在露天矿卡车调度系统监控端的应用;徐齐行等[2]采用SharpMap 进行了GML可视化研究;方静涛等[3]基于 C#和 SharpMap实现了浅层地温能资源数据库管理系统的研发;夏正龙等[17]介绍了采用SharpMap将2 300多个降水实况离散点显示成降水色斑图的方法;张学宝等[4]分析了SharpMap的总体架构设计,介绍了软件核心功能的设计和实现原理;刘力赟[5]基于SharpMap对航线设计与呈现进行了研究;陈大东[6]利用SharpMap进行二次开发以实现供水管网调度;张兰慧[7]利用SharpMap在.Net环境下开发了基于B/S结构的青海省气象信息网络数据库。但国内研究者对于SharpMap结构的研究仍较为有限,并未基于SharpMap进行完整的GIS系统设计。本文将对SharpMap的结构进行分析,设计一套基于SharpMap的GIS系统。
1SharpMap体系及底层机制
1.1体系结构
本文以SharpMap 0.9版本为例分析其体系结构,其由IProvider、Features、Feature Layers、Presentation、Reprojection、Map、Display Views 共7层组成,体系结构如图 1所示。
(1)IProvider层:作为一个底层的接口引擎,便于SharpMap读取各种格式的数据,并支持扩展添加新的数据类型。
(2)Features层:通过IProvider 接口层读取的GIS 数据都转化为点、线、多边形、多点、多线等几何类型和几何集合等。
(3)Feature Layers层:特征图元图层,组织各种几何图元,结合Reprojection 实现各种坐标空间的图元投影。
(4)Presentation层:实现各种矢量要素的渲染,设置要素的Style。
(5)Reprojection层:定义图元的坐标系统,或者将图元从一种坐标空间投影到另一种定坐标空间,实现投影转换。
(6)Map层:提供定制工具,用户也可自定义工具。
(7)Display Views 层:为了便于开发,提供定制的桌面和Web控件,用户也可自定制控件。
1.2源码分析
图2是SharpMap在VS 2012下的结构视图,动态库SharpMap.dll由SharpMap 和其他20多个次级名称空间组成,其中SharpMap名称空间下的Map类为系统的核心所在。SharpMap是工程的主体。
(1)Map类:位于SharpMap命名空间下,通过创建Map对象的实例生成地图。Map对象由包含的Layer对象组成Layers集合,通过GetMap方法来Render 地图。
(2)Converts名称空间:提供数据转换服务,实现SharpMap支持的几何图形与WKT、WKB格式的相互转换。
(3)Geometries名称空间:包括SharpMap要使用到的各种几何类及其接口类,是SharpMap的基础之一,其结构如图3所示。所有几何对象都继承自Geometry这个抽象类,其中定义了几何对象应该具备的公共操作。
(4)Layers名稱空间:包括ILayer 接口、Layer 集合类等,代表地图的图层。图4表示了各Layer图层之间的关系。
(5)Layer 是一个抽象类,实现了ILayer 接口。Layer 目前有6个子类,分别是WmsLayer、LabelLayer、LayerGroup 、TileWmsLayer、TileLayer和VectorLayer,分别代表6种不同图层。
(6)Providers名称空间:包括IProvider接口和Shape文件、MsSQL数据、MsSqlSpatial、WFS等数据的读取实现,为SharpMap提供数据读取支持。
(7)Rendering名称空间:包括矢量渲染器类和几个专题图渲染器类,该类可以将几何对象根据其Style设置渲染为一个System.Drawing.Graphics对象。
(8)Styles名称空间:该名称空间主要提供了图层的样式设置类,例如线样式、点样式、填充样式等,其结构如图 5所示。
SharpMap.Extensions是对SharpMap的扩展,包括对图层支持、数据支持及数据转换的扩展。
Forms名称空间包含MapImage控件和MapBox控件,封装了Map类,用于Windows Form编程。
1.3数据访问机制
对于不同数据格式的访问都实现IProvider 接口,每一种数据的打开、关闭、缩放、查询等操作的具体实现可能并不相同,但都遵循统一的接口标准。SharpMap通过实现IProvider接口,支持对Shapefile数据、SQL、OleDB、Oracle、PostGIS[9]、OGR、WMS Server、几何图形数据集等数据来源的访问。
其中,SharpMap的VectorLayer和LabelLayer类的DataSource属性为IProvider接口。通过设置VectorLayer.DataSource和LabelLayer.DataSource,可以获得VectorLayer和LabelLayer图层。SharpMap对数据的访问支持如图6所示。
1.4图层扩展机制
在SharpMap的扩展库中提供了对GDAL[8]栅格图层的支持。由于GdalRasterLayer类的构建过程中用到了GDAL库,且实现了SharpMap中的ILayer接口和抽象类Layer,使得SharpMap项目可以读取GDAL栅格数据。其中GdalRasterLayer类的构建过程如图7所示。
1.5地图渲染机制
地图的渲染包括地图创建、图层创建、样式设置、图层添加、GetMap渲染等步骤。在开发过程中渲染的具体实现如下:①使用Map对象调用公有函数GetMap();②采用GetMap方法遍历每一个Layer图层,每个图层调用Layer 的公有函数Render();③各个 Layer 开始渲染自己,若图层为栅格数据或WMS数据,则返回范围内的图片。若为VectorLayer,则转到第4步;④矢量图层调用IProvider接口中的GetFeaturesInView()函数,返回检索到对象列表;⑤遍历列表中的每个对象,每个对象再调用VectorRenderer类中的不同方法来渲染自己;⑥在VectorRenderer类的不同方法中,还需调用TransformToImage()函数,返回.Net 的一个绘图对象;⑦GDI+会根据不同对象的不同Style进行渲染。
2系统设计
2.1系统结构设计
本系统为三层体系架构,包括数据层、应用层、客户层,如图 8所示。数据层包含本地文件和空间数据。本文通过空间数据引擎访问空间数据库中的数据;应用层通过中间件实现;客户层即表现层,展示相应的处理结果。
本系统采用PostGIS[9]插件作为空间数据引擎。利用Geoserver[10]发布来自文件数据库的数据服务。同时,Geoserver也可发布来自PostGIS的服务,但在本系统中并未应用。
系统中间件包括OGR、GDAL、NTS[11]、EasyGIS[12]、GeoAPI.NET、BruTile等。OGR和GDAL是分别处理矢量和栅格数据的开源库,在本系统中采用这两个开源库扩展系统支持的数据格式,从而实现对多种矢量和栅格数据的支持;NTS是GIS分析和操作的类库,采用GeoAPI.NET和NTS实现对几何图形的操作,从而为扩展SharpMap功能、实现GIS的空间分析功能打下基础;采用BruTile可实现对网络在线地图的访问;采用开源EasyGIS的动态链接库EGIS.ShapeFileLib可实现矢量数据的导出和矢量数据的格式转换。
2.2系统功能设计
系统总体功能结构按不同内容分为8个部分,如图10所示。
(1)地图控制功能:包括新建地图和导出地图。在导出地图功能中实现当前地图的导出,以供地图打印。
(2)基本功能:包括地图拉框放大、拉框缩小、固定放大、固定缩小、全图显示、漫游、点量测、距离测量、面积测量等多种基本功能。
(3)图层控制功能:包括每个图层的移除、缩放到图层、单个图层显示和关闭、导出数据、图层属性信息。其中图层的属性信息包含Symbology、Lables和Source三部分。Symbology中可以对图层进行符号化设计以及渐变色渲染;Lables中可实现对图层的标注功能;Source中可查看图层的范围、来源、地理坐标系统和投影坐标系统。此外,对于矢量数据可以查看其属性表信息以及属性表信息的导出。
(4) 目录树控制:以目录树的形式列举出系统中加载的地图,且包含每个图层的符号化信息,可以对目录树中的所有图层进行开关、展开折合操作,且可以添加新图层。目录树可同时支持矢量图层数据与栅格数据的控制。
(5)空間分析:原型系统提供数据的空间分析功能,包括缓冲区分析、叠加求交分析、擦除分析、均值差除等,以供用户进行特定的分析。
(6)地图服务模块:在联网情况下,访问在线必应地图和wiki地图。此外,可实现WMS和WFS的服务功能。
(7)控制模块:包括GeoServer的启动、停止和管理。
(8)数据库管理模块:包括数据库连接、数据库连接字符串设置以及数据库图层加载。
3系统实现
系统界面一般采用图像界面表达方式,分为菜单栏、工具栏、状态栏、图层目录树(图层控制界面)、地图窗口,主界面如图11所示。
本系统可实现常用的GIS系统功能,如数据导出、图层信息查询、图层属性设置等。对于矢量图层提供单一符号进行图层渲染,如图12所示。此外,还提供渐变色的方式进行渲染,如图13所示。湖北省基础矢量数据渲染效果如图14所示,验证了本系统具备较好的制图渲染功能。
本系统结合中间件NTS实现GIS的空间分析功能,包括缓冲区分析、叠加求交、均值擦除、擦除分析等。
根据实现的空间功能,可以进行案例分析。以市区择房为例进行分析,实际案例如下:
(1)问题:如何找到环境好、购物方便、小孩上学方便的居住区地段?
(2)具备的数据:①城市市区主要交通要道(network_st.shp);②商业中心分布图(Marketplace.shp);③学校分布图(school.shp);④名胜古迹分布图(famous place.shp)。
(3)要求寻求的区域满足以下条件:①离主要交通要道200m之外,以减少噪音污染;②在商业中心的500m服务范围之内;③距学校距离750m之内,以方便小孩上学;④距名胜古迹500m之内,环境优雅。
采用案例提供的择房数据进行空间分析,择房原始数据效果如图 15所示,空间分析择房选址结果如图 16所示。
通过扩展本系统支持栅格数据访问,打开湖北省的DEM数据,效果如图17所示。
4结语
本系统以SharpMap为GIS客户端基础平台,设计了以PostGIS为空间数据引擎,GeoServer为WFS服务器,NTS、GDAL、OGR、GeoAPI.NET等为中间件的GIS系统,较好地实现了一般GIS系统的功能,并以湖北省矢量数据验证了本系统的制图渲染功能,以择房案例验证了本系统的空间分析功能。基于SharpMap进行GIS系统开发,可以突破商业软件的限制,降低用户成本。
但本系统对矢量数据的符号化仅限于利用色彩进行变更,并未提供通过图片或定制符号进行符号化的功能。此外,本文只在C/S下进行SharpMap分析和开发,后续研究将进一步完善并实现B/S系统下的定制开发。
参考文献参考文献:
[1]赵欣,杨多志,于沿涛,等.SharpMap在露天矿卡车调度系统监控端的应用[J].露天采矿技术,2009(5):7375.
[2]徐齐行,敖杰刚.基于SharpMap的GML可视化研究与实现[J].测绘标准化,2012(6):1619.
[3]方静涛,张延军,黄贤龙,等.基于C#和SharpMap的浅层地温能资源数据库管理系统研究和开发[J].世界地质,2012,31(3):608613.
[4]张学宝,包富华,郑江涛,等.基于开源架构的GIS原型系统的设计与开发研究[J].测绘科学,2010,35(4):210211.
[5]刘力赞.基于SharpMap航线设计与呈现的研究与实现[D].北京:北京邮电大学,2009.
[6]陈大.SharpMap在供水管网的应用[J].信息与电脑:理论版,2011(6):210,212.
[7]张兰慧,王式功,尚可政,等.SharpMap在青海省气象信息网络数据库中的应用[J].气象科技,2012,40(1):5760.
[8]GDAL[EB/OL].[20170309].http://www.gdal.org/.
[9]PostGIS[EB/OL].[20170309].http://www.postgis.org/.
[10]GeoServer[EB/OL].[20170309].http://geoserver.org/.
[11]NTS[EB/OL].[20170309].https://sourceforge.net/projects/nts/.
[12]Easy GIS [EB/OL]. [20170309].http://www.easygisdotnet.com/.
责任编辑(责任编辑:黄健)