跳转至

ENVITask:全新的 ENVI 5.1 分析 API

原文链接: https://www.nv5geospatialsoftware.com/Learn/Blogs/Blog-Details/envitask-the-new-envi-51-analytics-api

13936 评价本文:

未评分

ENVITask:全新的 ENVI 5.1 分析 API

作者:匿名 发布日期:2014年2月13日,星期四

ENVI 5.1 引入了一个全新的 ENVITask API 用于处理数据。我们开发这个新 API 时,已将如何使用它的信息内置于 API 中,并提供了实时的验证功能。第一步是查询系统,了解有哪些 ENVITask 可供使用。这通过 ENVI 对象上的新 TASK_NAMES 属性实现:

IDL> nv = ENVI() ENVI> PRINT, nv.TASK_NAMES QUAC RPCOrthorectification RadiometricCalibration ReprojectGLT

一旦确定了要使用的任务名称,就可以使用新的 enviTask() 函数来创建它。

ENVI> oTask = ENVITask('RadiometricCalibration') ENVI> help, oTask oTASK ENVIRADIOMETRICCALIBRATIONTASK <196531>

现在您有了任务对象,可能想知道如何使用它。您可以编程方式获取各个参数的信息。您可以从 ParameterNames() 函数获取参数列表,并通过将参数名传递给 Parameter() 函数来获取对其中一个 ENVITaskParameter 对象的引用:

ENVI> print, oTask.ParameterNames() CALIBRATION_TYPE INPUT_RASTEROUTPUT_DATA_TYPE OUTPUT_RASTER OUTPUT_RASTER_URI SCALE_FACTOR

ENVI> oParam = oTask.Parameter('input_raster') ENVI> print, oParam ENVITASKPARAMETER <196676> CHOICE_LIST = !NULL DEFAULT = !NULL DESCRIPTION ='指定要进行辐射定标的 ENVIRaster 对象' DIRECTION = 'IN' NAME ='INPUT_RASTER' REQUIRED = 1 TYPE ='ENVIRASTER' VALUE = !NULL

从打印输出可以看出,我们提供了您构建变量作为每个参数值所需的所有信息。除了参数名称,您还会得到其人类可读的描述、IDL 类型、是输入还是输出参数、是必需还是可选,以及其当前值。某些参数已设置了默认值,某些参数在 CHOICE_LIST 属性中定义了允许值的数组。如果打印 ENVITask 本身,您将获得关于其所有参数的类似输出信息。您不必按名称请求每个参数来获取或设置其 VALUE 属性,可以直接检索或设置这些值:

ENVI> print, oTask.Scale_Factor 1.0000000000000000 ENVI> oTask.Scale_Factor= 3.0

每次设置参数值时,都会进行验证。任何无法转换为所需类型或不符合 CHOICE_LIST(如果已定义)的值都会立即给出反馈,以便您立即修正,而无需等到冗长的计算中途使用它们时才出现问题。设置完所有输入参数后,调用 ENVITask::Execute 方法来运行算法。以下是一个示例:加载用户选择的栅格,将其定标为百分比反射率,然后将结果输出加载到栅格图层中:

; 加载栅格 nv = ENVI() inputFile = Dialog_Pickfile(TITLE='选择要定标的文件') oRaster = nv.OpenRaster(inputFile) ; 加载 ENVITask oTask = enviTask('RadiometricCalibration') ; 设置参数 oTask.INPUT_RASTER = oRaster oTask.CALIBRATION_TYPE = 1 ; 大气层顶(TOA)反射率 oTask.SCALE_FACTOR = 100 oTask.OUTPUT_DATA_TYPE = 12 ; 无符号整型(UInt) ; 运行任务 oTask.Execute ; 将输出加载到图层 oView = nv.GetView() oLayer = oView.CreateLayer(oTask.Output_Raster)

这个示例略显刻意,但它展示了如何轻松地使用 ENVITask 对整个数据集合进行批量处理。您不必在 ENVI 中打开每个栅格并使用"辐射定标"工具箱项目的用户界面,而是可以使用 FILE_SEARCH 并对给定目录中的每个文件进行 FOR 循环。需要注意的一点是,此示例完全没有使用 OUTPUT_RASTER_URI 参数。ENVITask 的定义采用了一种约定:每个 ENVIRaster 输出参数都与一个输入参数配对,该输入参数具有相同的名称,只是附加了‘_URI’。这允许任务使用者指定他们想要的输出位置和文件名(如果他们想保留输出栅格)。如果未定义输入 URI 参数,则 ENVITask 将生成一个临时文件。此外,当 ENVI 关闭时,它会删除该临时文件。这样,如果您想将多个 ENVITask 链接在一起,就不必担心清理中间产品。

在 ENVI 5.1 中,我们仅发布了少数几个 ENVITask,但请在未来的版本中寻找更多的 ENVITask。

Water, Water Everywhere Why LiDAR?