ENVIサービスエンジンの開発とテストの簡単なプロセス

1.プログラムを書く

ESEプログラムは通常、.savファイルと.proファイルによってコンパイルされた.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

仕事:

{
  "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ファイルとタスクファイルを一緒にcustom_codeフォルダーにコピーします。
ここに画像の説明を挿入

2.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コンソールインターフェイスを開き、タスクを送信します:
ここに画像の説明を挿入
http:// localhost:9191 /
ここに画像の説明を挿入
正常に実行:
ここに画像の説明を挿入

3.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