Opticks是一款开源的遥感数据处理平台,与其同类开源软件OSSIM一样,支持种类丰富的数据文件格式,但其最大特点为设计精巧的插件开发模式,在设计技巧上,系统提供了良好的封装特性,即使插件开发者对框架内部的设计机制了解较少,也能开发出合格的插件。

一、插件种类

系统为各类插件提供了基类,插件开发者只需要从这些基类创作自己的派生类,即可实现插件的功能,系统主要提供了以下插件基类:

  • ImporterShell
  • AlgorithmShell
  • GeoreferenceShell

图1

其中,所有的数据输入插件可以从ImporterShell派生,所有的算法类可以从AlgorithmShell派生。地理参考类型的插件可以从GeoreferenceShell这个基类继承。

二、 插件模块要实现的功能

2.1 插件模块的文件结构安排

一般来讲,插件是一个工程,包含了多个文件,其中会有一个名为ModuleManager.cpp 的文件,这个文件的功能很明确,就是将整个工程作为一个模块向框架注册。一个工程中可以同时有多个插件(多数情况下如此)。在图2的例子中,removeHaze.cpp是一个算法插件。

图2

2.2 注册插件

首先,插件需要向框架软件注册自己,下面是ModuleManager.cpp文件的内容。

图3

在图3中, 宏REGISTER_MODULE向框架注册了一个名为IntelligenceAnalysis的模块。

2.3插件的构造函数

以Opticks自带插件PCA为例,详细讲解插件要实现的功能,下面是插件PCA的构造函数:

1.setName("Principal Component Analysis");            

2.setVersion(APP_VERSION_NUMBER);                       

3.setCreator("Ball Aerospace & Technologies Corp.");

4.setCopyright(APP_COPYRIGHT);

5.setShortDescription("PCA");

6.setDescription("Run Principal Component Analysis on data cube.");

7.setMenuLocation("[通用算法]\\Principal Component Analysis");

8.setDescriptorId("{7D2F39B3-31BA-4ef1-B326-7ADCD7F92186}");

9.allowMultipleInstances(true);

10.setAbortSupported(true);

11.setProductionStatus(APP_IS_PRODUCTION_RELEASE);

前4行分别指明插件的名称、版本、作者和版权,第5,6行指明本插件的简短描述,第7行是插件提供的按钮在工具栏上的位置,第8行是一个DescriptorId, 后面介绍。第9行表明该插件是否允许运行多个实例。第10行表明该插件在执行时是否允许被用户中断。第11行指明产品的状态,是否为发布状态。

2.4 插件要实现的其它功能

插件在execute()方法中,提供它要实现的功能。但是插件在执行功能之前,需要从框架内取到需要处理的数据。

开源遥感平台opticks插件开发指南的更多相关文章

  1. 免费开源ERP Odoo实施指南 连载一:Odoo概述

    Odoo是什么 Odoo,以前叫OpenERP,是比利时Odoo S.A.公司开发的一个企业应用软件套件,开源套件包括一个企业应用快速开发平台,以及几千个Odoo及第三方开发的企业应用模块.Odoo适 ...

  2. 免费开源ERP Odoo实施指南 连载二:POSTGRESQL概述

    PostgreSQL是Odoo支持的数据库.PostgreSQL是起源于大学的一个历史很长的开源数据库系统.包括美国航天局NASA.德国证券交易中心.中国的平安.腾讯的微信支付.阿里巴巴的阿里云都在用 ...

  3. Elasticsearch5.5.1插件开发指南

    Elasticsearch5.5.1插件开发指南 原文地址: https://www.elastic.co/guide/en/elasticsearch/plugins/5.5/plugin-auth ...

  4. 开源项目SMSS开发指南(二)——基于libevent的线程池

    libevent是一套轻量级的网络库,基于事件驱动开发.能够实现多线程的多路复用和注册事件响应.本文将介绍libevent的基本功能以及如何利用libevent开发一个线程池. 一. 使用指南 监听服 ...

  5. ASP.NET Aries 开源开发框架:开发指南(一)

    前言: 上周开源了Aries开发框架后,好多朋友都Download了源码,在运行过程里,有一些共性的问题会问到. 所以本篇打算写一下简单的开发指南,照顾一下不是太看的懂源码的同学,同时也会讲解一下框架 ...

  6. 【笔记】jQuery插件开发指南

    原文链接:http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html (有部分增删和修改) jQuery插件开发模式 软件开发过程中是需要一定 ...

  7. hdwiki中插件开发指南

    插件就是为了满足个性化需求按照HDWiki插件开发规范编写的可插拔程序,虽然可以直接对HDWiki进行二次开发实现插件同样的功能,但是这样做势必影响到系统的升级和稳定性. 采用插件的方式,可以随时进行 ...

  8. Google 开源项目的风格指南

    谷歌C++代码风格指南.农业所需的代码.更难得的是不FQ,决定性的最爱!! . http://zh-google-styleguide.readthedocs.org/en/latest/google ...

  9. PPAPI插件开发指南

    转载请注明出处:http://www.cnblogs.com/fangkm/p/4401075.html 前言 插件一直是浏览器的重要组成部分,丰富浏览器的运行能力,实现一些HTML+JS实现不了本地 ...

随机推荐

  1. 网络第三节——NSURLSession

    有的程序员老了,还没听过NSURLSession有的程序员还嫩,没用过NSURLConnection有的程序员很单纯,他只知道AFN. NSURLConnection在iOS9被宣布弃用,NSURLS ...

  2. 核电站问题(codevs 2618)

    题目描述 Description 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质. 任务:对于给定的N和M,求不发生爆炸的放 ...

  3. aaaaaaaaaaaaaa

    方法和事件的区别是? For(var 0 in file) Foreach(var i=0;i<length.i++) Git stash Git pull –rebase origin bra ...

  4. Html - Iframe

    父页面调用子页面 //用这个对象调用子页面的函数或者dom var myiframe = $("#right_iframe")[0].contentWindow; 子页面调用父页面 ...

  5. python编程之字符串转处理

    比如255的16进制是FF. 转换成整型就是  int("FF",16)   console上输出就是255   int("FFFF",16)就是65535 如 ...

  6. spring+springmvc+ibatis整合注解方式实例

    需求说明 实现用户通过数据库验证登录需求.採用 Myeclipse+Tomcat 6.0+Mysql 5.0+JDK 1.6 2.数据库表 开发所用是Mysql数据库,仅仅建立单张用户表T_USER, ...

  7. 禁用 Gnome Shell 默认的 Ubuntu Dock 和 Ubuntu AppIndicators 扩展

    以前折腾的时候禁用过,现在已经忘记目录了,结果今天手贱把系统从 18.04 升级到了 18.10 ,很多东西都要重新搞过,而且用惯了 mac 已经不熟悉 linux 上瞎折腾的那一套了,简直坑爹.. ...

  8. day5_递归调用

    #递归的意思,函数自己调用自己#递归最多递归999次#递归的效率没有循环高 实例1-递归调用: count = 0 def say(): global count count += 1 print(' ...

  9. Stylus基本使用

    介绍 在学习一个 Vue.js 项目的过程中,注意到源码中样式的部分并没有用熟悉的 .css 样式文件,而是发现了代码长得和 CSS 相像的 .styl 文件.这个 .styl 以前没见过啊,你是谁? ...

  10. NEST - How can i do multiple nested aggregation?

    question: How can I do multiple nested aggregation? I have tried something like this: Aggregations(x ...