主要是在「原始碼的基礎上增加了「 envi_file_mng, id =fid,/remove」 釋放記憶體的部分。
;;;
;image_dir為影像路徑;;
;;vector_dir向量路徑;;
;;outfile_dir裁剪後結果路徑
pro bach_subset_viashp,image_dir,vector_dir,outfile_dir
compile_opt
idl2
;compole_opt是對idl編譯規則的修改,關鍵字有defint32,strictarr,
;idl2等
;defint32把預設的idl整型資料16位改為32位
;strictarr強迫陣列元素用中括號,不用小括號
;idl2則為上述二者的並。
e=envi
(/headless)
;啟動envi
image_dir=
'f:\e\data\grass_yield\2000_2018gosif\8day'
;根據檔案存放的目錄進行相應修改
image_files=
file_search
(image_dir,
'*.tif'
,count=numfiles)
;根據相應的檔案格式修改過濾條件
for i=
0,numfiles-
1do begin
image_file=image_files[i]
print,image_file
ifstrlen
(image_file) eq 0 then return
envi_open_file
, image_file, r_fid=fid, $
/no_interactive_query,
/no_realize
envi_file_query
, fid, file_type=file_type,
bnames
=bnames
,nl=nl, ns=ns,dims=dims,nb=nb
;開啟shape檔案
vector_dir=
'f:\e\data\grass_yield\shp\wgs84\minqin'
;根據檔案存放的目錄進行相應修改
shapefile=
file_search
(vector_dir,
'*.shp'
,count=numshps)
ifstrlen
(shapefile) eq 0 then return
oshp =
obj_new
('idlffshape'
,shapefile)
oshp-
>getproperty,n_entities=n_ent,attribute_info=attr_info,$
n_attributes=n_attr,entity_type=ent_type
roi_shp =
lonarr
(n_ent)
for ishp =
0,n_ent-1do
begin
entitie = oshp-
>
getentity
(ishp)
if entitie.shape_type eq
5then
begin
record =
*(entitie.vertices)
;轉換檔案座標
envi_convert_file_coordinates
,fid,xmap,ymap,record[0,
*],record[1,
*];建立roi
roi_shp[ishp]
=envi_create_roi
(ns=ns,nl=nl)
envi_define_roi
,roi_shp[ishp]
,/polygon,xpts=
reform
(xmap)
,$ypts=
reform
(ymap)
;記錄x
,y的區間,裁剪用
if ishp eq
0then
begin
xmin =
round
(min
(xmap,max = xmax)
) ymin =
round
(min
(ymap,max = ymax)
)endif
else
begin
xmin = xmin <
round
(min
(xmap)
) xmax = xmax >
round
(max
(xmap)
) ymin = ymin <
round
(min
(ymap)
) ymax = ymax >
round
(max
(ymap)
)endelse
endif
oshp-
>destroyentity,entitie
endfor
;ishp
xmin = xmin >
0 xmax = xmax < ns-
1 ymin = ymin >
0 ymax = ymax < nl-
1;判斷輸出檔案路徑,在原檔名基礎上輸出
outfile_dir=
file_dirname
(image_file,
/mark_directory
) out_name = outfile_dir +
'\' +file_basename(image_file,'
.tif')$
+'_'
+file_basename
(shapefile,
'.shp')+
'_roi.tif'
out_dims =[-
1,xmin,xmax,ymin,ymax]
pos =
indgen
(nb)
envi_doit
,'envi_subset_via_roi_doit'
,background=
0,fid=fid,$
dims=out_dims,out_name=out_name,ns = ns, nl = nl,pos=pos,$
roi_ids=roi_shp
envi_file_mng
, id =fid,
/remove
endfor
;i=numfiles
tmp =
dialog_message
('cut is end!'
,/info)
envi_batch_exit
end
參考1:
參考2:
原始:
如何利用 bat檔案來對其它眾多檔案進行批量改名
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!批處理 如下 echo offset a total 0set prefix myfor m in do if not m mybat.bat ren m prefix m set a total total 1 echo 共有 total 個檔案...
SHELL程式設計 利用CSIDL開啟特殊資料夾
csidl描述及使用說明 csidl 表示的是windows shell中乙個特殊資料夾的標識值。這裡說的特殊資料夾指的是由windows shell所定義的資料夾,例如 我的文件 站 inernet cache資料夾 就是一些由shell指定的特殊資料夾.這些特殊資料夾可以是乙個磁碟上的物理路徑,...
SHELL程式設計 利用CSIDL開啟特殊資料夾
csidl描述及使用說明 csidl 表示的是windows shell中乙個特殊資料夾的標識值。這裡說的特殊資料夾指的是由windows shell所定義的資料夾,例如 我的文件 站 inernet cache資料夾 就是一些由shell指定的特殊資料夾.這些特殊資料夾可以是乙個磁碟上的物理路徑,...