QGIS功能扩展方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QGIS功能扩展方式相关的知识,希望对你有一定的参考价值。

在QGIS使用时,经常需要对QGIS现有功能进行扩展或是在其基础上定制开发行业应用程序,一般有以下五种方法:

  1. 在PYTHON控制台直接执行PYTHON脚本
    利用在PYTHON控制台编写PYTHON脚本进行地图数据处理。

优点:没有任何编程基础的人也可以上手。

缺点:只能在控制台执行脚本,没有任何图形交互界面。一般只适用于地图数据处理这类需求使用。
详细见:
https://user.qzone.qq.com/2665146134/blog/1521197818

  1. 插件开发
    这种方式是QGIS官方推荐使用的对QGIS桌面程序和QGISSERVER功能扩展的插件方式,一般分为C++和PYTHON扩展插件两种。

优点:不需要改动QGIS源代码,在QGIS程序上进行插件式扩展。不会影响QGIS主框架程序的稳定性。这种方式还有个好处就是可以使用官方编译的QGIS版本或编译比较好和比较稳定的QGIS版本。
顺便说一点:有些人喜欢使用自己编译QGIS,然后在其基础上进行应用开发。其实如果你真的是搞实际应用和产品而不只是学习和研究的话,一定要谨慎。因为QGIS编译其实很复杂,大多数人编译都是网上看到一些学习性的文章然后到处拼凑、下载一些库文件,并用RelWithDebInfo方式进行编译。这种方式生成的QGIS隐含问题一般都非常多,如果也不进行严格的优化、测试、使用,这样的版本在用户环境下一定会出现各种奇怪的问题,图形显示效率也会很慢。
当然,这只是个人的一个小小的建议,也不一定对,选择权在您。但有一点,有些人在用户使用中发生问题时,不找原因就说是QGIS的问题,把责任推给QGIS,这就很不好了。QGIS在国外其实有很大的用户群体,其功能基本是稳定和可用的,就是技术支持欠缺(尤其国内),所以有问题要多找找自己的原因。

缺点:只能在QGIS主框架上进行扩展,不能够定制自己的用户UI。

详细见:
https://user.qzone.qq.com/2665146134/blog/1495438556

  1. QGIS二次开发
    以QGIS SDK为二次开发平台进行二次开发。分为C++和PYTHON两种开发方式。
    优点:可以定制自己的UI界面和地图操作方式,模式就像利用ARCENGIN,AO的二次开发一样。灵活而且功能强大。

缺点:对编程能力要求较高,要求QT,C++(PYTHON)编程。
详细见:
https://user.qzone.qq.com/2665146134/blog/1521197818

  1. QGIS封装为COM组件开发。
    将QGIS封装为COM组件(类似ARCENGIN,MAPX),将QGIS功能进行封装。然后二次开发时将组件嵌入到应用程序中,调用接口操作地图。
    优点:这种方式扩展了QGIS的开发适用场景,使其可以利用C#,DELPHI等非C++或PYTHON开发语言进行二次开发。
    缺点:封装时编程量很大,难度也很高。

  2. 在QGIS 基础上直接扩展
    这种方式就是在QGIS工程源代码在现有功能或菜单中直接修改,很多刚刚接触QGIS的人和公司喜欢这样做。

优点:如果想用QGIS现有大部分功能的话,这种方式可以省去很多工作量。

缺点:这种方式首先要正确编译QGIS,并在其基础上进行扩展开发。由于QGIS源代码十分复杂、耦合也很紧密。尤其是界面的设计及信号槽部分设计非常巧妙也很复杂,QT水平不是很好的人很难短时间内全面了解。这使代码修改十分困难,而且非常容易改动一处而引起其它多个地方的错误。
这种方式也很容易改到最后就改不下去,因为整体架构不是按照我们的应用专门设计,一旦出现QGIS架构与应用架构冲突的情况就没法做下去了。
因此,除非你对QGIS代码、结构非常了解,并且你所开发的应用和QGIS的架构基本吻合,否则建议谨慎使用该种扩展方式。

以上是关于QGIS功能扩展方式的主要内容,如果未能解决你的问题,请参考以下文章

Python。设计。以相同的方式扩展各种功能

子类化 Flask 可插拔视图以实现可扩展功能的最佳方式

QGIS入门实战精品教程4.3:QGIS属性表按字段链接外部属性数据

在 ASP.net 中,基于角色访问页面/功能/菜单的最具可扩展性的方式是啥?

Smartbi扩展性怎么样,是否方便扩展开发产品已有功能?

Chrome扩展开发之四——核心功能的实现思路