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++或其他软件打开后,输入以下代码,其中第17行的输出文件路径根据实际情况调整。
1 PRO ENVIRaster_Study 2 3 e = ENVI() ; Launch the application 4 5 inputfilefolder=dialog_pickfile(/directory,title='Choose the input directory!');选择输入文件夹 6 inputfilefolderfiles=file_search(inputfilefolder,'*filled',count=num);读取文件夹下的文件 7 8 for j=0,num-1 do begin 9 inputfile=inputfilefolderfiles[j] 10 raster1 = e.OpenRaster(inputfile) ; 读入文件 11 12 inputfilesplit = strsplit(inputfile,'\',/extract) 13 ;这里inputfile类似于"F:\Zhanglan\Postgraduate\Zhoumen\Tongji\OMIO3\2004m1001-TFFSRC_filled"这样的字符串 14 ;将字符串以"\"符号打断,以便取最后一个"\"后的字符串"2004m1001-TFFSRC_filled"经变换后做输出文件名 15 outputfilename=inputfilesplit[N_ELEMENTS(inputfilesplit)-1];取打断后最后一个"\"后的字符串做输出文件名 16 17 filepath_output = 'F:\Zhanglan\Postgraduate\Zhoumen\Tongji\O3Project\FN'+outputfilename+'.tif' ; 输出文件路径 18 raster1.Export, filepath_output, 'TIFF'; 输出为tiff格式 19 Print,'finished' ;打印finished,提示完成 20 endfor 21 end
保存文件后,双击打开(前提是安装了IDL),这时IDL会自动打开pro文件,点击“运行”,这时等待几秒到十几秒,IDL会自动打开ENVI 并弹出“choose the input directory!”对话框,选择要处理的数据所在的文件夹,即可。运行结果如下图所示:
四、ArcGIS中批量进行地理校正
经第三步转换后的TIFF文件,在ArcGIS中打开后,如第二张图所示,丢失了地理坐标信息,无法与正确的地理坐标匹配,所以,还需要进行地理校正。
传统的方法是使用georeferencing手动校正,这无法满足大量数据均需要校正的要求,所以,使用Python脚本做批量处理。
大致方法是在ArcMap中新建toolbox,右键新建的toolbox/add/script,添加写好的脚本。然后,再右键新建的toolbox/new/model,新建一个model,并把添加的脚本拖进model里,点击Model/Run Entire Model即可。具体自行百度。
脚本如下,其中source_pnt为待校正图像的四至点,target_pnt为要校正到的四至点(目标四至点or正确的四至点):
1 try: 2 import arcpy 3 4 arcpy.env.workspace = r"F:/Zhanglan/Postgraduate/Zhoumen/Tongji/O3Project" 5 6 files=arcpy.ListRasters() 7 ##Warp a TIFF raster dataset with control points 8 ##Define source control points 9 source_pnt = "'0 720';'1440 720';'0 0';'1440 0'" 10 11 ##Define target control points 12 target_pnt = outpnts = "'-180 90';'180 90';'-180 -90';'180 -90'" 14 for file in files: 15 outputfilename="F:/Zhanglan/Postgraduate/Zhoumen/Tongji/O3Warp/"+file[:-4]+"WARP.tif" 16 arcpy.Warp_management(file, source_pnt, target_pnt, outputfilename, "POLYORDER1","NEAREST") 17 18 except: 19 print "Warp example failed." 20 print arcpy.GetMessages()
运行完成后,其坐标就校正到正确的位置了,这时候即可以通过建模的方式批量对校正好的数据做投影定义及后续处理。