官方给了一些讲解(地址:SARscape/SARscape IDL Scripting/SARscape batch object),以及一些参考例子(地址:SARscape/SARscape IDL Scripting/Example)都可以用来学习参考。
SARscape 二次开发可以分为10个详细的步骤,下面我将多视(MultiLooking)开发的代码为例,进行讲解,完整的程序连接在本文末尾。
步骤1. 批量初始化和临时目录设置(可选)
启动SARscape模块,设置临时路径。
SARscape_Batch_Init,Temp_Directory=aTmp
步骤2. 显示所有 SARscape 函数(可选)
这一个步骤是写程序是需要用到的,等确定SARScape模块调用的函数(类)的名称,可以删掉,具体用法可以查看前面提到的官方讲解。
;(obj_new('SARscapeBatch'))->Manifest
注:最新几个版本可以用“.”代替“->”,只不过为了便于和属性、结构体区分,依然用这个表示
步骤3. 输入数据和参数
这个可以打开ENVI SARscape模块,具体查看所需的参数
; 3) 输入数据和参数
; inRasterName_data = theTestDir+Path_sep()+'_pwr';
; outRasterName = theTestDir+Path_sep()+'output'+Path_sep()+'_geo';
; inRasterName_dem = theTestDir+Path_sep()+'start_dem';;
; aGridSize = 25.0
步骤4. 加载用户特定的默认文件
这个默认文件是用来设置缓存文件、SARscape 首选项,具体设置可以参考博客
;4) 加载用户特定的默认文件(即 SARscape_preferences_user_Sentinel.sml)可选
;/FJEA_Program/Resource/SARscape_preferences_user_Sentinel_TOPSAR.sml
default_file_name = File_dirname(myResult.path)+Path_sep()+'Resource'+Path_sep()+'SARscape_preferences_user_Sentinel_TOPSAR.sml'
aRet = SARscape_set_save_actual_default_in_dfl (default_file_name)
步骤5. 设置工作目录可选(可选)
;5) 设置工作目录可选
IF (SARscape_set_working_in_actual_default(aWorkDir) EQ 'NotOK') THEN BEGIN
ok = Dialog_message('您必须初始化一个有效的工作目录' ,/ERROR)
SARscape_Batch_Exit
Return
ENDIF
步骤6. 创建具体对象
这一个是用来选择功能的,例如:导入哨兵一号数据、多视、InSAR、DInDAR、滤波、裁剪……其对应的函数可以通过步骤2来查找;
; 6) 创建 IMPORTSENTINEL1FORMAT 对象
aActualStep = 0
oSB = Obj_new('SARscapeBatch',Module='INSARCOMPLEXDATAMULTILOOKING')
IF (~Obj_valid(oSB)) THEN BEGIN
; 对象无效,然后用户必须管理错误
; 退出 SARscape 批处理
SARscape_Batch_Exit
Return
ENDIF
步骤7. 填写参数
即需要将参数填入到步骤6中的对象中,具体查看需要填写的参数可以用,并对比ENVI SARscape,如下图所示;
;oSB.Listparams
oSB->Setparam,'input_file_name', Files[index];必须是一个一个文件处理,因此写循环
oSB->Setparam,'output_file_name', Out_Path_Name
步骤8. 验证参数
这个步骤是用来验证填入的参数是否可行。
;8) 验证参数
ok = oSB->Verifyparams(Silent=0)
IF ~ok THEN BEGIN
Print,' ************************************************************* '
Print,' 模块无法执行; 一些参数需要填写 '
Print,' ************************************************************* '
; Exit from SARscape batch
SARscape_Batch_Exit
Return;
ENDIF
步骤9. 流程执行
根据前面选择的对象以及设置的参数,来具体处理数据;
;OK = oSB->Executeprogress()
OK = oSB->Execute()
以上两个代码,区别之处在于前一个有处理进度;后面一个没有进度;想用前面的代码,则必须打开ENVI。也可以用下面的代码来判断ENVI是否打开,来自动选择;
IF (Strpos(!PROMPT,'ENVI') GT -1 ) THEN BEGIN
OK = oSB->Executeprogress(show_end_dialog='NotOK')
ENDIF ELSE BEGIN
OK = oSB->Execute();
ENDELSE
IF ~ok THEN BEGIN
Print,' 多视处理:失败 '
SARscape_Batch_Exit
Return
ENDIF
步骤10. 退出批处理程序
最后一步,就是关闭SARScape模块
; 10)退出批处理程序
SARscape_Batch_Exit
注:
1. 在代码的第一句,需要加上下面这句代码。因为遥感数据范围很大,常规的数据空间(例如:int 2个字节)保存不了,所以需要加上这句代码,即实现将数据保存的空间扩大,int型的字节变为4个
COMPILE_OPT idl2
2. 以上代码,如果操作错误,其结果都是返回0或NotOK,正确时才会返回1或则OK。因此,可以加入判断,来判定程序出错地方;
完整的程序连接在本文末尾,程序截图如下:
点击下载完整的程序
路漫漫其修远兮,吾将上下而求索。