当前位置: 首页 > news >正文

ArcGIS arcpy代码工具——批量要素裁剪栅格影像

系列文章目录

ArcGIS arcpy代码工具——批量对MXD文件的页面布局设置修改
ArcGIS arcpy代码工具——数据驱动工具批量导出MXD文档并同步导出图片
ArcGIS arcpy代码工具——将要素属性表字段及要素截图插入word模板
ArcGIS arcpy代码工具——定制属性表字段输出表格
ArcGIS arcpy代码工具——批量栅格转点文件导出属性表
ArcGIS arcpy代码工具——关于标识码的那些事(查找最大标识码、唯一性检查、重排序、空值赋值)


文章目录

  • 系列文章目录
  • 功能说明
  • 1 准备工作
  • 2 代码分段
      • (1) 多要素 拆分 过程层
      • (2) 遍历 栅格文件
      • (3) 单要素 裁剪 单栅格
  • 3 完整框架
  • 4 后记


功能说明

要素裁剪栅格影像,日常工作之一,一般情况都是某一个要素范围裁剪年度影像,arcgis自带的工具操作如下图:
1
首先输入栅格,接着输入裁剪范围(即要素图形),之后设置输出栅格名称,可选是否使用输入要素裁剪几何(即按边界裁剪、按要素包围矩形裁剪),完成裁剪操作。

如果裁剪范围是多个要素的图层,直接使用上面的工具,裁切的结果是多个要素范围连在一起的栅格影像,并不能像多部件要素那样直接分解炸开。

如果栅格影像是多个年度的栅格影像图,需要对每个年度影像裁剪一次。

所以,多要素 裁剪 多栅格,实现起来就非常繁琐了。

本代码目标为:

  • 1 对多个栅格影像裁剪
  • 2 实现多个要素范围批量处理
  • 3 以要素唯一标识字段+栅格影像名,作为裁剪后的栅格命名
  • 4 可选是否按要素边界裁剪
  • 5 操作简便

1 准备工作

(1)将多个栅格影像放入同一个文件夹内,方便批量读取;

(2)准备裁切的要素图层,格式为shape层,可以有多个要素,要求有唯一标识字段,如图斑编号、地块名称等,方便裁切栅格的命名;

注意: 要素图层的坐标系统要与栅格影像的坐标系统一致,且要素需要坐落在栅格影像范围内,这样才能进行要素裁切栅格,否则会错误提示:裁剪要素超出了栅格范围

(3)准备一个文件夹用于保存裁剪后栅格文件。

我准备的基础数据如下:

    raster_path = "D:/mulu/XXXXXX行政区"    # 栅格目录,有2个栅格影像clip_feature = "D:/mulu/feature/pc.shp"  # 要素图层,有2个要素 field_name = "ZLDWMC"                    # 唯一标识字段 output_path = "D:/mulu/ok"               # 保存裁切栅格的目录

我使用的arcgis软件版本为 10.8.2 版本。

2 代码分段

思路:多要素 裁剪 多栅格,不能直接实现,需要分解步骤,分解为 单要素 裁剪 单栅格。
我的思路如下:

  1. 多要素 拆分为 单要素
  2. 遍历栅格文件
  3. 调用 单要素 裁剪 单栅格

最初的想法是:
遍历 多要素图层,根据唯一字段值来建立选择集,使用当前选择集要素来裁剪栅格。但是以失败告终,在对要素集进行属性选择时,总是报错:The value cannot be a feature 该值不能是要素类。应该是 shape层 clip_feature确实不应该是直接作为一个要素类被SelectLayerByAttribute_management函数处理,而是应该存在于地图文档中作为一个图层。

改变思路:尝试多次后,我放弃上述方案,改变思路,将多要素 拆分为 单要素一个过程图层,用该过程图层 裁剪栅格,最后再删除过程图层。

(1) 多要素 拆分 过程层

如何实现对多要素拆分?
可以曲线实现:新建图层——根据属性选择要素——插入新建过程图层中
这样就可以遍历 多要素图层,通过不同的属性字段值选择插入,来实现生成单要素。

新建要素 CreateFeatureclass_management() 方法,有几个参数:

  • out_path: 输出目录
  • out_name: 输出图层名称
  • geometry_type: 输出要素类型:点 线 面 注记
  • template:模板,即图层的字段参考模板建立
  • spatial_reference:输出图层指定的空间参考,这里应该使用 裁剪要素clip_feature空间参考,保持一致。

获取裁剪要素clip_feature空间参考,
关键代码:

spatial_reference = arcpy.Describe(clip_feature).spatialReference

根据属性选择要素,插入新建要素图层中,InsertCursor() 方法。
可以在遍历 clip_feature时,获取属性字段值,再根据属性值插入到新建过程图层temp_output_path。

关键代码:

with arcpy.da.SearchCursor(clip_feature, field_name) as cursor:for row in cursor:with arcpy.da.InsertCursor(temp_output_path, field_name) as insert_cursor:insert_cursor.insertRow(row)

(2) 遍历 栅格文件

