ENVI中批量转TIFF,Arcgis批量地理校正

扑克投资家 2018-04-19

一、数据介绍

本次使用的数据为时空连续臭氧产品,从武汉大学“地学感知数据质量改善与融合应用研究室”网站(网址:http://sendimage.whu.edu.cn/send-resource-download/)下载,它是“利用发展的遥感信息重建理论与方法,基于Aura卫星上OMI传感器的臭氧总量三级产品OMTO3e,通过对该产品的缺失信息进行重建与修复,生成了全球(2004-2014)最高分辨率的时空连续臭氧制图产品。”——来自官网介绍。产品经解压后如下所示:

ENVI中批量转TIFF,Arcgis批量地理校正

将上面的数据从ENVI里导出为TIFF,并在Arcgis中打开后如下所示,与左下方标准坐标数据(绿色坐标)在地理空间上不匹配,无法进行下一步处理:

ENVI中批量转TIFF,Arcgis批量地理校正

由于数据量比较大,一个一个地georeferencing比较麻烦,因此需要采用批量处理的方法。

二、总体处理思路

首先是要在ENVI中,将图1所示的原始文件批量转换为TIFF,再在arcgis中批量地理校正。

三、ENVI中批量转TIFF

新建TXT文件,并重命名为“ENVIRaster_Study.pro”,用记事本或者notepad++或其他软件打开后,输入以下代码,其中第12行的输出文件路径根据实际情况调整。

PRO ENVIRaster_Study      
   e = ENVI() ; Launch the application 
   inputfilefolder=dialog_pickfile(/directory,title='Choose the input directory!');选择输入文件夹
   inputfilefolderfiles=file_search(inputfilefolder,'*filled',count=num);读取文件夹下的文件
   for j=0,num-1 do begin
     inputfile=inputfilefolderfiles[j]   
       raster1 = e.OpenRaster(inputfile) ; 读入文件      
       inputfilesplit = strsplit(inputfile,'\',/extract)
       ;这里inputfile类似于"F:\Zhanglan\OMIO3\2004m1001-TFFSRC_filled"这样的字符串
       ;将字符串以"\"符号打断,<br />         ;以便取最后一个"\"后的字符串"2004m1001-TFFSRC_filled"经变换后做输出文件名
       outputfilename=inputfilesplit[N_ELEMENTS(inputfilesplit)-1];取打断后最后一个"\"后的字符串做输出文件名
       filepath_output = 'F:\Zhanglan\Postgraduate\Zhoumen\Tongji\O3Project\FN'+outputfilename+'.tif' ; 输出文件路径    
       raster1.Export, filepath_output, 'TIFF'; 输出为tiff格式    
       Print,'finished' ;打印finished,提示完成    
   endfor    
 end

保存文件后,双击打开(前提是安装了IDL),这时IDL会自动打开pro文件,点击“运行”,选择要处理的数据所在的文件夹,即可。运行结果如下图所示:

ENVI中批量转TIFF,Arcgis批量地理校正

四、ArcGIS中批量进行地理校正

经第三步转换后的TIFF文件,在ArcGIS中打开后,如第二张图所示,丢失了地理坐标信息,无法与正确的地理坐标匹配,所以,还需要进行地理校正。

传统的方法是使用georeferencing手动校正,这无法满足大量数据均需要校正的要求,所以,使用Python脚本做批量处理。

大致方法是在ArcMap中新建toolbox,右键新建的toolbox/add/script,添加写好的脚本。然后,再右键新建的toolbox/new/model,新建一个model,并把添加的脚本拖进model里,点击Model/Run Entire Model即可。具体自行百度。

那脚本如下,其中source_pnt为待校正图像的四至点,target_pnt为要校正到的四至点(目标四至点or正确的四至点):

try:
     import arcpy
     
     arcpy.env.workspace = r"F:/Zhanglan/Postgraduate/Zhoumen/Tongji/O3Project"
     
     files=arcpy.ListRasters()
     ##Warp a TIFF raster dataset with control points
     ##Define source control points
     source_pnt = "'0 720';'1440 720';'0 0';'1440 0'"
     
     ##Define target control points
     target_pnt = outpnts = "'-180 90';'180 90';'-180 -90';'180 -90'"
     for file in files:
         outputfilename="F:/Zhanglan/Postgraduate/Zhoumen/Tongji/O3Warp/"+file[:-4]+"WARP.tif"
         arcpy.Warp_management(file, source_pnt, target_pnt, outputfilename, "POLYORDER1","NEAREST")
     
 except:
     print "Warp example failed."
     print arcpy.GetMessages()

等待结果即可。

相关推荐