之前采用的函数是envi_layer_stacking_doit,最近发现了一个十分高效的方法 RegridRaster task
代码如下:
function y_layer_stack,Raster_based,Raster_toresize,respath ;将raster_toresize 影像进行重采样,行列号以及投影与 raster_based保持一致 ; Retrieve the grid parameters of the based raster PixelSize = Raster_based.SPATIALREF.PIXEL_SIZE CoordSysString = Raster_based.SPATIALREF.COORD_SYS_STR NumRows = Raster_based.NROWS NumCols = Raster_based.NCOLUMNS TiePointMap = Raster_based.SPATIALREF.TIE_POINT_MAP TiePointPixel = Raster_based.SPATIALREF.TIE_POINT_PIXEL CoordSys = ENVICoordSys(COORD_SYS_STR = CoordSysString)
; Create a grid definition for the original based raster Grid = ENVIGridDefinition(CoordSys, $ PIXEL_SIZE=PixelSize, $ NROWS=NumRows, $ NCOLUMNS=NumCols, $ TIE_POINT_MAP=TiePointMap, $ TIE_POINT_PIXEL=TiePointPixel)
; Reproject the TM band to the spatial grid RegridTask = ENVITask('RegridRaster') RegridTask.INPUT_RASTER = Raster_toresize RegridTask.GRID_DEFINITION = Grid RegridTask.RESAMPLING = 'Nearest Neighbor'; consider landcover not use Bilinear RegridTask.OUTPUT_RASTER_URI = respath RegridTask.Execute print,'RegridRaster Done!' Raster_toresize.Close return, RegridTask.OUTPUT_RASTER end
调用方法:
img1=e.OpenRaster('img1') ;基础影像 img2=e.OpenRaster('img2') t=y_layer_stack(img1,img2,'img2_regrid');
如果要批量的话,添加for循环即可