分享

envi二次开发中文件的读取和存储

 昵称14236700 2013-10-15


在做程序开发时,最基本需要做的是如何编程实现文件的打开和保存,这里我们来介绍一下如何采用envi+idl的方式打开和保存一个文件

首先我们来看这么一个程序

;该程序是利用envi的二次开发功能来对数据进行处理 
;主要功能是利用envi打开文件,并将文件保存为另外一种格式 
;这个程序对于envi处理后的文件只能envi打开,其他文件打不开的情况下非常有用 
;这个程序包含了两个小程序,一个是处理单个文件,另外一个便是批处理的方式 
pro envi_savefile

    ;  filename =envi_pickfile() 
    ;envi_pickflie()打开一个文件,返回选择的文件名

      cd,'d:\test' 
      filenames=file_search('*.tif',count=n) 
     print,n,filenames 
     len=strlen(filenames[0]) 
    ;len计算文件名的长度 
  for i=0,n-1 do begin 
     filename=filenames[i] 
     envi_open_file,filename,r_fid =fid 
     ;envi_open_file,返回文件的fid 
     ;envi_select可以交互的选择文件,并返回fid 
    envi_file_query,fid,data_type=data_type, xstart=xstart, $ 
    ystart=ystart, interleave=interleave, nb=nb, nl=nl, ns=ns,$ 
   offset=offset,dims=dims 
   ;envi_file_query查询文件的头文件信息 
    map_info=envi_get_map_info(fid=fid) 
    proinfo=envi_get_projection(fid=fid) 
    ;envi_get_map_info and envi_get_projection返回图像的投影坐标信息 
    data =envi_get_data(fid=fid,dims=dims,pos=[0]) 
    ;envi_get_data是获取一个波段数据,dims是数据的范围,pos是波段;用envi_get_data的方式,一次只能打开一个波段

   ;envi_get_slice,可以获取一个数据中某一行的所有波段数据

  ;envi_enter_data,将文件输出到envi文件列表中                                                                  
;    image =strmid(filename,0,len-8)+'.tif';'tif' 
    ;同样也可以用下面这一行程序 
    image=envi_pickfile() 
    ;在打开对话框中输入文件名即可,记着加后缀 
    ; 但是利用打开对话框的方式写入img格式的话,其他软件不能识别 
;    openw,lun,image,/get_lun 
;    
;    writeu,lun,data 
;    
;    free_lun,lun 
    ;如果是保存为img格式,必须用writeu的方式写入,但是如果是tif,则用下面的命令 
    write_tiff,image,data,/float 
    envi_setup_head, fname=image, ns=ns, nl=nl, nb=nb, $ 
      data_type=data_type, offset=offset, interleave=interleave, $ 
       xstart=xstart, ystart=ystart, $ 
      descrip='iimage', /write, /open, $ 
        map_info=map_info file_type=33 

    ;将头文件信息写入新的文件 
   endfor 
end

如果采用envi_setup_head,来进行文件信息写入,要写上file_type对应的关键字,

否则的话,会导致保存的图像有个偏移,

此外ENVI_Write_ENVI_File也可以保存文件,如

ENVI_Write_ENVI_File,data,out_name=image,map_info=map_info,r_fid=fid

但是保存的文件不能被其他软件读

用ENVI_OUTPUT_TO_EXTERNAL_FORMAT也可以输出你想要的格式,并且相对于write来写更容易被其他软件接受 
;其实用write_tiff写出的文件,在erdas中不认其坐标除非是采用了geotiff=geographictypegeokey

如果是二进制文件,可以采用writeu保存,然后写入头文件

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多