1、开源GIS应用软件平台开发简介,报告人:季 民山东科技大学 二一年九月,目 录,1. 开 源 软 件 简 介,2. 开源GIS软件分类,3. 开源GIS软件应用,4. 开源空间信息软件框架实例,1.开源软件简介,所谓开源软件指软件的源代码(软件程序的原始文件)是对任何人都完全开放的,即任何人在有关许可协议方式的规范下,具有获得、使用、复制、修改和分发源代码的自由,但为了保护初始源代码的完整性,有关许可协议规定:原创者对源代码修改者的后续行为的自由有一定限制。自由软件和开源的软件具有广泛的共同点,在一般情况下我们统称为“自由开源软件”;考虑到当今它们愈来愈广泛地参与务实的商业活动,我们也可将共简
2、称为“开源软件”。,开源空间信息软件的发展虽然时间不长,仅仅20年左右的时间,但造就了如GRASS、OSSIM这样功能突出、性能异常优越,不亚于任何一款商业软件的标志性项目,更有如WorldWind、MapGuide等用户体验良好、方便用户使用的前端平台。 截止到2006年8月11日,通过互联网可以寻找到的开源空间信息软件项目已经达到229个,在最新的freegis项目中已经可以寻找到的空间信息软件项目更是达到306个。,2. 开源GIS软件分类,GIS开源桌面GIS开源服务器端GIS开源组件GIS开源空间数据类库,(1)GIS开源桌面,桌面版开源GIS软件有GRASS,UDIG,OSSIM,
3、QGIS,MapWindows,gvSIG,Kosmo,JUMP/JCS,SAGA,ILWIS,SharpMap等,目前GRASS已经覆盖了大多数GIS功能,UDIG产品优势在于地图编辑,QGIS用户界面友好。,GRASS是最具有传奇色彩的大型GIS系统,最早由美国军方建筑工程研究实验室构建维护,后来贡献给开源社区,目前GRASS已经覆盖了大多数GIS系统的操作函数,超过300个经典算法,是开源版的ArcGIS。它是Uniux平台的第一个GIS软件,同其他Unix软件一样,吸引了多家联邦机构、大学和公司的参与研发。 1988年时,GRASS 3.0软件包的发行达1000余个。GRASS软件曾经
4、三次获得美国联邦政府的有关奖项。目前广泛的在全球的政府,科研以及大学部门使用。最新的6.3.1版本的GRASS增加Sqlit数据库驱动,修改了包括r.flow等40个左右的算法包,修正了若干的Bug,对最新的OGC WMS规范也有了很良好的支持。,QGIS也是一个用户界面友好的地理信息系统,它目前能够很好得支持PostGIS空间数据库,最新0.8版本的QGIS开始增加对WMS的支持,同时改进了矢量数据和属性数据的编辑,增加了属性信息的搜索。 最为重要的是其重构了QGIS的API库,方便用户可以进行二次开发,修改了矢量图层的透明和反锯齿,增强了矢量数据编辑,这包括复制、剪切、黏贴和节点捕捉等。在
5、去年的版本中QGIS可以很好的支持GRASS的算法接口,成为了GRASS的一个重要的前端表现工具,为GRASS的发扬起到了很好的推动作用。,(2)GIS开源组件,GIS开源组件有基于微软COM技术倡导研发的GDAL/OGR库,Proj4,OpenMap,GEOS,NTS,JTS等。 GDAL/OGR类库目前是两个不同的组成模块,GDAL提供了一整套读写不同栅格数据格式功能的抽象类库,而OGR则是一个读写诸多矢量数据格式功能的抽象类库。目前GDAL支持达50多种栅格数据格式,几乎覆盖了所有的商业应用软件的格式,OGR已经支持包括著名的ESRI Shapefiles、ArcSDE及MapInfo、
6、Oracle Spatial在内的诸多商业公司的矢量格式。数据是一切软件的血液,空间信息产业更是如此,海量数据在空间信息软件行业体现的最为明显,没有一套高效率的数据转换模型和类库很难完成异构数据的集成和融合,正是有了GDAL/OGR,构建在其之上的各类空间信息软件项目才有了生命力。,(3)GIS开源服务器端,GIS开源WebGIS产品有MapGuide,MapServer,GeoServer,Mapbender,Ka-map,Chameleon,quickWMS等。 MapGuide OpenSource(以下简称 MapGuide OS)是Autodesk在以MapGuide6.5为蓝本的基
7、础上,在参考最新IT技术的基础上重新研发的大型网络空间信息平台,Autodesk目前已将包括FDO等技术的MapGuide源代码都贡献给了开源社区,在充分利用开源技术优势的同时,也促进了该项技术在全球范围内的广泛使用。 MapGuide OS采用了标准的C+撰写内核,在高效的内核外,项目的开发人员又增加了对PHP、.NET、Java三种不同语言的开发包,以适应不同类型程序员的需求。这非常符合当前混元IT架构的状况,MapGuide OS可以在保证增加一个API的基础上,对三套不同的开发类库均适用。,(4)GIS开源空间数据类库,开源空间数据库有PostGIS/PostgreSQL,MySQL
8、Spatial,Autodesk公司推出了类似于ODBC技术的FDO(Feature Data Object)技术,PostGIS为开源数据库PostgreSQL提供了空间支持,MySQL Spatial则在MySQL4.0上加入Spatial扩展功能,FDO可以快捷地访问大型关系数据库,还提供了更灵活的扩展性、更高的安全性,并能创建更完善的数据模型 目前采纳FDO技术的产品包括Autodesk Map 3D和MapGuide Open Source系列,最新的FDO 3.2版本支持包括ArcSDE、MySQL、ODBC、SDF、SHP、WFS、WMS、GDAL等在内的多个数据源。这样,各类用
9、户就能充分利用关系型数据库管理系统所带来的种种优势。毫无疑问“MapGuide+FDO+MySQL”是一个很好的开源空间信息解决方案。,(5)GIS开源程序派系分类,3、开源GIS软件应用,目前,开源GIS软件的主要用户是大学、科研机构和非政府组织支持的应用。 Song基于MapServer开发了一个柬埔寨环境地图系统,能够管理各种比例尺矢量地图,MSSTM/ETM影像以及土地利用图层。 Jaroslav等采用GRASS实现了一种太阳辐射模型的集成应用; Cloudio等使用开源GIS在巴西开展了电子政务应用研究; C.George等用开源MapWindow开发了一个联合国土壤和水资源评价工具
10、; Bas Van-meulebrouk等在南非Cell-Life非政府组织的支持下,利用开源GIS软件开展了HIV/AIDS管理信息系统的研究,利用GIS辅助制订信息分发计划、管理HIV/AIDS相关分布控制信息; Alessandro Bezzi等采用开源GRASS在荷兰ITC支持下开展考古方面的研究,实现了模型建模及管理; Lars Gunnar和Trond Andresen采用开源MapSe-rver软件开展了地区健康管理GIS研究和开发实践; AndrewJ利用出版的卡特里娜飓风地图结合开源GIS软件研究死亡率与位置的关系; Autodesk公司支持很多研究机构开展基于开源MapGu
11、ide的网络空间信息服务方面的研究; NASA也支持一些开源的影像发布技术研究,如NASA WorldWind。,国内利用开源GIS软件应用集中在一些行业部门,主要是利用开源GIS的地图制图、Web发布等功能。 熊静用MapServer开发了一个遥感影像发布系统; 郑斌等采用开源GeoTools平台设计与实现了一个城市基准地价信息发布系统; 圣荣等研究了基于MapServer的网络空间信息共享系统; 张大鹏等采用开源GeoServer开发了一个110指挥中心警情分析系统; 杨朝晖等采用开源GeoServer和PostGIS实现了一个网络房地产估价系统设计; 朱俊峰开展了基于SharpMap和N
12、TS构建WebGIS的研究; 黄冲研究了开源WebGIS的最短路径算法; 冯宇等则用开源WebGIS设计了一个干线公路网用地控制系统; 宋现锋进一步利用开源MapServer开展Flash地图的研究; 吕德奎等系统研究了开源版MapGuide的应用模式; 许文星等研究了一种基于开源Nasa WorldWind的G-S空间信息服务模式,并应用于九寨沟旅游信息发布系统。,同时,国内的GIS公司也开始举办开源GIS研发大赛,围绕着开源GIS软件的应用越来越多。综合近年来国内外开源GIS软件的应用,可见,当前开源GIS的应用仍集中在大学、科研机构,一些行业用户也主要利用开源GIS进行WebGIS应用,
13、开源WebGIS平台的应用较多,占开源GIS应用的80%以上。随着更多的行业用户对开源GIS的熟悉和认知以及开源GIS软件的进一步稳定可靠,开源GIS的应用将会越来越多。,4、开源空间信息软件框架实例,空间数据库PostgreSQL+PostGIS,PostgreSQL是目前功能最强大、最先进的开源数据库管理系统 对象关系数据库管理系统(ORDBMS); 支持Windows, Linux, MacOS等所有主流操作系统; 各种前端管理工具(pgadmin3/phppgadmin) 各种语言的编程接口,PostgreSQL特性,SQL支持SQL2003标准超集,支持过程化SQL(PL/pgsql
14、),和各种语言作为存储过程开发语言 多种索引 丰富的数据类型 用户自定义的对象 大量扩展模块,和空间信息处理有关的有:PostGIS和pgRouting,PostgreSQL特性,编程和访问接口 自有的服务器编程接口(SPI) ODBC JDBC Python的DB/API管理工具 跨平台的图形化管理客户端pgadmin3 基于Web的Apache/PHP环境的phppgadmin,PostGIS-空间数据类型扩展,PostGIS是PostgreSQL的扩展,遵循OpenGIS规范,支持空间对象、空间索引、空间操作函数 基于空间对象库GEOS和空间投影库PROJ.4开发 支持桌面GIS软件:G
15、RASS, QGIS, uDig, JUMP 支持中间件服务器:MapServer, GeoServer等 支持开发库:GeoTools, OGR ESRI ArcGIS 9.3支持PostGIS空间数据类型,PostGIS特性,支持OpenGIS中所有空间数据类型POINT, LINESTRING, POLYGON, MULTI-POINT,MULTI-LINESTRING, MULTI-POLYGON,GEOMETRY COLLECTION 支持采用WKT, WKB和EWKT, EWKB(包含了SRID信息的WKT/WKB)表达几何对象,Web Mapping: MapServer+Ope
16、nLayers,MapServer是采用C开发的CGI程序,用于空间信息的Web发布和交互,开源软件高级绘图输出 根据比例尺进行几何绘制,地图标注和标注避让; 高度定制化的模板输出; TrueType字体支持; 图面元素自动化生成(比例尺、参照图、图例) 逻辑或正则表达式生成的专题图支持众多脚本和开发环境 PHP, Python, Perl, Ruby, Java, and .NET,MapServer特性,跨平台支持Linux, Windows, Mac OS X, Solaris等操作系统; 支持众多OGC标准WMS, WFS, WCS, GML等; 支持众多矢量和栅格数据 GDAL支持的
17、所有栅格格式; OGR支持的所有矢量格式(ESRI Shapefile, PostGIS,ArcSDE, Oracle Spatial, MySQL等等) 地图投影支持 PROJ.4支持的一千多种投影的实时转换,OpenLayers,OpenLayers是一个用于Web Mapping客户端开发的Javascript包 采用了Ajax技术实现无刷新动态页面; 支持多种数据源的整合 图像文件, WMS, WFS, GML, KML, Google Map, Yahoo Map, Microsoft Virtual Earth, WorldWind, aMap,GeoRSS, MapServer,
18、 MapGuide 图层控制和缩放控制 概览图、图面标记,开发库:GDAL+OGR,GDAL是一个操作各种栅格地理数据格式的库 包括读取、写入、转换、处理各种栅格数据格式; 它使用单一的抽象数据模型支持大多数的栅格数据; OGR是操作矢量格式地理数据的库 众多的GIS软件都使用GDAL/OGR库,包括开源和商用软件,GDAL数据模型,GDAL抽象数据模型包括 数据集(dataset),坐标系统,仿射地理坐标转换(Affine Geo Transform),大地控制点(GCPs), 元数据(Metadata),栅格波段(Raster Band),颜色表(Color Table),子数据集域(Su
19、bdatasets Domain),图像结构域(Image_Structure Domain),XML域(XML:Domains)。,OGR体系结构,Geometry类 包括OGRGeometry等类封装了OpenGIS的矢量数据模型,并提供了一些几何操作,WKB和WKT格式之间的相互转换,以及空间参考系统(投影); Spatial Reference类 OGRSpatialReference封装了投影和基准面的定义。 Feature类 OGRFeature封装了一个完整feature的定义,包括一个geometry和geometry的一系列属性。,OGR体系结构,Feature Defini
20、tion类 OGRFeatureDefn里面封装了feature的属性,类型、名称及其默认的空间参考系统等。 Layer类 OGRLayer是一个抽象基类,表示数据源类OGRDataSource里面的一层要素(feature)。 Data Source类 OGRDataSource是一个抽象基类,表示含有OGRLayer对象的一个文件或一个数据库。 Drivers类 OGRSFDriver对应于每一个所支持的矢量文件格式。,OGR数据模型,开发库:GEOS+PROJ.4,GEOS是一个几何拓扑操作库,是JTS(JTS Topology Suite)的C+移植 支持空间关系判定:Equals,
21、Disjoint, Intersects,Touches, Crosses, Within, Contains, Overlaps 和空间操作:Buffer, ConvexHull, Intersection, Union, Difference, SymDifference PROJ.4是地图投影库 功能主要有经纬度坐标与地理坐标的转换,坐标系的转换,包括基准变换等 PostGIS采用GEOS+PROJ.4!,桌面客户端QGIS,QGIS是一个用户界面友好的桌面地理信息系统 可运行在Linux、Unix、Mac OSX和Windows等平台之上; 基于跨平台的图形工具Qt软件包,采用C+ 语
22、言开发; 支持多种矢量、栅格和数据库数据源 GDAL/OGR, PostGIS, SpatiaLite, WMS, WFS 丰富的显示、管理、分析、查询的功能; 投影转换,图层控制,专题图,图面整饰,统计查询 地图编辑,栅格数据配准,GPS工具 通过GRASS插件和fTools插件实现丰富的空间分析功能 除了核心功能以外,QGIS支持插件扩展,QGIS插件,核心插件(Core Plugins) 由QGIS开发组维护,包含在所有的QGIS发行版中,开发语言为C+或Python,QGIS插件开发,开发环境 QGIS, Python, QT, PyQT, PyQT开发工具 采用PyQT开发图形界面
23、与QGIS界面和功能组件交互 由插件管理器装入 插件的图形界面与用户进行交互,开源GIS套件:GRASS GIS,GRASS GIS(Geographic Resources Analysis SupportSystem地理资源分析支持系统) GRASS 最初被美军建筑工程研究实验室设计为一个军用的土地管理支持软件。该系统于1999 年使用GNU GPL 发布,距今已有24年的历史。 1985:v1.0,1990:v4.x版,现在是v6.5版本。 GRASS是在Linux系统开发的基于GPL协议的一个开源软件,具备数据管理、图像处理、数字制图、空间建模和数据可视化等功能。它是用标准C语言编写的
24、一套基于文件结构的平台。 GRASS 将地理数据和属性数据存储在自身的数据库中。也支持外部数据库如Oracle 数据库, PostgreSQL。,开源GIS套件:GRASS GIS,目前GRASS已经覆盖了大多数GIS操作函数,超过300个经典的算法,是开源版的ArcGIS 是Unix平台的第一个GIS软件,支持平台Linux, Windows(通过Cygwin)。 GRASS支持的功能: 数据导入/导出; 二维栅格数据;三维栅格数据(真三维); 矢量数据,目前已扩展到三维; 空间分析; 地图成图;数据可视化(二维、2.5维和三维) 地理空间分析是GRASS GIS 的主要的强项之一。,GRA
25、SS GIS:主要模块及功能,栅格分析模块 具有栅格向矢量转换、基于栅格单元与定制的数据查询、颜色表修改、矢量与点数据格式转换、专家系统分析、点的插值、相邻关系矩阵分析、栅格叠加、栅格单元的重新划分、重采样、单元值比例缩放、单元统计分析、基于矢量线的表面生成等功能。 矢量分析模块 具有等高线生成、矢量向栅格或点数据转换、数字化、矢量动态标注、矢量层的叠加等功能。 点数据分析模块 具有Delaunay三角剖分、高程点插值、泰森多边形生成、地形图分析(包括坡度、坡向等)等功能。 图像处理模块 具有色彩合成、边缘检测、频率过滤、傅立叶变换和反变换、IHS到RGB 的转换和反转换、图像校正、正射影像校
26、正、辐射线改正、重采样、分辨率增强、基于纹理的分类、形状检测等功能。,GRASS GIS:主要模块及功能,DTM分析模块 具有等高线生成、最优路径分析、坡度坡向分析、基于高程点或等高线的地表面生成等功能。 屏幕绘制模块 具有3D表面、色彩分配、地图叠加、点数据图、栅格图、矢量图以及图形图像的缩放等功能。 附加模块 具有数据库接口(包括与Informix,Oracle, Postgres等接口)、水淹没分析、景观结构分析、比例变换等功能。 三维分析模块 具有三维数据输入、三维图形计算、三维插值、三维可视化等功能。,GRASS GIS界面,开发语言和开发环境:Python,Python是一个动态脚
27、本语言 开源,跨平台(windows,mac,linux/unix,win-ce) 多种发行版本 CPython:传统的C语言实现; Jython:Java实现; IronPython/Python.NET:基于.NET的实现 灵活,高效,简洁,丰富的标准库,强大的扩充性 众多成功应用 BitTorrent, Google, Disney, SciPy, ZOPE,采用Python进行GIS开发, 矢量栅格数据读写:GDAL/OGR PostgreSQL/PostGIS连接:pgdb, psycopg Oracle/Spatial连接:cx_Oracle 地图投影PROJ.4:pyproj 空间操作GEOS:shapely 网络拓扑:networkx 数据矩阵分析:numpy 科学计算工具包和开发库:SciPy 跨平台图形界面开发:PyQt4, wxPython,采用Python进行GIS开发,2D/3D可视化:matplotlib, pyVTK 桌面端开发:qgis plugins WebService开发:web.py(webpy.org) Public Domain,仅有96KB 自带Web服务器 URL解析,Session支持 支持模板(类似ASP) 支持多种Web服务器 完整的关系数据库接口,