开源GIS体系结构
目录
2.1从开发结构角度看
一套GIS的完整开发框架,包括四个组成部分:标准层、数据库层、平台层和组间层。这四个部分从下到上,从底层到高层,共同构成一个完整的体系。
2.1.1标准层
标准层主要是用于制定各类标准。开放的GIS标准主要有两大体系:OGC(http://www.opengeospatial.org/)、ISO/TC211(www.isotc211.org/)。前者为那些法律上的国际组织制定的标准添加详细的实现标准,同时也在市场需要的时候扩展那些法律上的标准,其侧重于系统的实现上;后者所制订的ISO19100系列的地理信息标准,是属于基础性的标准,注重概念性规格叙述,独立于执行平台外。
其中,WKT(Well-Known Text)与WKB(Well-Known Binary)是OGC制定的空间数据的组织规范,顾名思义,WKT是以文本形式描述空间数据,而WKB是以二进制形式描述空间数据。目前大部分支持空间数据存储的数据库构造空间数据都采用这两种方式。
2.1.2数据库层
数据库层主要是采用开源地理信息标准采用开源方式开发的空间数据库项目,包括POSTGIS、MySQL空间扩展等。
《Simple Features specifications for SQL》是OGC制定的关于在基于SQL的关系数据库中存储空间数据标准。这个标准(如图)定义了数据类型、空间操作符号、输入和输出格式、函数以及其他。大多数SQL数据库的空间扩展都遵循这个标准,包括PostGIS和MySql空间扩展。
2.1.2.1PostGIS
PostGIS支持所有的空间数据类型,这些类型包括:点(POINT)、线(LINESTRING)、 多边形(POLYGON)、多点(MULTIPOINT)、 多线(MULTILINESTRING)、 多多边形(MULTIPOLYGON)和集合对象集(GEOMETRYCOLLECTION)等。PostGIS支持所有的对象表达方法,比如WKT和WKB。PostGIS支持所有的数据存取和构造方法,如GeomFromText()、AsBinary(),以及GeometryN()等。PostGIS提供简单的空间分析函数(如Area和Length)同时也提供其他一些具有复杂分析功能的函数,比如Distance。PostGIS提供了对于元数据的支持,如GEOMETRYCOLUMNS和SPATIAL
REF SYS,同时,PostGIS也提供了相应的支持函数,如AddGeometryColumn和DropGeometryColumn。PostGIS提供了一系列的二元谓词(如Contains、Within、Overlaps和Touches)用于检测空间对象之间的空间关系,同时返回布尔值来表征对象之间符合这个关系。PostGIS提供了空间操作符(如Union和Difference)用于空间数据操作。比如,Union操作符融合多边形之间的边界。两个交迭的多边形通过Union运算就会形成一个新的多边形,这个新的多边形的边界为两个多边形中最大边界。
2.1.2.2MySql空间扩展
MySQL是世界上最流行的开源数据软件。MySQL从4.1开始引入了空间功能,实现和使用方式基本和POSTGIS类似。
2.1.3组件层
数据库组件层按照功能可分为两类:数据管理组件(所谓数据引擎吗?)和分析组件。
2.1.3.1数据管理组件
(1)GDAL
GDAL(http://www.gdal.org/)是一个基于C++的栅格格式的空间数据格式解释器。作为一个类库,对于那些用它所支持的数据类型的应用程序来说它代表一种抽象的数据模型。GDAL持大多数的栅格数据类型。
在开发上GDAL支持多种语言的接口如:Perl、Python、VB6、Java、C#。
(2)OGR
OGR(http://www.gdal.org/ogr/)是C++的简单要素类库提供对各种矢量数据文件格式的读取(某些时候也支持写)功能。OGR是根据OpenGIS的简单要素数据模型和Simple features for COM(SFCOM)构建的。OGC也支持大多数的矢量数据类型支持数类型。
(3) GeOxygene
GeOxygene(http://www.oxygene-project.sourceforge.net/)基于Java和开源技术同时提供一个实现OGC规范和ISO标准可扩展的对象数据模型(地理要素、几何对象、拓扑和元数据)。它支持Java开发接口。数据存储在关系数据中(RDBMS)保证用户快速和可靠的访问数据,但用户不用担心SQL描述语句,他们通过为应用程序建立UML和Java代码的模型。在对象和关系数据库之间使用开源软件进行映射。到现在可以使用OJB同时支持Oracle和PostGIS中的数据。
(4) GML4J
GML4J(http://gml4j.sourceforge.net/)是一个作用于Geography Markup Language(GML)的Java API工具。当前GM4J的作用是一个GML数据的扫描器。通过它可以读取和解释那代表地理要素、几何对象、它们的几何、要素的属性、集合对象的属性、复杂属性、坐标系统和其他的GML结构的XML。现阶段GML4J只支持GML读取和访问,在以后将支持GML数据的修改。
2.1.3.2分析组件
(1)JTS
JTS Topology Suite(http://sourceforge.net/projects/jts-topo-suite/)是一套2维的空间谓词和函数的应用程序接口。它由Java语言写成,提供了全的、延续的和健壮的基本的2维空间算法的实现,并且效率非常高。
Net Topology Suite(http;//nts.sourceforge.net/)则是一个.Net的开源项目,该项目的主要目的是将JTS
Topology Suite应用程序提供给.Net应用程序使用。
(2) GSLIB
GSLIB(http://www.gslib.com/)是一个提供了空间统计的程序包,它是当前最强大和综合的一个统计包,并且具有灵活性和开放的接口。其缺点是缺少用户支持,用户界面不友好且缺少面向对象建模能力。
(3) PROJ.4
PROJ.4(http://trac.osgeo.org/proj/)是一个开源的地图投影库,提供对地理信息数据投影以及动态转换的功能,WMS,WFS或WCS Services也需要它的支持。
(4)GeoTools
GeoTools(http://www.geotools.org/)是也是遵循OGC规范的GIS工具箱。它拥有一个模块化的体系架构,这保证每个功能部分可以非常容易的加入和删除。
GeoTools目标是支持OGC所有的规范并且各类国际规范和标准。
GeoTools已经在一个统一的框架下开发了一系列的JAVA对象集合,其完全满足了OGC的服务端的各种服务并且提供了OGC兼容的单独应用程序。GeoTools项目由一系列的API接口以及这些接口的实现组成。开发一整套产品或应用程序并不是GeoTools的目的,但是其鼓励其他应用项目使用它以各类工作。
GeoTools.NET(http:// geotoolsnet.sourceforge.net/Index.html)则是与Java对应的.NET版本。
2.1.4平台层
平台层主要是构建在标准层、数据库层、中间件层基础上的可以扩展的系统框架。使用平台层可以简化我们搭建GIS框架的工作量。通过对平台的二次开发扩展可以让我们搭建基于GIS开放框架的GIS应用系统。平台多基于开源的GIS标准,同时兼容开源的空间数据库,与整个开放框架体有很好的兼容性。平台层根据应用的不同这里可以分为两大类:桌面平台、平台。桌面平台主要是指用于桌面应用的平台框架,web平台主要是指应于web应用的平台框架。
2.1.4.1桌面平台
(1)Grass GIS
GRASS(地理资源分析支持系统, http://grass.fbk.eu/)是一个栅格/矢量GIS、图像处理系统和图件成图系统。GRASS包括超过350个程序和工具,实现:1)显示器和纸质地或图象的打印显示;2)操作栅格、矢量或点数据;3)处理多光谱图像数据;4)创建、管理和存储空间数据。GRASS支持图形界面或文字界面。
GRASS可以与商用打印机、绘图仪、数字化仪或商用数据库交互。
GRASS基于GNUGPL协议下发行,有超过100万行的C源代码可以自下载得到。GRASS提供了一个复杂的GIS库,可用于开发自己的项目。
(2)OSSIM
OSSIM(http://www.ossim.org/)是一个用于遥感、图片处理、地理信息系统、照相测量方面的高性能软件。OSSIM库主要使用C++完成,支持多种平台,现在包括Linux、dows、MacOS X和Solaris,并且可以移植到其他平台。由于OSSIM库用了模型一控制器一视图(MCv)的结构,所以算法及实现与GUI是分离的,使得OSSIM可以支持多种GUI接口。第一个GUI的实现使用了QT,其的GUI框架及接口也在开发计划中(如Cocoa/Windows等)。
(3)SharpMap
SharpMap(http://www.codeplex.com/SharpMap)是一个基于.net 2.0使用c#开发的Map渲染类库,可以渲染各类GIS数据(目前支持ESRIShape和PostGIS格式),可应用于桌面和Web程序。目前稳定版本为0.9(2.0beta已发布),代码行数10000行左右,实现了下功能:
①支持的数据格式:PostGreSQL/PostGIS,ESRI Shapefile,支持WMS layers,支持ECW 和JPEG2000 栅格数据格式;
②Windows Forms 控件,可以移动和缩放;
③通过HttpHandler支持ASP.net程序;
④点、线、多边形、多点、多线和多多边形等几何类型和几何集合(GeometryCollections)等OpenGIS Simple Features Specification;
⑤可通过Data Providers(增加数据类型支持)、Layer Types(增加层类型)和Geometry Types等扩展;
⑥图形使用GDI+渲染,支持anti-aliased等;
⑦专题图。
SharpMap目前可以算是一个实现了最基本功能的GIS系统,但一些很重要的功能,例如投影,比例尺,空间分析,图形的属性信息,查询检索等等,通过同NTS等开源空间类库的结合可以在SharpMap中实现的空间变换、缓冲区等功能。
(4) World Wind
World Wind(http://worldwind.arc.nasa.gov/)是个开放软件,允许用户修改WorldWind软件本身。软件用C#编写,调用微软SQLServer影像库TerrainServer进行全球地形三位显示,低分辨率的Blne marble数据包含的初始安装内,当用户放大到特定区域时,附加的高分辨率数据将会自动从NASA服务器上下载。它通过将遥感影像与RTM高程(航天飞机雷达地形数据库)叠加生成三位地形。在功能方面,软件具有长度测量功能(仅能测量两点间的直线距离)、坐标和高程查询、屏幕截图、添加标注及三位动态显示等功能。
(5) MapWindow
MapWindow GIS(http://mapwindow4.codeplex.com/)桌面应用程序是一个免费开源基于标准的地理信息软件,使用它可以浏览和编辑多种GIS数据格式。这个软件包括很多地理处理的插件如:缓冲分析、合并处理等,也可以使用脚本编辑器编写VB.NET和C#的脚本。最新版本的MapWindow应用程序完全基于.NET2.0平台和C#。现在又开发出了MapWindow.Web可以让用户更容易开发基于ASP.Net的web应用。这样MapWindow逐渐形成一个完整的体系,从开发嵌入式系统的MapWinGIS.OCX到应用程序框架的MapWindow应用程序再到发布web程序的MapWindow.web。
MapWindow 6(http://mapwindow6.codeplex.com/)是在MapWindow 4的基础上进行改进,整个框架采用C#完成,代码完整清晰,其优点是:
①完全采用.net平台(不需要COM注册或DLL加载);
②可以通过使用Mono运行在Mac或Linux平台上;
③大量扩展了符号集,点、线、面的符号化更丰富,而且可以基于属性内容进行专题化,同时支持矢量化的字体符号;
④面向对象的代码:直接对各要素进行重叠分析、相交分析等。支持OGC的几何对象模型,基于System.Data.DataTable的数据集;
⑤可兼容的插件模式:插件的接口就像普通对象的事件对象一样;
⑥组件模式:所有的组件通过MapWindow.dll提供,能够拖放控件就可以定制GIS程序。
(6)QGIS
QGIS和GRASS是很好的桌面GIS,当然基于ECLIPSE平台的UDIG也是另外一个选择。QGIS的最大特点在于界面很友好,熟悉ARCGIS的人都能很快的掌握QGIS的操作,另外QGIS对WMS的支持也不错。再者QGIS可以无缝集成POSTGIS,最后QGIS几乎完全照搬了GRASS的分析功能,因此其分析功能也很强大。GRASS本是美国军方开发的GIS,开源后一直受到美国大学老师们的青睐,它可以提供很多ARCGIS能提供的分析功能(当然每一种功能可选的算法没后者多),但是GRASS的界面比较丑陋,很多功能需要手动运行命令,因此不太适合大多数人用。基于eclipse平台的UDIG是桌面GIS的又一个选择,由于它是基于eclipse平台的,运行起来比较慢一点,而且比较耗内存。与前两者相比,它的优势在于操作的简单性,而且支持很多种空间数据源,包括很多商业空间数据库,缺点主要是分析功能比较弱。不过现在UDIG发展很迅速,也建议尝试一下。
2.1.4.2 Web平台
(1)GeoServer
GeoServer(http://geoserver.org/)是一个符合J2EE规范,且实现了WCS、WMS及WFS规格,支持TransactionWFS(WFS-T),其技术核心是整合了颇负盛名的JavaGISolkit–GeoTools。对于空间信息存储,它支持ESRI
Shapefile及PostGIS、Oracle、ArcSDE等空间数据库,输出的GML档案满足GML2.1的要求。由于它是纯Java的,所以更适合于复杂的环境要求,而且由于它的开源,所以开发组织可以基于GeoServer灵活实现特定的目标要求,而这些都是商业GIS组件所缺乏的。
GeoServer作为一个纯粹的Java实现,被部署在应用服务器中,简单的如Tomcat等;它的WMS和WFS组件响应来自于浏览器或uDig的请求,访问配置的空间数据库,如PostGIS、OracleSpatial等,产生地图和GML文档传输至客户端。
(2)MapServer
MapServer(http://mapserver.org/)基于C语言,利用GEOS、OGR/GDAL对多种失量和栅格数据的支持,通过Proj.4共享库实时的进行投影变换。同时,还集合PostGIS和开源数据库PostgreSQL对地理空间数据进行存储和SQL查询操作,基于ka.map、MapLab、Cartoweb和Chameleon等一系列客户端JavaScfiptAPI来支持对地理空间数据的传输与表达,并且遵守开放地理空间协会(Open
Geospatial Consortium,OGC)制定的WMS、WFS、WCS、WMC、SLD、GML和FilterEncoding等一系列规范。对不同项目的借鉴和运用,增强了MapServer的功能,并使开发团队更多地关注于网络制图的核心功能。
MapServer是一套用来构建空间网络应用的开源开发环境,并不是一套全能的GIS系统,它更擅长于在网络上展示空间数据,在服务器端实时的将地理空间数据处理成地图发送给客户端。MapServer拥有一个庞大的社区,并有一个来自全球的近20名核心开发人员以致力于产品的维护和增强。同时还有各种不同的组织机构为MapServer的开发和维护提供资助。
Map server有两个版本,完全免费的那个那个版本是由明尼苏达大学开发的,全部是用C语言完成,效率很高可以媲美ARCGIS SERVER,并且支持我所知道的所有GIS数据源,但是相对来说简陋一些,并且没有内置AJAX支持。而map server的企业版本来是auto desk公司的map guide,这个版本功能很强大,而且还有IDE支持,当然IDE也有两个版本(付费的和不付费的),此外auto desk还封装了很多AJAX组建,因此这个版本可以说是真的企业级支持了。而geo server则是另外的选择了,
它是基于Java平台做的,安装时需要JDK1.4(高版本的也不行),其功能上和map server的完全免费版类似,但是性能上次之,只是如果对跨平台要求比较高的话,可以考虑使用它。此外,OTN上的文章一直喜欢使用GEO
SERVER来发布ORACLE SPATIAL的地理数据,也不知道是为什么。
(3) Mapnik
Mapnik(http://mapnik.org/)是一个用于开发地图应用程序的工具。Mapnik用C++写同时有Python绑定接口。使用Mapnik可以很方便的进行桌面和web应用程序开发。
Mapnik主要提供地图的渲染功能,使用AGC库同时提供世界级的标注引擎。可以说Mapnik是现在最强大的开源地图渲染工具。
(4) OpenLayers
OpenLayers(http://openlayers.org/)是一个开源的jS框架,用于在您的浏览器中实现地图浏览的效果和基本的zoom,pan等功能。OpenLayers支持的地图来源包括了WMS,GoogleMap,KaMap,MSVirtualEarth等等,您也可以用简单的图片作为源,在这一方面OpenLayers提供了非常多的选择。此外,OpenLayers实现了行业标准的地理数据访问方法如OGC的Web
Mapping Service(WMS)and Web Feature Service(WFS)协议。OpenLayers可以简单的在任何页面中放入动态的地图。它可以从多种的数据源加载显示地图。MetaCarta公司开始开发了OpenLayers的初始版本同时将它开放给了公众以作为以后各种地理信息系统的应用。
(5) TileCache
TileCache(http://tilecache.org/)是一个实现WMS.C的标准的服务器, TileCache提供了一个基于PythonTile的WMS.C/TMS服务器,同时具有开可插入的缓存和后台渲染机制。在最简单的应用中,只要求TileCache可以访问磁盘可以运行Python的CGI脚本。同时可以连接需要缓存的WMS服务。使用这些资源,你可以创建任何WMS服务在你的本地硬盘的缓存,同时使用支持WMS-C标准的客户端如:OpenLayers或任何支持TMS的客户端如:OpenLayers和wordKit就可以访问这些缓存数据。采用Python实现,
(6)GeoWebCache
GeoWebCache是一个采用Java实现用于缓存WMS(Web Map Service)Tile的开源项目,易于Geoserver整合,当地图客户端请求一张新地图和Tile时,GeoWebCache将拦截这些调用然后返回缓存过的Tiles。如果找不到缓存再调用服务器上的Tiles,从而提高地图展示的速度。实现更好的用户体验。
2.2从语言派系角度看
从软件底层的开发语言角度讲,开源空间信息软件可以被独立的分为以下三种技术体系门类,在每种分类体系内部,开发人员往往是基于不同的项目交叉工作的,所以这种分法仅仅是方便了熟悉某种开发语言的程序员,对于用户和应用人员而言, 意义不大。
语言 |
开源软件 |
C/C++ |
GRASS、GDAL、OGR、GSLIB、OSSIM、Proj4、QGIS、MapWindow4、MapServer、Mapnik等 |
Java |
GeoTools、GeOxygene 、GML4J、MapTools、GeoServer、JTS等 |
.NET |
NetTopologySuite、GeoTools.NET、SharpMap、World Wind、MapWindow6等 |
脚本 |
OpenLayers、TileCache等 |
3. .NET环境下的GIS开源软件应用
作为一个一直在Windows环境下开发的C#程序员,对如何利用这些开源资源进行开发很有兴趣。对于一个典型的GIS应用系统,系统的各个层次都可以构建在开放的GIS开发框架之下。而考虑使用.net开发环境,所以系统中的开放资源需要可以在Windows下面运行同时有.net接口。同时系统需要有桌面应用同时又需要可以发布Web应用。
因此,在.NET环境下,利用开源GIS进行项目开发大致可分为两种:
(1)Web环境,使用PostGIS(数据库)+SharpMap/MapWindow6(桌面软件,做图,发布服务)+TileCache(地图缓存)+OpenLayers(前端)进行开发
在该开发模式下, PostGIS主要用于存放空间数据,同时也用于处理空间查询以及空间操作。PostGIS基于PostgreSQL实现了OGC的((Simple Features specifications for SQL))标准。PostGIS是当前最先进的开源空间数据库,功能强大而且也相当稳定。SharpMap/MapWindow6可以提供WMS服务同时地图渲染非常美观,但是WMS本身效率不是很高,每次请求都要到重新动态的渲染生成用户请求的地图图片这样效率非常低。这里选择TileCache作为WMS的缓存引擎。瓦片缓存TileCache在逻辑上位于OpenLayers与SharpMap/MapWindow6之间,用于管理SharpMap/MapWindow6生成的数据,同时处理前台OpenLayers传递的请求。TileCache将用户浏览过的图片缓存到缓存服务器本地硬盘,这样下次用户请求同样数据的时候就不用再通过地图渲染引擎而是直接读取本地缓存地图大大的提高的地图访问速度。通过OpenLayers作为客户端可以很快速的搭建客户端系统。OpenLayers可以读取通过TileCache提供的缓存数据,同时OpenLayers界面美观性能优越大大降低了客户端开发的工作量。
(2)桌面环境,使用PostGIS+NetTopologySuite+SharpMap/MapWindow6进行开发
在该开发模式下,PostGIS作为数据库引擎,作为数据管理和分析工具。NetTopologySuite作为空间数据操作和管理的中间件。SharpMap/ MapWindow6作为提供嵌入式GIS开发组件,提供GIS功能。PSN适合用户微软.Net开发环境下,小型的嵌入按式GIS系统的开发。PostGIS有.Net的数据访问组件,NetTopologySuite和SharpMap/MapWindow6完全是基于C#的开源项目。因此,可以很方便的集成开发处桌面GIS应用系统。
Java环境下:
基于Java EE标准体系的GIS服务平台架构:OpenLayers+GeoServer+GeoWebCache+PostgreSQL+Eclipse/MyEclipse。
转载自:https://blog.csdn.net/GISlqj/article/details/51228902