功能描述:

对于含有多个要素的矢量文件shp、栅格影像raster,按照shp中的各要素范围,逐个对raster进行提取,并保存到文件夹中

效果如图所示:

主要思路:

1)获取矢量图层、栅格图层

2)遍历矢量图层中的要素

3)按要素裁剪栅格(有 Spatial Analysis-ExtractByMaskClip_management 两种方法)

注意:

在裁剪影像时,可能出现栅格范围小于矢量范围的情况(如果shp200*200,栅格只有200*199)

方法1,Spatial Analysis-ExtractByMask,虽慢,但是十分稳定,在可以按矢量范围裁剪,得到200*200

方法2,Clip_management虽快(约方法10倍速度),但是不太稳定,栅格缺失部分可能无法裁剪,得到200*199

根据个人对数据精度、速度要求,在代码中选择对应方法

代码:

# -*- coding: utf-8 -*-
# @Time : 2020/1/8 15:04
# @Author : Zhao HL
# @File : extract by mask.py
import arcpy
import os,timeshp_path = r'E:\rs\sample_extent.shp'
img_path = r'E:\rs\m08.tif'
save_path = r'E:\rs\test'arcpy.CheckOutExtension("Spatial")
def clear_folder(root_path):'''clear all files in root_path(include files in subfolders, but not folders):param root_path::return:'''files_list = os.listdir(root_path)for f in files_list:file_path = os.path.join(root_path,f)if os.path.isdir(file_path):clear_folder(file_path)else:os.remove(file_path)print('clear ' + root_path)def clip_img(in_raster, clip_shp, workspace):'''according to features in the Shp, extract the raters one by one;all result rasters are saved at wordspace according to the FID field in Shp:param in_raster::param clip_shp::param workspace::return:'''if arcpy.GetParameterAsText(0) != '':in_raster = arcpy.GetParameterAsText(0)if arcpy.GetParameterAsText(1) != '':clip_shp = arcpy.GetParameterAsText(1)if arcpy.GetParameterAsText(2) != '':workspace = arcpy.GetParameterAsText(2)clear_folder(workspace)arcpy.env.workspace = workspacet1 = time.time()for row in arcpy.SearchCursor(clip_shp):mask = row.getValue("Shape")FID = int(row.getValue("FID"))FID_name = str(FID).zfill(5)+'.tif'img_8_path = os.path.join(workspace, FID_name)#region method 1: slow but steadymask_raster = arcpy.sa.ExtractByMask(in_raster, mask)arcpy.CopyRaster_management(in_raster=mask_raster,out_rasterdataset=img_8_path,config_keyword="DEFAULTS",background_value=255,nodata_value=255,onebit_to_eightbit="", colormap_to_RGB="", pixel_type="8_BIT_UNSIGNED",scale_pixel_value=None,RGB_to_Colormap=None)#endregion#region method 2: fast but probably get null result#arcpy.Clip_management(in_raster, '#', img_8_path, mask, 0, "ClippingGeometry")# endregiont2 = time.time() - t1arcpy.AddMessage (FID_name+ ' is generated successfully,  total time:'+str(round(t2,2)))if __name__ == "__main__":passclip_img(img_path, shp_path, save_path)

实施细节:

1)裁剪出的文件名可以与已有文件重复,考虑到可能多次裁剪重复试验,

因此调用clear_folder函数清除保留路径下的所有文件(根据情况自行使用)

2)Clip_management 可能出现空结果(可能是路径等问题),但比ExtractByMask快数倍

因此建议调试成功后使用Clip_management 方法

3)在arcmap中添加脚本

右击my toolbox-new-tool box,新建工具箱

右击新建的工具箱-add-script;第一页设置默认;第二页设置在script file中选择python脚本文件、其余默认;第三页可以设置输入参数,可以跳过,进行默认参数训练,也可以按照4)进行设置。

4)输入参数设置

可以直接在脚本中修改,在arcmap中跳过、不设置参数。

也可以在arcmap中按下图将3个参数均设置为可选选项,方便重复使用

