之前采用的函數是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循環即可