先遍历栅格文件,之后在遍历的过程中 进行裁剪栅格操作,不限栅格文件的格式,故 ALL表示匹配所有类型。

关键代码:

for raster_file in arcpy.ListRasters("*", "ALL"):......arcpy.Clip_management()......

(3) 单要素 裁剪 单栅格

裁剪栅格,使用Clip_management() 方法,有几个参数如下:

  • in_raster: 输入栅格,指定需要裁剪的栅格文件
  • in_template_dataset: 指定用于裁剪的矢量图形文件路径
  • out_raster: 指定裁剪后的栅格文件输出路径
  • nodata_value:指定栅格的无效值处理方式,NONE 为不使用无效值
  • clipping_geometry:指定是否按要素边界裁剪, ClIPPINGGEOMETRY,使用选定要素类的几何来裁剪数据; NONE,使用最小外接矩形来裁剪数据。
  • maintain_clipping_extent:保持裁剪范围,MAINTAIN_EXTENT,将保留输入栅格的像元对齐,并相应地调整输出范围; NO_MAINTAIN_EXTENT,将保留输入栅格的像元对齐,并相应地调整输出范围。

clipping_geometry 如果按照要素边界裁剪,即参数值为ClIPPINGGEOMETRY,效果如下图:
2
如果不按照要素边界裁剪,即参数值为 NONE,效果如下图:
3

3 完整框架

代码经过整理,可以概况为两个函数:

  1. 裁剪栅格函数一 , clip_rasters_with_attribute()
  2. 拆分多要素,创建 过程图层函数二,copy_features_to_individual_files()
  3. 在函数二中,创建的过程图层,然后 调用 函数一,实现裁剪栅格操作。

关键代码框架:

def clip_rasters_with_attribute(input_workspace, clip_feature_path, output_folder, identifier_field, trim_by_boundarys):......for raster_file in arcpy.ListRasters("*", "ALL"):arcpy.Clip_management()......def copy_features_to_individual_files(raster, input_feature, output_folder, fields_to_keep, trim_by_boundarys):......with arcpy.da.SearchCursor(input_feature, fields_keep) as cursor:for row in cursor:......arcpy.CreateFeatureclass_management()......with arcpy.da.InsertCursor(unique_output_path, fields_keep) as insert_cursor:insert_cursor.insertRow(row)......clip_rasters_with_attribute(raster, unique_output_path, output_folder, fields_to_keep, trim_by_boundarys)......if __name__ == "__main__":......copy_features_to_individual_files(raster_path, clip_feature, output_path, field_name, trim_by_boundary)

我制作了arcgis工具箱工具 高效栅格裁剪工具:指定要素范围批量裁切栅格 ,有需要的可以去下载使用,下图是运行界面:
5
运行效果如下图:

6

4 后记

编写代码在pycharm中可以运行,封装设计为arcgis工具需要加载到GIS工作空间中,根据需要选择定制。

关于工具箱有版本的要求,我的工具是在 ArcGIS10.8.2 版本下创建的,经过测试 在10.2.2版本下无法使用,这是GIS软件版本升级造成的,如果 AutoCAD软件,低版本软件无法读取高版本文件。

相关文章:

ArcGIS arcpy代码工具——批量要素裁剪栅格影像

系列文章目录 ArcGIS arcpy代码工具——批量对MXD文件的页面布局设置修改 ArcGIS arcpy代码工具——数据驱动工具批量导出MXD文档并同步导出图片 ArcGIS arcpy代码工具——将要素属性表字段及要素截图插入word模板 ArcGIS arcpy代码工具——定制属性表字段输出表格 ArcGIS arc…...

discuz插件之优雅草超级列表互动增强v1.2版本更新

https://doc.youyacao.com/9/2142 v1.2更新 discuz插件之优雅草超级列表互动增强v1.2版本更新 [title]20220617 v1.2发布[/title] 增加了对php8的支持 增加了 对discuz3.5的支持...

三、用户中心项目笔记----后端多环境实战+原始部署

后端多环境主要是修改: 依赖的环境地址 数据库地址 缓存地址 消息队列地址 项目端口号 服务器配置 后端怎么去区分不同的环境? 我们后端的SpringBoot项目,通过application.yml添加不同后缀来区分配置文件 application.yml就是公共的配置&a…...

SpringMVC的使用

