QGIS(在2.0版本之前称之为Quantum GIS)是一款开源的桌面GIS软件,于2002年由Gary Sherman创立,在2007年由OSGeo接管,并于2009年发布了1.0版本。QGIS采用开源证书GNU GPLv2 (GNU General Public License version 2)发布,主要采用C++语言开发,用户界面依赖Qt平台。QGIS的官方网站为:https://www.qgis.org,其源代码由Github网站托管,其地址为https://github.com/qgis/QGIS。
QGIS的主要版本如下:
· 2002年7月,QGIS发布了第一个版本(0.0.1-alpha),只能在PostGIS数据库中读取和展示空间数据。
· 2003年6月,QGIS加入了插件功能(0.0.11-alpha)。
· 2004年2月,QGIS的框架基本成型(0.1 Moroz),并且发布了用户说明与安装说明,可以通过GDAL浏览栅格数据。
· 2009年1月,QGIS的1.0 Kore发布,已经具备初步的空间分析能力。
· 2013年9月,QGIS的2.0 Dufour发布,使用全新的矢量数据API,名称从Quantum GIS修订为QGIS。
· 2016年2月,QGIS 2.14 Essen版本发布。这个版本是QGIS的第一个长期支持版本,但官方已经于2018年1月停止支持。
· 2016年10月,QGIS 2.18 Las Palmas版本发布。这个版本是QGIS的第二个长期支持版本,也是最后一个2.x版本,使用Qt4和Python 2.7技术,目前仍被官方支持更新。
· 2018年2月,QGIS 3.0 Girona发布。该版本使用Qt5、PyQt5和Python 3,并且在用户界面、GIS制图等功能上有了大幅提高,QGIS从此进入3.0时代。
· 2018年10月,QGIS 3.4 Madeira发布。该版本是QGIS的第三个长期支持版本。
· 2019年10月,QGIS 3.10 A Coruña发布。该版本是QGIS的第四个长期支持版本。
QGIS与其他开源软件一样,研发速度很快,几乎每个月都会推出一个新版本,并且每年会推出一个长期支持版本(Long Term Release,LTR)。相对于最新的QGIS版本,长期支持版本更加稳定。QGIS长期支持版本启动页面的右上角注明了“long term release”字样,如图1-7所示。
图1-7 QGIS 3.10长期支持版本启动页面截图
【小提示】 QGIS从0.1版本以后都采用一个版本名称,从0.8.1版本到1.5版本采用土星的卫星命名,自1.6版本开始采用地名命名。自2016年在德国Essen举办第12届QGIS开发者大会以来,所有的QGIS的版本命名都和相近一次的开发者会议的举办地一致,如2.18 Las Palmas、3.4 Madeira等。
近年来,QGIS在网络上的关注度也在不断提高。图1-8展示了QGIS、ArcGIS与MapInfo在2004—2019年谷歌热度的变化趋势,QGIS的热度从2013年开始上升明显,而ArcGIS的热度缓慢下降,存在QGIS的热度逐步逼近ArcGIS的热度的趋势。
图1-8 2004—2019年,QGIS、ArcGIS与MapInfo的谷歌热度变化
QGIS之所以受到GIS工作者和科研人员的欢迎,主要因为其具有以下特点:
(1)优秀的用户界面:QGIS的设计初衷是构建一个地理数据浏览与制图的工具,并基于Qt平台构建GUI,因此相对于uDig、GRASS GIS等常见的开源桌面GIS软件,QGIS的用户界面非常友好。
(2)跨平台能力:QGIS可以运行在多数常见的操作系统中,如类UNIX-like(包括UNIX、Linux、BSD等)、Mac OS、Windows等。
(3)空间分析能力:QGIS内嵌GDAL、SQLite等常见的GIS类库,并且可以整合GRASS GIS、SAGA GIS等桌面GIS软件。因此,QGIS可以轻松地完成常见的数据处理与空间分析操作。
(4)数据格式的支持性强:QGIS对各种栅格数据和矢量数据的支持性很强,基本可以覆盖当前主流的地理空间数据格式,如shapefile、coverages、personal database、GeoTiff等。QGIS还可以访问Postgre、MySQL、SQLite等数据库。另外,QGIS还可以通过插件扩展等方式增加数据的支持格式。
(5)可扩展性强:QGIS具有插件功能,因此用户可以轻松地从互联网或官方渠道获得并安装特定功能的插件。另外,开发者还可以利用PyQGIS或C++ API对QGIS进行二次开发。如果上述方法仍难以满足用户需求,那么开发者可以通过重新编译的方式自定义QGIS的功能(但必须符合GNU GPLv2协议)。
目前,QGIS已经具备非常完整且实用的GIS功能。对于普通用户而言,依靠QGIS已经完全可以进行地理空间数据处理及简单的空间分析,可以抛弃ArcGIS等常规主流的GIS平台。
虽然QGIS是开源桌面GIS软件的代表,但是它也形成了较简单和初步的产品体系,主要包括QGIS Desktop、QGIS Browser、QGIS Server、QGIS Web Client、QGIS on Android等。
· QGIS Desktop(QGIS桌面):QGIS产品体系的主要软件,可以用于地理空间数据的创建、编辑、可视化和基本的空间分析。
· QGIS Browser(QGIS浏览器):浏览与管理地理空间数据及其元数据。在QGIS 3.0版本中,QGIS Browser整合在QGIS Desktop中,取消了单独的QGIS Browser程序。
· QGIS Server(QGIS服务器):发布满足WMS、WMTS、WFS等标准的数据图层。在QGIS Desktop中,可在图层属性页面的QGIS Server窗口设置其图层的发布选项。
· QGIS Web Client(QGIS Web客户端,QWC):可浏览已经在QGIS Server中发布的数据或地图服务的简易客户端,采用BSD协议发布,QWC的最新版本为QWC2。QWC1的部署需要依赖PHP、Python等,QWC2仅包含JavaScript和HTML两种语言,并采用ReactJS和OpenLayers构建,其演示程序的地址可参见https://github.com/qgis/qwc2-demo-app。
· QGIS on Android:QGIS的Android版本。用户可以在Google Play等应用商店下载它,或者在https://github.com/qgis/QGIS-Android中找到它的源代码。
虽然QGIS Server、QGIS Web Client和QGIS on Android提供在互联网和移动端的应用方案,但是仍然存在很大的局限性。通常,很少能单独通过QGIS产品体系完成整个GIS服务发布、移动GIS开发等需求。然而,QGIS作为OSGeo的成员,可以与PostGIS、OpenLayers、Leaflet等开源GIS软件或工具进行良好的整合,从而形成开源GIS工具链。
作为一个完整的地理信息系统桌面软件,QGIS的主要功能包括数据浏览、地图制图、数据管理与编辑、空间数据处理与空间分析、地图服务等功能框架。
1. 数据浏览功能
QGIS创立的初衷就是提供一个简单的地理空间数据浏览工具,因此数据浏览功能是QGIS的核心功能。QGIS既可以利用内嵌GDAL/ORG和GRASS支持常见的数据格式,也可以读取PostGIS、SpatiaLite、MS SQL Spatial、Oracle Spatial等存储于数据库中的地理空间数据。另外,QGIS还可以访问符合WMS、WMTS、WCS、WFS等OGC标准的互联网空间数据服务。某些数据虽然无法被原生QGIS软件读取,但它们可以通过插件扩展的方式被读取。因此,相对于ArcGIS、GRASS GIS等桌面软件,QGIS的数据支持能力非常强。
2. 地图制图功能
QGIS具有非常强大的地图表达和渲染能力,甚至可以进行简单的3D渲染。在OpenGIS中,QGIS包含完整的符号化、地图标注、输出与打印功能。特别是,QGIS具有实时渲染和优秀的抗锯齿能力。在一定程度上,QGIS的制图能力远超绝大多数的GIS软件,在某些方面甚至超越了ArcGIS软件。
3. 数据管理与编辑功能
受益于QGIS的数据支持能力,QGIS可以管理不同数据源的地理空间数据。这些不同数据源的数据在QGIS中具有相同的数据接口,不同数据类型的空间数据可以轻而易举地进行格式转换。我们可以通过QGIS完整的矢量编辑功能对这些数据进行增、删、改、查等操作及基本矢量叠加运算。
4. 空间数据处理与空间分析功能
空间分析实际上属于空间数据处理的一部分。QGIS的空间数据处理与空间分析功能较弱,但是QGIS整合了GDAL/OGR、GEOS、GRASS GIS、SAGA GIS等GIS工具。因此,QGIS的优势在于可以对来源不同的空间数据处理工具进行整合,利用QGIS中的Processing Modeler、PyQGIS和C++ API构建自动化的数据处理工具,以解决复杂的地理与空间问题。
5. 地图服务功能
QGIS可以作为WMS、WMTS客户端,QGIS Server可以作为轻量级WMS、WCS、WFS服务器。如果QGIS Server不能满足需求,则可以通过MapServer构建复杂的GIS服务器。
上述功能为QGIS具备的主要功能。实际上,QGIS还可以通过功能扩展的方式提供更高级、更复杂的功能。开发者可以根据需求的复杂度,通过表1-4介绍的几种方式进行功能扩展。
表1-4 QGIS功能扩展的主要方式
如果需求复杂,则需要更高的可扩展性的功能扩展方式,也就需要更高的扩展复杂度。模型构建和插件扩展的方式是最方便的功能扩展方式,但是无法脱离QGIS的主窗口执行扩展功能。采用PyQGIS开发、C++ API开发或重编译开发的方式进行功能扩展的潜力是很大的,可以脱离QGIS的主窗口构建独立的GUI,更适合专业用户,但是其复杂度和成本也是最大的。QGIS的扩展方式详见“第11章 扩展QGIS”。
【小提示】 目前,QGIS的中文学习资料较少,学习QGIS仍然需要依靠一些成熟的英文资料。QGIS的体系庞大,我们要全面掌握QGIS的各项功能是一件很困难的事情,因此常常需要从互联网上查询QGIS的相关资料。
· 官方用户手册:http://docs.qgis.org/3.10/en/docs/user_manual。
· 官方PyQGIS手册:http://qgis.org/pyqgis/3.10/。
· 官方推荐英文QGIS书籍:https://www.qgis.org/en/site/forusers/books/index.html。
· 官方学习资料:http://docs.qgis.org/latest/en/docs/training_manual/index.html。
· 得克萨斯A&M大学QGIS学习资料:http://mltconsecol.github.io/QGIS-Tutorial/。