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软件,低版本软件无法读取高版本文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/32306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 79 之 自己写异常类

#include <iostream> #include <string> using namespace std;class MyOutOfRange : public exception{ // 选中exception右键 转到定义 复制一份 virtual const char* what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW 进行函数重写 public: string m_msg;M…

计算机毕设JAVA——学习考试管理系统(基于SpringBoot+Vue前后端分离的项目)

学习考试管理系统 概要系统架构技术运行环境系统功能项目演示图片 概要 网络上许多计算机毕设项目开发前端界面设计复杂、不美观&#xff0c;而且功能结构十分单一&#xff0c;存在很多雷同的项目&#xff1a;页面基本上就是套用固定模板&#xff0c;换个颜色、改个文字&#…

实战电商大数据项目搭建||电商大数据采集||电商API接口

我会提供给你大概1亿条真实的互联网用户上网数据&#xff0c;至于来源&#xff0c;我先不告诉你&#xff0c;绝对是你在网络上无法找到的宝贵数据源。 此外&#xff0c;还会给你提供一个基于当前数据特点而设计的大数据处理方案。 当然&#xff0c;为了防止用户的隐私部分被泄露…

如何提升外链网站的收录率?

要提高外链网站的收录率&#xff0c;要明确的一点是&#xff0c;被收录的外链才能发挥最大的作用&#xff0c;因此&#xff0c;提升收录率是首要任务。一个有效的方法是使用GPC爬虫池&#xff0c;这样可以大幅度提高谷歌蜘蛛对众多外链网站页面的抓取频率 通过GPC爬虫池的引导…

【LeetCode热题 100】螺旋矩阵

leetcode原地址&#xff1a;https://leetcode.cn/problems/spiral-matrix/description 描述 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8…

使用Scala爬取安居客房产信息并存入CSV文件

使用Scala爬取安居客房产信息并存入CSV文件 本篇博客中&#xff0c;我们将介绍如何使用Scala语言编写一个简单的程序&#xff0c;来爬取安居客&#xff08;Anjuke&#xff09;网站上的房产信息&#xff0c;并将这些信息存储到CSV文件中。这个示例将涵盖HTTP请求、HTML解析、数…

00 - matlab m_map地学绘图工具安装及简单使用教程

00 - matlab m_map地学绘图工具安装及简单使用教程 0. 引言1. m_map工具的获取及配置过程2. 绘图示例3. 结语 0. 引言 m_map是MATLAB中的一个绘图工具包&#xff0c;用于绘制地图和地理数据。它提供了一系列函数&#xff0c;可以用来绘制地理投影、添加地理特征、绘制等值线图等…

「漏洞复现」真内控国产化开发平台 preview 任意文件读取漏洞

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

[SAP ABAP] 运算符与操作符

1.算数运算符 算术运算符描述加法-减法*乘法/除法MOD取余 示例1 输出结果: 输出结果: 2.比较运算符 比较运算符描述示例 等于 A B A EQ B <> 不等于 A <> B A NE B >大于 A > B A GT B <小于 A < B A LT B >大于或等于 A > B A GE B <小…

AI都那么发达了,我还有必要学习编程吗

尽管 AI 技术在不断发展&#xff0c;但学习编程仍然具有重要的意义和价值。 以下是一些原因&#xff1a; 培养逻辑思维和解决问题的能力&#xff1a;编程需要你思考问题、设计算法和解决难题。通过学习编程&#xff0c;你可以锻炼自己的逻辑思维能力&#xff0c;提高分析和解决…

用Python实现抖音新作品监控助手,实时获取博主动态

声明&#xff1a; 本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。包含关注&#xff0c;点赞等 该项目的主要功能是通过Python代码&…

基于Java技术的摄影跟拍预定管理系统

你好&#xff0c;我是热衷于计算机科学与技术研究的码农小野。如果你对摄影跟拍预定管理系统感兴趣或有相关开发需求&#xff0c;欢迎私信交流。 开发语言 Java 数据库 MySQL 技术 B/S模式&#xff0c;SpringBoot 工具 Eclipse&#xff0c;Navicat&#xff0c;Tomcat …

芝麻清单助力提升学习工作效率 专注时间完成有效的待办事项

芝麻清单助力提升学习&工作效率 专注时间完成有效的工作。今天我们给大家带来一个专注清单&#xff0c;一个更高效的学习和工作的方法&#xff01; 我们都知道&#xff0c;专注做一个事情&#xff0c;会有效的提升效率&#xff0c;让事情更高效的完成。如果是学习的话&…

《窄门》读后感

《窄门》这本书是端午节期间在地铁和高铁上看完的&#xff0c;书的故事很简单&#xff0c;描绘的是一段爱而不得的感情。但是&#xff0c;这本书写的爱而不得和其他地方的爱而不得完全不是一码事&#xff0c;其他地方的爱而不得要么是“落花有意随流水&#xff0c;流水无意恋落…

fastapi+vue3+primeflex前后端分离开发项目环境搭建

创建后端项目 创建文件夹&#xff1a; mkdir backend创建python虚拟环境&#xff1a; python -m venv venv使用Pycharm打开文件夹&#xff0c;然后配置python解释器为venv虚拟环境。 安装fastapi&#xff1a; pip install "fastapi[all]"编写第一个程序&#xf…

刷代码随想录有感(112):动态规划——组合总和IV

题干&#xff1a; 代码&#xff1a; class Solution { public:int combinationSum4(vector<int>& nums, int target) {vector<int>dp(target 1, 0);dp[0] 1;for(int j 0; j < target; j){for(int i 0; i < nums.size(); i){if(j > nums[i] &…

第二次IAG

IAG in NanJing City 我与南京奥体的初次相遇&#xff0c;也可能是最后一次&#xff01; 对我来说,IAG 演唱会圆满结束啦! 做了两场充满爱[em]e400624[/em]的美梦 3.30号合肥站&#xff0c;6.21号南京站[em]e400947[/em] 其实&#xff0c;没想到昨天回去看呀!(lack of money […

物理层(二)

2.2 传输介质 2.2.1 双绞线、同轴电缆、光纤和无线传输介质 传输介质也称传输媒体&#xff0c;是数据传输系统中发送器和接收器之间的物理通路。传输介质可分为:①导向传输介质&#xff0c;指铜线或光纤等&#xff0c;电磁波被导向为沿着固体介质传播:②)非导向传输介质&…

C# 与三菱PLC MC协议通讯

1. 引用HslCommunication Nuget包里边添加 HslCommunication包的引用 2.创建PLC连接对象&#xff0c;并通过 IP&#xff0c;端口进行连接 //PLC连接对象 var plc new MelsecMcNet(_ip, _port); plc.ConnectTimeOut 3000;var res plc.ConnectServer();//连接PLCisConnect …