ENVI 5.0 SP2 全新的二次开发模式
在ENVI 5.0发布时,便加入了许多全新的二次开发接口。ENVI 5.0 SP2的发布,同样带来了新的功能函数接口。下面对ENVI 5.0版本中新增的二次开发技术进行一个总结。
启动ENVI
IDL中启动ENVI批处理模式,在之前版本的代码如下:
ENVI, /RESTORE_BASE_SAVE_FILES
ENVI_BATCH_INIT
启动ENVI Classic,与之前相同,直接在IDL控制台输入ENVI即可。
ENVI 5.0新增了启动ENVI批处理模式的方法,格式如下:
Result = ENVI([/CURRENT] [, ERROR=variable] [, /HEADLESS] [, LAYOUT=array] [, LOG_FILE=string] [, UVALUE=variable])
最常用的为:
e = ENVI()
或
e = ENVI(/headless)
程序控制
使用e = ENVI()启动ENVI之后,e返回为一个对象,信息如下:
ENVI> help, e
E
ENVI> print, e
ENVI <165828>
可以看到e中包含了许多信息,包括语言、视图布局、日志文件、安装目录、UI对象、UVALUE、版本和Widget_ID。
得到e对象之后,便可以利用e的许多方法进行对ENVI的控制,比如新建图层、新建视图、控制视图布局、添加扩展、打开栅格矢量文件等等。方法及功能介绍如下表所示:
方法 |
功能介绍 |
ENVI.AddCustomReader |
为File > Open As > Custom添加打开自定义格式数据的过程,ENVI 5.0 SP2新增 |
ENVI.AddExtension |
为Toolbox添加扩展工具,ENVI 5.0 SP2新增可添加菜单功能 |
ENVI.Close |
关闭ENVI |
ENVI.CreateRaster |
创建ENVIRaster对象,栅格文件对象 |
ENVI.CreateRasterMetadata |
创建ENVIRasterMetadata对象,栅格描述数据 |
ENVI.CreateRasterSpatialRef |
创建ENVIRasterSpatialRef对象,即空间参考对象 |
ENVI.CreateView |
创建新的视图(View) |
ENVI.ExportRaster |
输出栅格文件,可另存为DTED、ENVI、NITF、TIFF格式等。 |
ENVI.GetOpenData |
获取已经打开的数据,返回栅格或矢量对象数组。 |
ENVI.GetPreference |
获取ENVI设置参数,如输入输出路径等。 |
ENVI.GetTemporaryFilename |
自动获取一个临时文件名,位于临时目录。 |
ENVI.GetView |
获取当前视图,返回值为ENVIView对象。 |
ENVI.HideExtensionFiles |
启动ENVI时隐藏某个扩展补丁 |
ENVI.LogMessage |
将自定义消息保存到日志文件LOG_FILE内。 |
ENVI.OpenRaster |
打开栅格数据,支持大多数格式。 |
ENVI.OpenVector |
打开矢量数据。 |
ENVI.Refresh |
可以禁用或启用ENVI刷新功能。 |
ENVI.ReportError |
弹出错误提示对话框。 |
ENVI.Show |
使ENVI处于当前激活窗口。 |
数据控制
同时,ENVI 5提供了很多与数据相关的对象参考,具体如下表所示。
对象或方法 |
功能介绍 |
ENVICoordSys |
对象:可通过ENVIVector的COORD_SYS属性获取此对象。 |
ENVIFIDToRaster |
方法:将ENVI中的文件ID(FID)转换为ENVIRaster对象。 |
ENVIRaster |
对象:ENVI栅格对象,包含一些栅格数据操作方法。 |
ENVIRasterIterator |
对象:ENVI分块处理对象。 |
ENVIRasterMetadata |
对象:ENVI栅格元数据对象。 |
ENVIRasterSpatialRefPseu |
对象:空间参考对象,可使用CreateRasterSpatialRef创建。 |
ENVIRasterSpatialRefRPC |
对象:空间参考对象,可使用CreateRasterSpatialRef创建。 |
ENVIRasterSpatialRefStan |
对象:空间参考对象,可使用CreateRasterSpatialRef创建。 |
ENVIRasterToFID |
方法:将ENVIRaster转换为FID。 |
ENVITime |
对象:ENVI时间对象。 |
ENVIVector |
对象:ENVI矢量数据对象。 |
显示控制
ENVI 5全新的用户界面,带来了新的操作习惯。增加了图层管理功能,可以在一个视图中叠加显示多个图层,同时提供了几种透视窗口,可以进行卷帘、闪烁等操作。
同样,ENVI 5提供了与这些功能相对应的API,可实现对ENVI的图层进行操作、创建透视窗口、弹出选择文件对话框等功能。如下表所示:
对象 |
功能介绍 |
ENVIPortal |
ENVI透视窗口对象 |
ENVIRasterLayer |
ENVI栅格图层对象,可对图层进行移动等操作。 |
ENVIUI |
ENVI用户界面对象,可弹出文件选择对话框和地图坐标系统界面等。 |
ENVIVectorLayer |
ENVI矢量图层对象,可对图层进行移动等操作。 |
ENVIView |
ENVI视图对象,可对视图进行平移、旋转、缩放等操作。 |
扩展工具
在IDL8.2中,提供了新建ENVI扩展向导,在IDL中点击“文件”-“ENVI扩展”即可弹出如下对话框,填写相关信息,点击完成,则自动新建工程和源码文件。
图:新建ENVI扩展
自动生成的代码如下:
新建ENVI扩展示例
下面用一个示例介绍如何为ENVI Toolbox添加扩展工具,以及为ENVI添加新的菜单(ENVI 5.0 SP2新增功能)。代码如下:
PRO TEST_EXTENSION_EXTENSIONS_INIT
END
PRO TEST_EXTENSION, event
END
创建sav文件方法有两种:
1.
2.
IDL> .compile -v 'D:\IDLWorkspace82\My_Extension\test_extension.pro'
% Compiled module: TEST_EXTENSION_EXTENSIONS_INIT.
% Compiled module: TEST_EXTENSION.
IDL> save, filename = 'D:\TEMP\TEST_EXTENSION.sav', /routines
然后将sav文件拷贝到ENVI安装目录下的Extensions文件夹内,重启ENVI即可。
可以看到创建的Display下面的新菜单,以及包含的二级菜单,和Toolbox下的新工具,如图所示:
图:新增加的菜单和工具