sextante源码剖析(二)之sextante算法框架

来源:互联网 发布:域名的别名 编辑:程序博客网 时间:2024/04/30 20:22

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xiluoduyu/。

在上一篇简单介绍了sextante的安装和配置,这里只要讲解下sextante的算法框架。

安装后sextante后我们可以看到sextante的文件组成,各文件作用如下图:


sextante中最核心的类主要有算法基类GeoAlgorithm,算法提供者基类AlgorithmProvider以及算法执行类(AlgorithmExecutor,UnThreadAlgorithmExecutor)这三大类。这些类就在上图所示的几个文件夹中,其中core中除了定义了GeoAlgorithm基类和AlgorithmProvider基类,还定义了Sextante类用来管理AlgorithmPovider派生类和算法执行接口等。gui中定义了SextanteToolBox类,用来管理工具栏界面的。要在sextante中添加算法,GeoAlgorithm类是必须要定义的,AlgorithmProvider类可不定义,但若算法较多,且属于同一类别或者来源相同的话一般都要定义,以便于算法管理。且sextante定义AlgorithmProvider基类本来就是为了方便管理算法的目的,所以强烈建议针对多个同类算法定义对应的AlgorithmProvider派生类,即使是一个简答的算法也应该定义该类。算法执行类AlgorithmExecutor和UnThreadAlgorithmExecutor这两个类差别不多,前者开辟新进程,在新进程中运行算法,而后者不开辟新进程而已。两个执行类所做的其实也是对算法参数做些简单处理,然后调用下算法GeoAlgorithm派生类对象本身的执行函数而已。这两个算法执行类其实我们可以不管,因为算法的执行统一接口是在Sextante中定义的。

首先看下sextante的算法基类GeoAlgorithm。GeoAlgorithm类定义了算法的名称name、所属组名group以及算法的提供者provider,当然还有其他的一些次要属性,如算法显示时用到的图标等。sextante中算法从执行上可分类两类,一类是不依赖于外部应用程序的独立算法,也即它自己可以实现代码的执行,这一类算法也是我们在sextante中添加自定义算法时所要定义的算法;另一类算法则需要依赖于外部应用程序才可以真正执行,在此称作外部算法,举个例子,otb算法目录下的即是外部算法,因为你必须得先安装otb才可在sextante中真正使用那些算法。然而这两类算法其实非常相似,差别仅在于有没有真正的执行函数而已。对于外部算法,一般会由一个统一的算法执行类来为这些算法统一调用外部程序,其文件命名一般是*Utils.py。然后,看下AlgorithmProvider基类,他也有自己的名称、图标,描述信息等,还有一个用于存储算法的列表。简单来说,AlgorithmProvider就像一款“软件”,软件提供各种各样的功能,那些功能就是一个个GeoAlgorithm了。但Sextante是款更大的“软件”,他可以包含各种各样的provider“子软件”。清楚这些后我们要自定义算法或扩展第三方应用程序算法思路就很清晰了。首先定义一堆的功能algorithm,然后为这些algorithm定义一个统一的管理者provider,最后呢吧provider添加到Sextanteprovider列表中去即可。

现在,关键的时刻来了,记得上一篇中说到sextante的很牛逼的组织方式,为什么这么说呢?想想,sextante中提供了将近400个算法,每个算法都需要自己的参数设置界面,各个算法间的参数设置界面可能也不一样,那怎么办呢?为每一个算法分别定义自己的界面么,就像在VC++里面弄一堆堆的dialog么?当然不可能!这就需要用到动态对话框生成技术了!也许动态界面编程对于大牛们是家常饭,但小弟以前很少接触个动态界面编程,因此就被sextante的这种做法震撼了一下,并且这种思想实现在sextante中貌似也不难,不过这也可能因为是pyqt本身的问题,要是用VC++做动态界面编程,那难度对我来说实在有点恐怖呢。好了,废话少说,sextante归纳分析了大多数算法中所用到的参数类型,并将它们划分为栅格输入输出、矢量输入输出、数字等几大类,每一类做成一个界面模板,但要进行算法参数设置时就把算法所需的参数对应的模板界面拿出来,一拼接就成了一个完整的参数设置界面了,多便捷啊!!当然sextante还为每一类模板界面设置了对应的消息响应,各种输入输出几乎都被模板化了,或者说被对象化了。若算法界面实在特殊点,不用担心,sextante它允许你定义自己的界面和动作。此外,sextante还有一个很牛的地方,还记得erdas里面的空间建模工具吧,但sextante里面类似的的流程建模工具更灵活呢,那近400个算法绝大部分都可以在它的流程建模工具里面直接使用,并且model中还可再嵌套model,定义的model又可当做一个一般的算法进行单文件或批量文件处理!!!想想,假如我有10000景MODIS影像,需要经过辐射校正、几何校正、拼接裁剪、投影变换等一系列预处理操作,再接着进行NDVI计算、地表温度反演等后续操作,要是一景一景影像的处理,估计无论哪个数据处理人员都将要崩溃的。我之前做地温反演时只做了几百景数据的处理都想死了,而若是处理的区域再大点,如全国的,再弄个七八年的变化监测,靠,那数据量简直就是天文数字呐!而有了sextante,我只需要定制一系列的操作流程,选择数据进行批量化处理,然后就可以放心去玩,等它帮我把结果弄出来就行了,在服务器上运行更爽。

啊,说到我都兴奋过头了,不是遥感数据处理人员一般体会不到那种感觉吧。也许说的还不够到位,但sextante就是那么简单,还那么灵活强悍,简直就把面向对象编程思想发挥到极致了。不过呢它也并非完美,毕竟它主要还是个“算法适配器”而已,如果你没安装其他应用程序里面的很多算法你是没法用的。此外,它里面现有的操作几乎没有交互性的操作,如控制点的选取等,若要手动做些数据拾取2等操作,现有的sextante就无能为力了。不过不是可以自定义算法么,既然没有自己定义个算法不就行啦,自定义算法照样可以在sextante里面随便用!

想了解sextante更多的话,果断加入sextante的用户邮件列表吧,有什么问题可以直接跟它的创始人对话呢。不过英文不咋好的孩子悲剧了,我很遗憾的告诉你sextante中文资料奇少,而这也正是我在努力的地方,呵呵,我的资源里面有我总结的资料,我还把它的1.0.9版本汉化了,都在资源里面,感兴趣的就下下来好好研究下吧。汉化效果如下:




原创粉丝点击