IDL8.x下通过shapefile裁剪影像
发布日期:2021-05-14 03:07:01 浏览次数:21 分类:精选文章

本文共 1659 字,大约阅读时间需要 5 分钟。

借鉴了,但是其源码均为Classic接口,在经过一定学习后,修改成了IDL8.x下新接口的源码,主要难点在于通过shapefile得到重合边界的矩阵范围。

调用示例代码:

subsetDemo, 'H:\Test\img_buffer', 'H:\Test\shp\img_range.shp', 'H:\Test\img';'H:\Test\img_buffer'表示需要进行裁剪的影像文件名,'H:\Test\shp\img_range.shp'表示用于裁剪的shapefile矢量文件名,'H:\Test\img'表示输出文件名。

源码:(需要注意的是,未对影像进行掩膜处理)

pro subsetDemo, raster_fn, shp_fn, out_fn  compile_opt idl2  if ENVI(/CURRENT) ne !null $    then e = ENVI(/CURRENT) $  else e = ENVI(/HEADLESS)  raster = e.OpenRaster(raster_fn)  shp = e.OpenVector(shp_fn)  shpObj = IDLffShape(shp_fn)  entity = shpObj.GetEntity(0, /ATTRIBUTES)  verts = *(entity.VERTICES)  raster_cs = ENVICoordSys(COORD_SYS_STR = $    raster.SpatialRef.Coord_Sys_Str)  shp_cs = shp.Coord_Sys  shp_cs_str = shp_cs.Coord_Sys_Str  if shp_cs_str.StartsWith('GEOGCS') then begin    shp_cs.ConvertLonLatToLonLat, verts[0, *], $      verts[1, *], lon1, lat1, raster_cs    raster_cs.ConvertLonLatToMap, lon1, lat1, mapx, mapy  endif else if shp_cs_str.StartsWith('PROJCS') then begin    shp_cs.ConvertMapToMap, verts[0, *], $      verts[1, *], mapx, mapy, raster_cs  endif    raster_sr = raster.SpatialRef  raster_sr.ConvertMapToFile, mapx, mapy, filex, filey  filex = filex.Filter('__filter', raster.nsamples)  filey = filey.Filter('__filter', raster.nlines)  max_x = ROUND(MAX(filex))  min_x = ROUND(MIN(filex))  max_y = ROUND(MAX(filey))  min_y = ROUND(MIN(filey))  task = ENVITask('SubsetRaster')  SUB_RECT=[min_x,min_y,max_x,max_y]  task.INPUT_RASTER = raster  Task.Sub_Rect = SUB_RECT  Task.OUTPUT_RASTER_URI = out_fn  Task.Execute  raster.Close  shp.Close  OBJ_DESTROY, shpObjendfunction __filter, value, maxv  RETURN, value ge 0 && value le maxvend

 

上一篇:东方大观:使用IDL程序制作风云四号的时序动图
下一篇:Pyhton压缩与解压tgz

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月18日 16时41分47秒