ENVI Services Engine开发测试简单流程

一. 编写程序

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

猜你喜欢

转载自blog.csdn.net/suntongxue100/article/details/108088559
今日推荐