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的架构基本吻合,否则建议谨慎使用该种扩展方式。

原文地址:http://blog.51cto.com/osgis/2089828

时间: 2024-10-29 19:11:44

QGIS功能扩展方式的相关文章

spring源码深度解析-2功能扩展

容器功能的扩展ApplicationContext用于扩展BeanFactory中现有的功能.究竟多出了哪些功能,进一步探索.写法上:BeanFactory bf = new XmlBeanFactory(new ClassPathResource("beanFactoryTest.xml")); ApplicationContext bf = new ClassPahtApplicationContext("beanFactoryTest.xml");还是以Cla

Android自定义控件---继承ProgressBar功能扩展

一.前言 前一段时间在做视频开发,由于本人刚接触视频开发这块,所以 领导没有对我提很高的要求,仅仅要求能够播放本地视频即可. 我想怎么简单怎么做.于是选择用Android VideoView控件来播放视频 (后面发现VideoView的灵活性实在太差,我不想吐槽). 最终的效果图: 视频全屏效果 这次的任务主要难度在于进度条这个控件.各位可以从上面的两张图中看到,进度条被分 为三段.每段表示一个视频,并且每个视频的长度不一,也就意味着每段视频进度条的前进速度是不相同的. 难点总结: 1.自定义控

Asp.net mvc 5 CRUD代码自动生成工具- vs.net 2013 Saffolding功能扩展

Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个<Asp.net webform scaffolding结合Generic Unit of Work & (Extensible) Repositories Framework代码生成向导> 是生存Web Form的. 这次看到网上有生成MVC Saffolding扩展原作者的代码 https://github.com/robinli/MVC5-

用GCD的方式,加载网络图片(主线程加载图片+类扩展方式)

用GCD的方式,加载网络图片(主线程加载图片+类扩展方式) 用两种方法来实现网络加载图片 方法1:实现的效果:先加载背景色灰色,两秒后加载图片 - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor=[UIColor grayColor]; //刷新UI(在主线程中刷新UI!!!) --- 一般方法 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PR

数组功能扩展--差集,并集,合集,去重

//数组功能扩展 Array.prototype.each = function(fn){       fn = fn || Function.K;        var a = [];        var args = Array.prototype.slice.call(arguments, 1);        for(var i = 0; i < this.length; i++){            var res = fn.apply(this,[this[i],i].conc

WPF自定义控件与样式(3)-TextBox &amp; RichTextBox &amp; PasswordBox样式、水印、Label标签、功能扩展

原文:WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式.水印.Label标签.功能扩展 一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要是对文本输入控件进行样式开发,及相关扩展功能开发,主要内容包括: 基本文本框TextBox控件样式及扩展功能,实现了样式.水印.Label标签.功能扩展: 富

VS功能扩展--扩展介绍

使用Eclipse的朋友都知道Eclipse是一个完全可扩展的IDE,那么在windows程序开发时,我们常使用的IDE(Visual studio)是否具有功能的扩展性呢?毫无疑问,回答是肯定的.我们经常使用的的VA就是一个典型的VS扩展插件,那么VS的扩展机制能做什么呢? VS功能扩展 添加UI元素,比如菜单项,窗口 扩展编辑器和编译器去分析你的代码 扩展VS在线和TFS(Team Foundation Server)去分析信息和管理开发流程或整合外部扩展服务 整合一个新的编译器和项目类型,

WebRTC源码入手和底层功能扩展资料分享

?? WebRTC源码入手和底层功能扩展资料分享 "webrtc源码分析群"里有同学说要在源码里加入新功能,想找下有没有相关资料可以分享下,好了解代码框架和入手修改代码,但是相关的资料少之又少,所以我找了相关的资料,希望能对大家有所帮助. WebRTC代码结构: http://blog.sina.com.cn/s/blog_40d608bb01010n73.htmlhttp://www.cnblogs.com/fangkm/p/4370492.htmlhttp://mojiapp.cn

《Android编程权威指南》-读书笔记(四)-GeoQuiz功能扩展

<Android编程权威指南>-读书笔记 -GeoQuiz功能扩展 从现在开始,这本书开始扩展应用.在这次扩展中我们将会学习以下知识点: 创建一个新类 更新视图层 更新控制层 Git代码的修改和提交 Android Studio 在设备中运行该应用 给按钮添加图片资源 功能:下图是GeoQuiz应用对象图解.应用的对象按模型.控制器和视图的类别被分为三部分.Android应用是给予模型-控制器-视图(Model-View-Controller,简称MVC)的架构模式进行设计的. 创建一个类 T