>>> from env_helper import info; info()
页面更新时间: 2023-06-22 14:59:08
运行环境:
Linux发行版本: Debian GNU/Linux 12 (bookworm)
操作系统内核: Linux-6.1.0-9-amd64-x86_64-with-glibc2.36
Python版本: 3.11.2
1.2. 开源空间信息软件体系与技术概述¶
目前国际上著名的地理空间信息生产商大都拥有了成熟的产品线, 基本涵盖了从数据采集、数据编辑、数据管理、空间数据互操作、空间分析、 网络地理信息发布、空间数据库等所有地理信息工程相关的功能模块 。 而开源GIS则可能更多地侧重于某些功能,在使用开源GIS进行应用时, 可以应用很多项目来集成。
开源GIS软件最早的开发一半是基于某个商业GIS软件不支持的功能、特性及开放接口,因此不同开源GIS特点不一样, 也适用于不同的GIS应用需求和不同的开发环境。
1.2.1. 主要开源GIS软件¶
开源 GIS 在仅仅20年时间里,产生了许多功能突出、性能优越和用户体验良好的软件, 从1982年第一个开源GIS 软件GRASS 发布截至到2008年12月中旬, 在地理空间信息开源界著名的 http://www.freegis.org 索引系统中 可以寻找到开源地理空间信息软件项目多达347个, 其中2008年新的开源GIS 软件达到97个, 占到开源GIS软件的 27% ,可见开源GIS软件的发展速度非常迅猛。
注意, http://www.freegis.org 这个网站目前已经不再维护了。
目前开源地理信息软件的体系架构已经非常清晰,每个项目都有特有的定位, 每个开源家族都有与商业软件对应的功能特性,可以实现绝大多数的功能。
在桌面领域,QGIS以及Dig项目完全可以满足普通制图和数据采集人员的需要, 完成对地理空间信息简单编辑、查询等功能, 可以取代价格昂贵的Arc GIS Desktop和Map Info Professional等。
在工作站以及服务器级, 由美国军方建筑工程研究实验室研发的GRASS完全可以充当科学家、 研究人员专业的操作工具, 复杂的空间分析算法以及栅格处理功能可以与ARC/INFO相媲美。 它是Unix平台的第一个GIS软件,同其他Unix软件一样, 吸引了多家联邦机构、大学和公司的参与研发。 1988年,GRASS3.0软件包的发行达1000余个。 GRASS软件曾经三次获得美国联邦政府的有关奖项。
OSSIM(Open Source Soft Image)是一个用于遥感、 图像处理、地理信息系统、摄影测量领域的高性能软件。 作为一个成熟的开源软件库, 它的设计目的是为摄影测量与遥感软件包的开发人员提供一套整合的并且是最佳的方法及流程。 自1996年至今,由 https://www.ossim.org 进行该开源项目的维护, 现在隶属于地理空间开源基金会 http://www.osgeo.org 。 项目的开发人员拥有商业和政府遥感系统和应用软件领域多年的经验, 由美国多个情报、防务领域的政府部门提供资助。
下面列出了常用的开源GIS:
空间数据库: 基于PostgreSQL数据库的PostGIS, 带有地理目 标扩展的Ingres数据库。
GIS服务器:MapServer、GeoServer、Deegree
WebGIS:OpenLayer、MapGuide
元数据目录系统:GeoNetwork
GIS开发库:GeoTools、JTS、TerraLib、Proj.4(地图投影库)
桌面GIS:uDig、GRASS、OpenJump、Quantum GIS
遥感图像处理系统:OSSIM(Open Source Software Image Map)、GDAL (Geospatial Data Abstraction Library)、 OpenCV
三维地球:WorldWind、OSSIMPlanet、Earth3
1.2.2. 开源GIS使用语言的情况¶
开源GIS 软件的分类,按照开发语言,主要包括C 、C++、Python、Java、.NET、 JavaScript、PHP、VB、Delphi 等。 无论是采用哪种语言,当前开源GIS软件都力求最大程度的支持跨平台,其中支持Windows的开源GIS软件为 67.7%, 82.7%的开源软件能够在Linux环境下运行, 这与Linux本身是一个开源的操作系统有关。
1.2.3. 开源GIS的国外应用现状¶
目前,开源GIS软件的主要用户是大学、科研机构和非政府组织。 同时,国内的GIS公司也开始举办开源GIS研发大赛,围绕着开源GIS软件的应用越来越多。 综合近年来国内外开源GIS软件的应用,可见,当前开源GIS的应用仍集中在大学、科研机构, 一些行业用户也主要利用开源GIS进行WebServer应用,开源WebGIS平台的应用较多,占开源GIS应用80%以上。 随着更多的行业用户对开源GIS的熟悉和认知以及开源GIS软件的进一步稳定可靠, 开源GIS的应用将会越来越多。
1.2.4. 开源GIS的版权许可制度¶
开源的概念¶
所谓自由软件(Free Software)指允许任何人可以自由使用、复制、修改、分发的软件, 但它不能保证免费获得的软件。 自由软件在分发/获得方面是双模式的,就是说, 可以免费共享,也可以商业买卖。
所谓开源软件(Open source software)指软件的源代码(软件程序的原始文件)是对任何人都完全开放的, 即任何人在有关许可协议方式的规范下,都具有获得、使用、复制、修改和分发源代码的自由, 但为了保护初始源代码的完整性,有关许可协议规定: 原创者对源代码修改者的后续行为的自由有一定限制。
自由软件和开源的软件具有广泛的共同点,在一般情况下我们统称为“自由开源软件”; 考虑到当今它们愈来愈广泛地参与务实的商业活动,我们也可将其简称为“开源软件”。
开源GIS的特点¶
使用开源软件,有下面的一些特点:
无需支付昂贵的软件购买费,可以节省大量成本,免费升级,并广泛推广应用。
资源丰富,底层全部开放,可以自由选择进行组合应用, 进行无缝融合和改造,充分满足应用需求,也便于维护。
开源软件由大量顶级行业精英设计开发, 设计理念和系统构架先进、功能新、升级快。 支持行业标准(OGC、SOA、 J2EE等)、开放性和扩展性好。
因为底层源程序开放,没有安全性问题(后门问题), 利于政府、军事和安全部门采用。
开源 GIS 优势不仅仅是免费,更在于其免费和开放的真正含义, 前者代表自由与免费,后者代表开放和扩展。 与商业GIS产品不同,由于开源 GIS 软件的免费和开放, 用户可以根据需要增加功能,当所有人都这样做的时候, 开源产品的性能与功能也就超过了很多商业产品, 因而也造就了开源的优势和活力。 此外,和一般的商业GIS 平台相比, 开源GIS产品大多都具有跨平台的能力, 可以运行于Linux、Windows等系统。 因此开源GIS 软件得到学术界和GIS 平台厂商越来越多的重视, 成为GIS 研究和应用创新的一个重要领域。
开源软件的许可制度¶
开源GIS软件的版权许可制度通常采用开源软件许可制度。 经 Open Source Initiative 组织通过批准的开源协议目前有58种, 其中最著名的许可制度有 GPL(the GNU General Public License), LGPL (the GNULesser GeneralPublic License), BSD(the Berkley Software Distribution license family)和 MIT(Massachusetts Institute of Technology)等四种。
GPL协议和BSD许可具有一定的差异。
GPL的出发点是代码开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码作为闭源商业软件发布和销售。 GPL协议的主要内容是只要在一个软件中使用(“使用指类库引用,修改后的代码或者衍生代码”)GPL协议的产品, 则该软件产品必须也采用GPL协议, 即必须也是开源和免费。 这就是所谓的“传染性”, 由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码, 商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。
LGPL是GPL的一个主要为类库使用设计的开源协议。
和GPL要求任何使用/修改/衍生之GPL类库的软件必须采用GPL协议不同, LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件代码, 这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。
BSD是一个给予使用者很大自由鼓励代码共享的协议,但需要尊重代码作者的著作权。
BSD允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售。
MIT是和BSD一样宽泛的许可协议,作者只保留版权而无任何其他限制。
即必须在开源的发行版本中包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的。
GPL与Linux 类似,由于能够保护开源机构的利益,比较适合开源GIS软件的市场推广和研发支持, 因此被许多开源GIS平台采用,如GRASS,QGIS,uDig。 对开源GIS软件版权许可制度的统计结果表明超过一半的开源GIS采用了GPL版权许可。 但也有一些非政府机构支持的基于MIT、LGPL的开源项目, 如SAGA、Map-Window。
OGC与OpenGIS¶
谈到开源GIS,不得不提到 GIS 的一些数据、接口标准。除了技术的发展,标准的兼容对于 GIS 的发展,尤其是开源 GIS 的发展起到了重要的促进作用。
开放地理联合会 (OGC)是一个参与一致进程以开发公开地理处理规格的384家公司、政府机构、大学和个人组成的国际行业联合会。 OpenGIS(Open Geodata Interoperation Specification,OGIS-开放的地理数据互操作规范)由 OGC 提出。由OpenGIS规格定义的开放接口和协议,支持可互操作的解决方案, 网络、无线和定位服务以及主流IT,让复杂的空间信息和服务在各种应用中可以被授权技术开发人员使用。 开放地理联合会协议包括网络地图服务WMS和网络功能服务WFS。
地理信息系统将OGC产品划分为两大类型,基于遵循OGC规格的完整准确的软件。地理信息系统技术标准促进GIS工具进行交流。 兼容的产品是符合OpenGIS规范的软件产品。 当一个产品经过测试,并通过 OGC 测试项目证明是兼容的, 这个产品就在这个地点上自动注册为“兼容”。 现实软件产品,即实现OpenGIS规格但还没有通过兼容测试的软件产品。 合规测试不可作用于所有的规格。 开发者可以注册他们的产品为实施草案或经核准的规范, 而OGC有权审查和确认每个条目。
开源GIS的发展趋势¶
GIS技术发展趋势是开放和互操作的,包括体系结构的开放、数据模型的开放以及开发者思想观念的开放。 开源GIS作为GIS研究的新热点,其趋势必将是集开放、集成、标准和互操作为一体,从软件向服务(Server Oriented Architecture,SOA)转变的方向发展。 通过开源GIS项目建设,可以减少GIS软件的开发周期,降低软件开发成本,提高软件开发效率,同时可以降低GIS平台软件使用成本,促进GIS社会化和大众化。 随着开源GIS项目越来越成熟,并且取得越来越多的应用,开源GIS软件目前已经形成了一个比较齐全的产品线,在一些特定的功能方面优于商业GIS平台软件。 尽管开源GIS软件在稳定性、实用性和功能全面方面存在欠缺, 但是其免费和开放的优势使得越来越多的企业、 科研机构和非政府组织投入到开源GIS软件的研究、开发和应用推广中, 开源GIS软件将成为理论教学、科学研究、中小企业GIS应用的一个最好选择,从而也将会有更好的发展。
1.2.5. 本书(本网站)介绍的开源GIS¶
开源GIS软件与程序众多,体系庞大,本书无法对其一一言明。 甚至于本书所关心的主题(Python与开源GIS), 也只能选择目前技术成熟与使用广泛的软件与类库来谈。 本书介绍使用Python这一编程语言来进行数据的处理。主要使用了下面的一些类库。
数据处理模块GDAL/OGR¶
数据是软件的血液,空间信息产业更是如此, 海量数据在空间信息软件行业体现的最为明显, 没有一套高效率的数据转换模型和类库很难完成异构数据的集成和融合, 正是有了GDAL/OGR,构建在其之上的各类空间信息软件项目才有了生命力。
GDAL 和 OGR的版权问题。
软件的使用,最重要的一点是版权。GDAL/OGR是在MIT许可证下发布的。 如果您不太了解开源软件的各个许可证,这里也没关系。 MIT许可证是最宽松的。如果您的软件修改自GDAL/ORG, 或者在您的软件中包含调用了GDAL/ORG工具,您都对您的软件进行任何处理,包括出售。 只需在您的软件及其所有副本中必须包含版权声明和许可声明即可。
针对Linux用户的GIS指南 在谈到 GIS 数据格式时,必然会考虑到要支持的大量格式,以使每个数据查看器和 GIS 应用程序可以广泛适用。 开源 GIS 应用程序必须包括从 ArcInfo 到 X 窗口系统的大多数开放数据格式标准。 诸如 GeoTIFF 的格式是通常由多数应用程序支持的开放标准的常见示例。
针对Linux用户的GIS指南 在开源范围中,GRASS、QGIS、Thuban 和许多其他 GIS 应用程序使用基本库,即 Geospatial Data Abstraction Library (GDAL)。 GDAL 使用 C 和 C++ 编写,只能包括一种栅格格式。 另一个库叫做 OGR Simple Features Library(以前称为 OpenGIS Simple Features Reference Implementation), 尽管是为了适应 GDAL 源树中存在的矢量格式而构建的,但 OGR 依赖于 GDAL。 事实上,如果没有开源许可的 GDAL,多数现代地理空间数据查看器是无法实现的。 该库为编程人员提供了通用的数据模型,包括所有栅格数据格式和矢量数据格式(通过 OGR)。 GDAL 还可让编程人员在世界地理坐标(即地理参考坐标)上设计栅格数据。
GDAL/OGR类库目前是两个不同的组成模块, GDAL提供了一整套读写不同栅格数据格式功能的抽象类库, 而OGR则是一个读写诸多矢量数据格式功能的抽象类库。
然而因为历史的原因,两大类库是用同样一个生成系统进行维护的, 最重要的是GDAL/OGR的作者是同一人, 该人目前也是OSGeo的会长 Frank Warmerdam, 其在OpenSource Geospatial领域早已大名鼎鼎。 许多程序员都是拜读他的代码理解空间信息软件精髓的。
目前GDAL支持达50多种栅格数据格式,几乎覆盖了所有的商业应用软件的格式, OGR已经支持包括著名的ESRI Shapefiles、ArcSDE, 以及MapInfo、Oracle公司在内的诸多商业公司的矢量格式。
在 GDAL 的 Python 绑定中, 主要有5个模块,可以通过下面方式引用 :
>>> from osgeo import gdal
>>> from osgeo import ogr
>>> from osgeo import osr
>>> from osgeo import gdal_array
>>> from osgeo import gdalconst
投影处理:PROJ.4¶
PROJ.4是一套开源的坐标投影转换类库, 它可以完成在两套不同制图投影系统之间的转换, 同样不同的椭球体或大地基准面之间也可以成功的完成转换。 PROJ.4类库最早是由Gerald Evenden先生作为工具集为美国地质调查局撰写的, 目前是由Frank Warmerdam先生进行维护和管理, Evenden依然活跃在邮件列表中, 尽管他已经不再写代码但仍然提供最新的数学投影模型。
栅格数据与矢量数据的空间分析¶
GEOS是 Geometry Engine, Open Source
的缩写,
其提供了OGC规范中简单几何要素对象操作的C++语言,
详细的规范可以在OGC网站上找到(“Simple Features for SQL”),
具体的实现方法里面都有所描述。
拓扑模型的计算方法简单但是一般来讲很难得以实现。
GEOS/JTS/NTS的算法则对于所有的空间谓词都是非常强壮的,
同时在空间操作方面也非常完善。
地图制图Mapnik¶
高质量的地图绘图库。
其他模块¶
除了本书中介绍的,还有很多其他的 Python 扩展库,可以用来处理地理信息。 如著名的地图服务器 MapServer ,也有 Python 的脚本接口 Python MapScript。但是 这个模块只支持 Python 2.7, 最后发布的版本是 mapscript-5.6.3.0.zip , 发布于 2010-03-30 。 尽管这个数据库还是很有用,但是以后可能会被淘汰,所以不建议学习这个库的用法。