PRO Subset_via_shp_update

COMPILE_OPT idl2

ENVI,/restore_base_save_files

envi_batch_init,LOG_FILE='batch.log'

;打开要裁剪的图像

image_dir='F:\PDF\' ;根据文件存放的目录进行相应修改

image_files=file_search(image_dir,'*.tif',count=numfiles)  ;根据相应的文件格式修改过滤条件

for i=0,numfiles-1 do begin

image_file=image_files[i]

print,image_file

if strlen(image_file) eq 0 then return

ENVI_OPEN_FILE, image_file, r_fid=fid, /no_interactive_query, /no_realize

IF fid EQ -1 THEN  RETURN

ENVI_FILE_QUERY, fid, file_type=file_type, nl=nl, ns=ns,dims=dims,nb=nb

;打开shape文件

;shapefile = DIALOG_PICKFILE(title='choose the SHP file:',filter='*.shp')

shapefile=file_search(image_dir,'*.shp')

if strlen(shapefile) eq 0 then return

oshp = OBJ_NEW('IDLffshape',shapefile)

oshp->Getproperty,n_entities=n_ent,Attribute_info=attr_info,$

n_attributes=n_attr,Entity_type=ent_type

roi_shp = LONARR(n_ent)

FOR ishp = 0,n_ent-1 DO BEGIN

entitie = oshp->Getentity(ishp)

IF entitie.shape_type EQ 5 THEN BEGIN

record = *(entitie.vertices)

;转换文件坐标

ENVI_CONVERT_FILE_COORDINATES,fid,xmap,ymap,record[0,*],record[1,*]

;创建ROI

roi_shp[ishp] = ENVI_CREATE_ROI(ns=ns,nl=nl)

ENVI_DEFINE_ROI,roi_shp[ishp],/polygon,xpts=REFORM(xmap),ypts=REFORM(ymap)

;记录X,Y的区间,裁剪用

IF ishp EQ 0 THEN BEGIN

xMin = ROUND(MIN(xMap,max = xMax))

yMin = ROUND(MIN(yMap,max = yMax))

ENDIF ELSE BEGIN

xMin = xMin < ROUND(MIN(xMap))

xMax = xMax > ROUND(MAX(xMap))

yMin = yMin < ROUND(MIN(yMap))

yMax = yMax > ROUND(MAX(yMap))

ENDELSE

ENDIF

oshp->Destroyentity,entitie

ENDFOR;ishp

xMin = xMin >0

xMax = xMax < ns-1

yMin = yMin >0

yMax = yMax < nl-1

;判断输出文件路径,在原文件名基础上输出

outfiledir=file_dirname(image_file,/MARK_DIRECTORY)

out_name = outfiledir +'\' +file_baseName(image_file,'.tif')+'_roi.img

out_dims = [-1,xMin,xMax,yMin,yMax]

pos = INDGEN(nb)

ENVI_DOIT,'ENVI_SUBSET_VIA_ROI_DOIT',background=0,fid=fid,dims=out_dims,out_name=out_name,$

ns = ns, nl = nl,pos=pos,roi_ids=roi_shp

endfor

tmp = DIALOG_MESSAGE('裁切结束!',/info)

envi_batch_exit

END

======================

另一个代码

;+

;:Description:

;    Mask Raster data by Evf file.

;

;:Author: tiands@esrichina.com.cn

;

;:Date: 2013-9-5 10:59:58

;-

PRO maskimg_byevf

COMPILE_OPT idl2

ENVI,/RESTORE_BASE_SAVE_FILES

;initialize ENVI in batch mode:

ENVI_BATCH_INIT

fileextension='img'

;选择数据文件夹

folder=ENVI_PICKFILE(TITLE='Select image Data Folder',/DIRECTORY)

;选择evf

evfname=DIALOG_PICKFILE(title='Select Evf ')

IF (folder EQ '') THEN RETURN

;查找数据

imagefiles=FILE_SEARCH(folder,'*.'+fileextension,/FOLD_CASE,COUNT=count);这里的fold_case需要查询

IF (count EQ 0) THEN BEGIN

void=DIALOG_MESSAGE(['Unable to locate image tile datasets in the selected folder :',$

'',folder])

!QUIET=quietInit

RETURN

ENDIF

;输出文件夹

