ENVI中批量转TIFF,Arcgis批量地理校正
一、数据介绍
本次使用的数据为时空连续臭氧产品,从武汉大学“地学感知数据质量改善与融合应用研究室”网站(网址:http://sendimage.whu.edu.cn/send-resource-download/)下载,它是“利用发展的遥感信息重建理论与方法,基于Aura卫星上OMI传感器的臭氧总量三级产品OMTO3e,通过对该产品的缺失信息进行重建与修复,生成了全球(2004-2014)最高分辨率的时空连续臭氧制图产品。”——来自官网介绍。产品经解压后如下所示:
将上面的数据从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文件,点击“运行”,选择要处理的数据所在的文件夹,即可。运行结果如下图所示:
四、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()
等待结果即可。