arcgis使用python脚本批量裁剪影像相关推荐

  1. python arcgis批量绘图_ARCGIS中Python实现批量裁剪

    <ARCGIS中Python实现批量裁剪>由会员分享,可在线阅读,更多相关<ARCGIS中Python实现批量裁剪(1页珍藏版)>请在人人文库网上搜索. 1.程序代码:pyth ...

  2. 使用Python脚本批量裁切栅格

    对栅格的裁切,我们通常使用裁切(数据管理-栅格-栅格处理)或按掩膜提取(空间分析-提取分析)来裁切,裁切的矢量要素通常是一个要素图层或Shape文件.如果要进行批量处理,可以使用ToolBox中的批量 ...

  3. ArcGIS使用Python脚本工具

    在Pyhton写的一些代码,用户交互不方便,用户体验比较差,不方便重用.在ArcGIS中可以将用写的Python代码导入到ToolBox中,这样用起来就比较方便了.这里用按要素裁剪栅格的Python来 ...

  4. arcgis python工具-ArcGIS使用Python脚本工具

    在Pyhton写的一些代码,用户交互不方便,用户体验比较差,不方便重用.在ArcGIS中可以将用写的Python代码导入到ToolBox中,这样用起来就比较方便了.这里用按要素裁剪栅格的Python来 ...

  5. 初探arcgis的python脚本的使用 (三)

    需求:地籍科有以图幅接合表为范围的单幅的权属图的高清扫描件(tiff格式),前期已经配准完毕,现想要将单幅的权属图连成片,作为底图参考. 解决方案:使用镶嵌数据集构建数据--发布成imageserve ...

  6. arcgis下的python编程-面向ArcGIS的Python脚本编程

    面向arcgis的python脚本编程是一本指导ArcGIS for Desktop专业用户进行Python开发的指南,本书将教会您如何通过编写Python代码处理空间数据并在ArcGIS中自动化实现 ...

  7. 基于arcgis的python脚本编程视频-面向ArcGIS的Python脚本编程 PDF 高清版

    给大家带来的一篇关于Python相关的电子书资源,介绍了关于ArcGIS.Python.脚本编程方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小49.9 MB,Paul编写,目前豆瓣.亚 ...

  8. python脚本批量生成数据

    在平时的工作中,经常会遇到造数据,特别是性能测试的时候更是需要大量的数据.如果一条条的插入数据库或者一条条的创建数据,效率未免有点低.如何快速的造大量的测试数据呢?在不熟悉存储过程的情况下,今天给大家 ...

  9. python for arcgis_面向ArcGIS的Python脚本编程 ([美]赞德伯根) 中文pdf扫描版[50MB]

    Python作为一种高级程序设计语言,凭借其简洁.易读及可扩展性日渐成为程序设计领域备受推崇的语言.使用Python作为ArcGIS的脚本语言将大大提升ArcGIS数据处理的效率,更好地实现ArcGI ...

最新文章

  1. 一眼识别这是什么鸟,比人类还厉害的“我们来找茬”十级选手诞生!
  2. AJAX框架构成设计,基于Ajax的Web框架设计与实现
  3. 大量小文件存储提高效率要点详解
  4. fatal error C1083: 无法打开包括文件:“stdio.h
  5. 从原理到方法,一文讲清如何应对C语言内存泄露!
  6. linux 无线网卡连接网络连接不上去,【已解决】Ubuntu 10.04 无线网卡 无法连接
  7. 互联网日报 | 6月15日 星期二 | 凯撒旅业拟换股吸并众信旅游;爱回收预计6月18日登陆纽交所;顺丰航空机队规模增至66架...
  8. Linux中__init、__devinit等初始化宏解析和入口函数
  9. Facebook WhatsApp开放「数据下载」;iPhone需求疲软引发恐慌;今日头条「更名」| CSDN 极客头条...
  10. python-学生管理系统--4修改学生信息
  11. mysql备份 php_详解MYSQL的备份还原(PHP实现)
  12. paip.提升安全性-----使用HTTPS SSL
  13. 位置不可用无法访问介质受写入保护怎样解决?
  14. 7部史诗级自然纪录片,孩子14岁前要看完!
  15. python万年历节气_python3实现万年历(包括公历、农历、节气、节日)
  16. 【计算情与思】大学生学习和发展的思考和建议
  17. 手机ADM下载器如何使用?附教程及安卓版
  18. Android仿微信图片编辑处理:文字,马赛克,裁剪,涂鸦,旋转图片等
  19. 使用POI实现Excel导出导入 详细解释
  20. 六祎:检索部门编号、部门名称、部门所在地及其每个部门的员工总数

热门文章

  1. 话费API 洗车API接口源码分享
  2. 条码打印软件如何制作同时包含日期和流水码的条形码
  3. 普通人如何通过网络实现在家赚钱?
  4. 一套全开源的智慧园区管理系统源码
  5. [百度解析工具]利用IDM工具在线提速下载
  6. iOS 各种图片大小
  7. 施工测量中Cad一些非常有用的插件
  8. 使用百度API和u-net进行车牌图片的自动标注
  9. 机器学习实现简单人脸识别
  10. JAVA基础Idea、方法