outFolder=ENVI_PICKFILE(TITLE='Select Folder For Output',/DIRECTORY)

IF (outFolder EQ '') THEN BEGIN

!QUIET=quietInit

RETURN

ENDIF

outFolder = outFolder + PATH_SEP()

CD, outFolder, CURRENT=current

FOR i = 0 ,(count-1) DO BEGIN

;open dataset:

ENVI_OPEN_FILE, imagefiles[i], R_FID=fid

IF (fid EQ -1) THEN BEGIN

CONTINUE

ENDIF

;输出文件

out_name=outFolder+FILE_BASENAME(imagefiles[i],fileExtension)+'bil'

;掩膜功能

SPATIALSUBSET,fid,evfName,out_name

ENDFOR

END

;基于EVF文件的掩膜

PRO SPATIALSUBSET,data_fid,evfName,out_name

COMPILE_OPT IDL2

ENVI_FILE_QUERY,data_fid,BNAMES= BNAMES,ns=ns,nl=nl,nb=nb

;打开矢量文件

evf_id = ENVI_EVF_OPEN(evfName)

;获取相关信息

ENVI_EVF_INFO, evf_id, num_recs=num_recs, $

data_type=data_type, projection=projection, $

layer_name=layer_name

roi_ids = LONARR(num_recs)

;输出的坐标系统

;    oproj=envi_get_projection(fid=data_fid)

;读取各个记录的点数

FOR i=0,num_recs-1 DO BEGIN

record = ENVI_EVF_READ_RECORD(evf_id, i)

;    ;转换投影坐标点

;    envi_convert_projection_coordinates, $

;   record[0,*],record[1,*], projection, $

;   oxmap, oymap, oproj

;转换为文件坐标;这里更改了oxmap, oymap

;原来的是   ENVI_CONVERT_FILE_COORDINATES,data_fid,xmap,ymap,record[0,*],record[1,*]

ENVI_CONVERT_FILE_COORDINATES,data_fid,xmap,ymap,record[0,*],record[1,*]

;创建ROI

roi_id = ENVI_CREATE_ROI(color=4,ns = ns , nl = nl)

ENVI_DEFINE_ROI, roi_id, /polygon, xpts=REFORM(xMap), ypts=REFORM(yMap)

roi_ids[i] = roi_id

;记录XY的区间,裁剪用

IF i EQ 0 THEN BEGIN

xmin = ROUND(MIN(xMap,max = xMax))

yMin = ROUND(MIN(yMap,max = yMax))

ENDIF ELSE BEGIN

xmin = xMin < ROUND(MIN(xMap))

xMax = xMax > ROUND(MAX(xMap))

yMin = yMin < ROUND(MIN(yMap))

yMax = yMax > ROUND(MAX(yMap))

ENDELSE

ENDFOR

xMin = xMin >0

xmax = xMax < ns-1

yMin = yMin >0

ymax = yMax < nl-1

;创建掩膜,裁剪后掩

ENVI_MASK_DOIT,$

AND_OR =1, $

/IN_MEMORY, $

ROI_IDS= roi_ids, $ ;ROI的ID

ns = ns, nl = nl, $

/inside, $ ;区域内或外

r_fid = m_fid

out_dims = [-1,xMin,xMax,yMin,yMax]

ENVI_MASK_APPLY_DOIT, FID = data_fid, POS = INDGEN(nb), DIMS = out_dims, $

M_FID = m_fid, M_POS = [0], VALUE = 0, $

OUT_BNAME= BNAMES+' mask',IN_MEMORY=0,out_name=out_name,r_fid=r_fid

;掩膜文件ID移除

ENVI_FILE_MNG, id =m_fid,/remove

;ENVI_FILE_MNG, id =data_fid,/remove

END

