idl 批量裁剪代码
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 批量裁剪代码的更多相关文章
- arcgis影像批量裁剪代码
# -*- coding:utf-8 -*- # Name: ExtractByMask_Ex_02.py # Description: Extracts the cells of a raster ...
- ArcGIS + Python 批量裁剪、添加X/Y坐标脚本
前言 前一段时间,同事拿来的数据范围太大,用不了那么多(只需要一个乡镇的,结果拿来区县的),太多了加载也是问题.所以就让我给处理下. 由于文件较多,手动裁剪的话,我一个一个用ArcGIS工具箱中的工具 ...
- 艾伦 Visual Studio 批量自动化代码操作工具-VS插件发布
艾伦 Visual Studio 批量自动化代码操作工具 以下简称--艾伦工具箱. 艾伦工具箱是一个多文件批量处理插件,目的是为了广大开发者提高开发效率,减少项目代码规范化审计,缩短开发者的项目开发周 ...
- Android JUnit Test——批量运行测试代码
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ Android测试三要素 写Android测试用例有三要素,一是我们用的“安卓模拟器device” ...
- 【转】- 使用T4模板批量生成代码
前言 之前在 “使用T4模板生成代码 - 初探” 文章简单的使用了T4模板的生成功能,但对于一个模板生成多个实例文件,如何实现这个方式呢?无意发现一个解决方案 “MultipleOutputHelpe ...
- 黄聪:如何使用CodeSmith批量生成代码(转:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html)
先看看CodeSmith的工作原理: 简单的说:CodeSmith首先会去数据库获取数据库的结构,如各个表的名称,表的字段,表间的关系等等,之后再根据用户自定义好的模板文件,用数据库结构中的关键字替代 ...
- ArcGIS案例学习笔记-批量裁剪地理模型
ArcGIS案例学习笔记-批量裁剪地理模型 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 功能:空间数据的批量裁剪 优点:1.批量裁剪:任意多个目标数据,去裁剪任意 ...
- 如何使用CodeSmith批量生成代码(原创系列教程)
在上一篇我们已经用PowerDesigner创建好了需要的测试数据库,下面就可以开始用它完成批量代码生成的工作啦. 下面我会一步步的解释如何用CodeSmith实现预期的结果的,事先声明一下,在此只做 ...
- [转]黄聪:如何使用CodeSmith批量生成代码
本文转自:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html 在上一篇我们已经用PowerDesigner创建好了需要的测 ...
随机推荐
- Java访问USB设备
最近在用Java访问RDing设备,使用的是Java HID API.使用过程中发现一个问题,由于是嵌入式小白,不知道如何向USB设备发送report.于是想到可以看看自带的软件如何访问USB的.找到 ...
- TopCoder SRM 605 DIV1
604的题解还没有写出来呢.先上605的. 代码去practice房间找. 说思路. A: 贪心,对于每个类型的正值求和,如果没有正值就取最大值,按着求出的值排序,枚举选多少个类型. B: 很明显是d ...
- 第二百三十七天 how can I 坚持
最近好像迷上看小说了,<灵域>,而且也感觉会看小说了. 话说,今天好冷啊,真怕在路上冻着就冻萌了,寒风赤骨啊. 好想买个帽子.好想让送个帽子. 睡觉.
- homework 08_2 C++11新特性作业之二
---恢复内容开始--- 1.使用Lambda表达式计算“hello world!”中字母e和i的数量 下面是代码: #include "stdafx.h" #include< ...
- Spring AOP Example – Advice
Spring AOP + AspectJ Using AspectJ is more flexible and powerful. Spring AOP (Aspect-oriented progra ...
- JQuery中对Select的option项的添加、删除、取值
jQuery获取Select选择的Text和Value: $("#select_id").change(function(){//code...}); //为Select添加事件, ...
- jQuery基础学习8——层次选择器children()方法
$('body > div').css("background","#bbffaa"); //和children()方法是等价的,父子关系,和parent ...
- php-fpm占用系统资源分析
故障检测 1.别的先不管,先top看一下cpu.ram.swap哪个比较紧张. 由上图分析,可以看出共有602个进程,其中有601个进程休眠了.这好像有点不对劲,内核进程也就80个左右,加上memca ...
- java 字符串String操作工具类
/** * StrKit. */ public class StrKit { /** * 首字母变小写 */ public static String firstCharToLowerCase(Str ...
- Jeecms自定义标签用法[单个内容]
1.com.jeecms.cms.action.directive包下建立自己的标签类