QGIS开发教程(0)——GIS平台现状

(本文为本人原创,请尊重个人劳动成果。未经本人许可,严禁转载!)

引子

在开发遥感影像处理系统,或者其他GIS系统的时候,开发者往往都会面临一个选择,就是是基于现有的商业/开源平台开发,还是自己重新从底层开始造轮子。

如果选择从0开始,就又会面临新的问题:

  • 怎样选择图形图像库(GDIGDI+Direct2DOpenGL等)?
  • 怎样解码栅格、矢量数据(GeoTiffIMGShapefile等)?
  • 怎样解决较大数据量(比如数据量比内存还大)的栅格与矢量文件的快速显示、渲染问题?
  • 怎样解决坐标系与投影的问题?
  • ……

我本科闲的无聊的时候,写过一个基于OpenGLGDAL的用来显示栅格影像的COM组件。但是只能显示单幅栅格影像,并且不支持矢量(真的很困难)。后来又写过一个基于Direct2DShapefile浏览器(只能简单显示轮廓)。所以我知道,对于开发者来说,从零开始开发并不是最优选择。基于现有平台/库来开发才是效率最高、性能最优的。

那么,现在新问题又来了,到底是选择那种平台呢?目前而言,比较成熟的商用GIS平台就是:

  • ESRI ArcGIS

可是它价格不菲,用来进行商业开发是非常不错的选择,如果只是想写写开原算法或者小系统,就显得过于庞大了(需要带一个AE Runtime。现在ESRI推出了基于移动端的ArcGIS Runtime,但由于对栅格数据支持有限,被排除在我们讨论范围了)。所以我们就把目光转向了开源社区,开源社区中最常见的GIS平台有以下两个:

  • QGISC++ Qt
  • SharpMapC# Windows Form

在实际中,SharpMap有着种种bug(对中文路径支持不佳、对WPF支持不佳等,栅格影像渲染速度慢等),所以我们暂时不详细讨论它。

QGIS

QGIS是一个免费开源的地理信息系统,基于Qt库,有着完整的栅格矢量数据渲染、空间分析的能力,并且支持多种语言的插件式扩展(C++Python),还完美支持Utf8字符串路径,简直完爆SharpMap啊。

目前,官方推荐的开发方式,就是在QGIS里面的Python控制台中,写Python代码。官方文档的传送门

当然我这个系列要讲的,是基于QGIS C++ API的独立应用程序开发(俗称“基于QGIS的二次开发”),这方面官方文档的传送门在这。当然了,这个文档只有每个类的信息,并没有教大家怎么写基于QGIS的程序。

这个系列的目的

因为QGIS官方没有告诉大家(或者说是不推荐),该如何写基于QGIS的独立应用程序;而国内写的《基于QGIS二次开发》还停留在QGIS 1.x版本里,并且还在使用VS开发。

所以经过这一年来的探索,我有必要将我学习、实践QGIS开发的经验分享给大家。

所需基本技能

要想系统地进行QGIS开发,必须要掌握(或者基本掌握)以下技能:

  • C++
  • Qt
  • 基本RS、GIS常识

若能掌握以下技术更好:

  • Git
  • CMakeqmake
  • 跨平台开发经验
  • 基本UI、UE
  • 熟悉Python开发

注意事项

重要的事情要说三遍:

  • QGIS的License是GPL
  • QGIS的License是GPL
  • QGIS的License是GPL

这就说明,基于QGIS的程序,必须开源。希望大家能够支持知识产权。