idl 批量裁剪代码的更多相关文章

  1. arcgis影像批量裁剪代码

    # -*- coding:utf-8 -*- # Name: ExtractByMask_Ex_02.py # Description: Extracts the cells of a raster ...

  2. ArcGIS + Python 批量裁剪、添加X/Y坐标脚本

    前言 前一段时间,同事拿来的数据范围太大,用不了那么多(只需要一个乡镇的,结果拿来区县的),太多了加载也是问题.所以就让我给处理下. 由于文件较多,手动裁剪的话,我一个一个用ArcGIS工具箱中的工具 ...

  3. 艾伦 Visual Studio 批量自动化代码操作工具-VS插件发布

    艾伦 Visual Studio 批量自动化代码操作工具 以下简称--艾伦工具箱. 艾伦工具箱是一个多文件批量处理插件,目的是为了广大开发者提高开发效率,减少项目代码规范化审计,缩短开发者的项目开发周 ...

  4. Android JUnit Test——批量运行测试代码

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ Android测试三要素 写Android测试用例有三要素,一是我们用的“安卓模拟器device” ...

  5. 【转】- 使用T4模板批量生成代码

    前言 之前在 “使用T4模板生成代码 - 初探” 文章简单的使用了T4模板的生成功能,但对于一个模板生成多个实例文件,如何实现这个方式呢?无意发现一个解决方案 “MultipleOutputHelpe ...

  6. 黄聪:如何使用CodeSmith批量生成代码(转:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html)

    先看看CodeSmith的工作原理: 简单的说:CodeSmith首先会去数据库获取数据库的结构,如各个表的名称,表的字段,表间的关系等等,之后再根据用户自定义好的模板文件,用数据库结构中的关键字替代 ...

  7. ArcGIS案例学习笔记-批量裁剪地理模型

    ArcGIS案例学习笔记-批量裁剪地理模型 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 功能:空间数据的批量裁剪 优点:1.批量裁剪:任意多个目标数据,去裁剪任意 ...

  8. 如何使用CodeSmith批量生成代码(原创系列教程)

    在上一篇我们已经用PowerDesigner创建好了需要的测试数据库,下面就可以开始用它完成批量代码生成的工作啦. 下面我会一步步的解释如何用CodeSmith实现预期的结果的,事先声明一下,在此只做 ...

  9. [转]黄聪:如何使用CodeSmith批量生成代码

    本文转自:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html 在上一篇我们已经用PowerDesigner创建好了需要的测 ...

随机推荐

  1. java 最佳且开源的反编译工具

    1.jad:2.jode 很多gui的反编译工具(decafe,DJ,cavaJ)差不多都是基于jad和jode的.

  2. unsupported dynamic reloc R_ARM_REL32 AND hidden symbol '__dso_handle' is not defined

    项目里编译codec src\makefiles\android\codec\Makefileline 25 原本用 4.6 不会报错-L/data/android/android-ndk/sourc ...

  3. Windows下cmd的替代软件——PowerCmd

    Powercmd 是一款运行在windows下的cmd增强软件(A Better Command Prompt Replacement Tool),当前最新的版本为2.2. 官方提供试用版,貌似没有功 ...

  4. JDBC学习笔记(7)——事务的隔离级别&批量处理

    数据库事务的隔离级别 对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题:脏读: 对于两个事务 T1, T2, T1 读取了已经被 T2 ...

  5. 一些常用的IOS开发网站

    开发教程: 即便过了入门阶段,还是要经常看看一些不错的实例教程.1.http://mobile.tutsplus.com/category/tutorials/iphone/ 比较新的一个网站,以前没 ...

  6. Gym 100507G The Debut Album (滚动数组dp)

    The Debut Album 题目链接: http://acm.hust.edu.cn/vjudge/contest/126546#problem/G Description Pop-group & ...

  7. 生成Base58格式的UUID(Hibernate Base64格式的UUID续)

    Base58简介 Base58采用的字符集合为“123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ”,从这不难看出,Base58是纯数 ...

  8. thymeleaf中的模板布局

    一.包括模板片段: 1:定义和引用片段,我们经常会想要包含在模板片段来自其他模板.常见的用途是页脚.标题.菜单…; 为了做到这一点,Thymeleaf需要我们定义包含可用的片段,我们可以通过使用th: ...

  9. HDU 2795 Billboard (线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题目大意:有一块h*w的矩形广告板,要往上面贴广告;   然后给n个1*wi的广告,要求把广告贴 ...

  10. UVa 10900 So you want to be a 2n-aire? (概率DP,数学)

    题意:一 个答题赢奖金的问题,玩家初始的金额为1,给出n,表示有n道题目,t表示说答对一道题目的概率在t到1之间,每次面对一道题,可以选择结束游戏, 获得当 前奖金:回答下一道问题,答对的概率p在t到 ...