一. 编写程序
ESE程序一般由.pro文件编译的.sav文件和.task文件构成,这里测试编写一个计算NDVI的程序。
1. 构建工程
新建gsf_cal_ndvi工程,新建相同工程名的.pro主过程文件以及.task文件。代码如下:
Pro:
PRO gsf_cal_ndvi, input_raster_uri=input_raster_uri,outdir=outdir,extension=extension
COMPILE_OPT idl2
e=envi(/headless)
;input_raster_uri = 'C:\Program Files\Harris\ENVI55\data\qb_boulder_msi'
;outdir = 'F:\envitemp'
;extension = '_ndvi.dat'
raster = e.openraster(input_raster_uri)
; Calculate NDVI
ndvi_raster = ENVIPixelwiseBandMathRaster(raster,'float(b4-b3)/(b4+b3)')
; Delete abnomal values
output_raster_uri = get_outfile(input_raster_uri,extension,outdir=outdir)
expression = "(b1 lt 0)*0 + ((b1 ge 0) and (b1 le 1))*b1 + (b1 gt 1)*1"
Task = ENVITask('PixelwiseBandMathRaster')
Task.INPUT_RASTER = ndvi_raster
Task.EXPRESSION = expression
Task.OUTPUT_RASTER_URI = output_raster_uri
task.execute
e.close
END
FUNCTION get_outfile,file,extension,outdir=outdir
if ~FILE_TEST(outdir,/directory) then file_mkdir,outdir
dotpost=STRPOS(file,'.',/reverse_search)
ext = strmid(file,dotpost)
infilename = FILE_BASENAME(file,ext)
IF ~keyword_set(outdir) THEN $
outdir=file_dirname(file)
out_name = FILEPATH(infilename+extension,root_dir=outdir)
return,out_name
END
Task:
{
"name":"gsf_cal_ndvi",
"base_class":"ENVITaskFromProcedure",
"routine":"gsf_cal_ndvi",
"display_name":"Cal_NDVI",
"description":"Cal_NDVI",
"revision":"1.0.0",
"schema":"envitask_3.2",
"parameters":[
{
"name":"input_raster_uri",
"display_name":"Input Raster",
"type":"string",
"direction":"input",
"required":true,
"description":"Specify the input raster."
},
{
"name":"outdir",
"keyword":"outdir",
"display_name":"Output Directory",
"type":"string",
"direction":"INPUT",
"required":true,
"description":"Output Directory."
},
{
"name":"extension",
"display_name":"output raster extension",
"type":"string",
"default":"_ndvi.dat",
"direction":"input",
"required":true,
"description":"Specify the output raster file extension."
}
]
}
2. 本地调试
可以先在本地调试程序,看是否可以正常运行:
3. 编译发布程序
编译主过程到内存:
.compile -v 'F:\envitemp\IDL\gsf_cal_ndvi\gsf_cal_ndvi.pro'
编译为sav文件:
save,'gsf_cal_ndvi',filename='F:\envitemp\IDL\gsf_cal_ndvi\gsf_cal_ndvi.sav',/routines
发布,将sav文件及task文件一起拷贝到custom_code文件夹下即可:
二. GSF提交任务测试
编写test.js文件,存放在gsf23安装目录下:
//submit the job
var request = require('request');
request.post({
url:"http://localhost:9191/ese/services/ENVI/gsf_cal_ndvi/submitJob",
json:{
'input_raster_uri':'C:\\Program Files\\Harris\\ENVI55\\data\\qb_boulder_msi',
'outdir':'F:\\envitemp',
'extension':'_ndvi.dat'
}
},
function(err,resp){
var statusURL = "http://localhost:9191" + resp.headers.location;
console.log('Status URL',statusURL);
}
);
打开gsf console界面,提交任务:
http://localhost:9191/
运行成功:
三. 在IDL中提交任务测试
类似功能测试代码:
PRO submit_ese
COMPILE_OPT idl2
; e = envi(/current)
file = 'G:\ENVIIDL_ExampleCodes\02_InputOutput\data\can_tmr.img'
;files = DIALOG_PICKFILE(/multiple_files,path='d:\',filter=['*.dat'])
raster = orderedhash('url',file,'factory','URLRaster')
task = ESE.GetTask('http://localhost:9191/ese/services/ENVI/SpectralIndex')
;print,task
task.INDEX = 'Normalized Difference Vegetation Index'
task.INPUT_RASTER = raster
task.OUTPUT_RASTER_URI = 'D:\ndvitest.dat'
job = task.run()
END