SpringMVC详情 RequestMapping("/hello") 负责用户的请求路径与后台服务器之间的映射关系 如果请求路径不匹配,则用户报错404 ResponseBody 作用: 将服务器的返回值转化为JSON. 如果服务器返回的是String类型,则按照自身返回. 新增: post请求类型 PostMapping("…...

Vue73-命名路由

一、路由的name属性 二、小结...

TrustOne发布一周年成绩单,15000家数智化转型客户的选择!

新一代终端安全TrustOne 发布一周年 交出亮眼成绩单 目前已经为 15000家数智化转型客户 带来高效、全方位的解决方案 TrustOne 新一代终端安全 2023年6月 新一代终端安全TrustOne正式发布,极简新主义的创新理念为数字变革而来; 2023年12月 IDC&…...

Nginx实战:故障处理_后端服务正常,nginx偶发502(Bad Gateway)

一、故障场景 用户访问服务偶发报错【502 Bad Gateway】,但是服务后端正常运行。架构如下: #mermaid-svg-4dDszusKEuPgIPlt {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-4dDszusKEuPgIPlt .error-icon{fill:#5…...

mac系统清理软件哪个好用?CleanMyMac X清理工具轻松拿捏mac

还在为 mac 电脑里的垃圾文件、无用缓存和隐私痕迹而烦恼?想找一个软件直接全面清理优化电脑?维护苹果设备的清洁和高效运行是非常重要的,特别是在设备经过长时间使用后。有效的苹果清理软件不仅可以帮助您节省时间,还能延长设备的…...

拔掉独显提升性能,AMD新一代核显可以通杀主流游戏了

在今年台北电脑展上,AMD 除了带来了全新的 Ryzen 9000 系列。 与此同时也带来了全新的移动端处理器 Ryzen AI 9 HX 300 系列。 来源:AMD 也许是在 AI 领域稍晚一步,AMD 的全新移动端处理器命名直接把 AI 焊在脸上。 也就是咱们今天的主角 R…...

关于单片机那些事?

周期 时钟周期:也叫振荡周期,就是单片机外接晶振的倒数,如12Mhz,周期就是1/12us,最小的时间单位。频率越高,速度越快 指令周期:执行一条指令需要的时间,一般由若干个机器周期组成 …...

第5章 传输层

王道学习 考纲内容 (一)传输层提供的服务 传输层的功能:传输层寻址与端口;无连接服务和面向连接服务 (二)UDP UDP数据报;UDP检验 (三)TCP …...

典型传感器简介及驱动安装

双目视觉传感器 Indemind 传感器简介 INDEMIND M1 是专为开发者提供的一款硬件,采用“双目摄像头IMU”多传感器融合架构与 微秒级时间同步机制,为视觉 SLAM 研究提供精准稳定数据源,以满足 SLAM 研究、导航及 避障开发、视觉动作捕捉开发、…...

linux和Win——显卡驱动、Anaconda及pytorch安装(无需单独安装cuda、cudnn)

今天给新电脑的双系统(windows11和ubuntu22.04)安装了深度学习环境,在此记录一下。 一、Linux系统 (一)安装显卡驱动 (1)在安装Nvidia显卡驱动前,一定要点一下下面的“软件更新器…...

机器学习之多模态学习FLAVA(Foundational Language and Vision Alignment)

FLAVA(Foundational Language and Vision Alignment)是Meta AI提出的一种多模态学习模型,旨在处理自然语言和视觉任务。FLAVA通过联合学习文本和图像的特征表示,实现了在多模态任务上的优异性能。 FLAVA的基本概念 多模态学习: 多模态学习涉及同时处理多种类型的数据,例…...

Maven高级-证书校验

文章目录 SSL忽略配置IDEA里配置SSL忽略补充场景 SSL忽略配置 mvn -X clean install -Dmaven.resolver.transportwagon -Dmaven.wagon.http.ssl.insecuretrue -Dmaven.wagon.http.ssl.allowalltrue -Dmaven.wagon.http.ssl.ignore.validity.datestrueIDEA里配置SSL忽略 两个地…...

flutter是app跨平台最优解吗?

哈喽,我是老刘 最近在知乎上看到这样一个问题 我们先来解释一下问题中碰到的几个现象的可能原因,然后聊聊跨平台的最优解问题 问题解释 1、跟手、丝滑问题 这个问题其实很多人是有误解的,觉得原生的就丝滑跟手 其实不是这样的 我在做Flut…...

算法 Hw9

Hw 9 1 Scheduling with profits and deadlines12345 2 Parallel machine1234 1 Scheduling with profits and deadlines 1 决策问题表述: 给定一个利润值 P P P,是否存在一个任务调度方案使得完成所有任务的总利润至少为 P P P 2 在 NP 类中&…...

前端JS必用工具【js-tool-big-box】学习,字符串字母大小写转换的方法使用

这一小节,我们说一下 js-tool-big-box 工具库中,字符串字母大小写转换的使用。请注意:不是说单纯的把字符串转为大写,或者小写。关注 js-tool-big-box 的小伙伴可能知道,我们并没有把一些特别基础的,JS原生…...

Zookeeper:分布式系统中的协调者

Zookeeper:分布式系统中的协调者 前言:引言Zookeeper是什么? 基本概念Zookeeper 数据模型Znode 类型会话Watcher 应用场景分布式锁配置维护组服务名字服务 典型应用场景数据发布/订阅负载均衡命名服务分布式协调/通知集群管理Master选举 工作…...

如何使用代理IP进行数据抓取,PHP爬虫抓取京东商品数据

使用代理IP进行数据抓取通常是为了绕过IP封锁、提高抓取效率或保护你的真实IP地址。在PHP中,你可以使用cURL库来发送HTTP请求,并通过设置cURL选项来使用代理IP。 以下是一个基本的步骤说明,展示如何使用PHP和cURL库结合代理IP来抓取京东商品…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

2023赣州旅游投资集团

单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...