【ArcGIS自定义脚本工具】批量对栅格执行栅格计算器

news2024/11/23 7:18:43

文章目录

  • 一、功能介绍
  • 二、脚本代码
  • 三、工具参数
  • 四、用例
    • 4.1 批量单位换算
    • 4.2 批量计算植被覆盖度
    • 4.3 批量填充空值

系列文章目录: ArcGIS自定义脚本工具


一、功能介绍

在这里插入图片描述

  • 功能
    将多个栅格文件按照某以代数表达式执行栅格计算器(Raster Calculator) 工具,并将输出栅格文件保存至指定的文件夹中。该工具接受代数表达式的动态输入。通过修改代数表达式可以实现批量对栅格执行四则运算(加、减、乘、除)、计算掩膜、填充空值(固定值、插值)、设为空等操作。
  • 关于代数表达式
    提供的代数表达式需要满足栅格计算器工具代数表达式的基本语法,并且包含字符串"{A}“,字符串”{A}"代表输入栅格在代数表达式中的位置。在用例章节提供了几个案例。
    在这里插入图片描述

二、脚本代码

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import arcpy
import os
import time

rasters = arcpy.GetParameterAsText(0)
expression = arcpy.GetParameterAsText(1) # expression including {A}
out_path = arcpy.GetParameterAsText(2)
prefix = arcpy.GetParameterAsText(3)

rasters = rasters.split(";")
nums = len(rasters)
num = 1
for raster in rasters:
    raster_path = raster.replace("'","")
    raster_dir,raster_name = os.path.split(raster_path)
    arcpy.env.workspace = raster_dir
    out_raster = os.path.join(out_path, prefix + raster_name)
    exp = expression.replace('{A}', r'"{0}"'.format(raster_name))
    arcpy.AddMessage(exp)
    if not os.path.exists(out_raster):
        try:
            arcpy.gp.RasterCalculator_sa(exp, out_raster)
            arcpy.AddMessage("%d/%d | %s completed" % (num, nums, out_raster))
        except Exception as err:
            arcpy.AddMessage("%d/%d | %s errored, %s" % (num, nums, out_raster, err))
    else:
        arcpy.AddMessage("%d/%d | %s already exists" % (num, nums, out_raster))
    num = num + 1

三、工具参数

在这里插入图片描述
在这里插入图片描述

ParameterExplanationData type
rasters待执行栅格计算器的多个栅格文件Raster Dataset
expression栅格计算器工具要执行的代数表达式。该表达式需要满足栅格计算器工具中代数表达式的基本语法,并且包含字符串"{A}“,字符串”{A}"代表输入栅格在代数表达式中的位置。String
out_path输出栅格文件的文件夹Folder
prefix输出栅格文件的文件名前缀,该栅格的文件名为"prefix_<旧文件名>.tif",该参数默认为"cal_"String

关于参数expression,提供了一些常用的示例

1.加

{A} + 10

2.减

{A} - 273.15

3.乘

{A} * 0.0001

4.除

{A} / 10000

5.四则运算

({A} * 3 + 4)/5

6.条件函数-计算掩膜

Con({A} > 0,1,0})

7.条件函数-计算植被覆盖度

Con({A}<0.1,0,Con({A}>=0.8,1,({A}-0.1)/0.7))

8.条件函数-固定值填充空值

Con(IsNull({A}), 0, {A})

9.条件函数-插值填充空值

Con(IsNull({A}), FocalStatistics({A}, NbrRectangle(5,5, "CELL"), "MEAN"), {A})

10.设为空-将满足条件的栅格赋值为空值

SetNull({A}<0,{A})


四、用例

通过修改参数expression,对栅格批量执行某一代数表达式。

4.1 批量单位换算

  • 输入文件:某区域的陆面温度(LST)栅格数据,单位为开氏温度
  • 处理目标:批量将输入文件的单位换算为摄氏温度
{A} - 273.15

在这里插入图片描述
在这里插入图片描述

4.2 批量计算植被覆盖度

  • 输入文件:某区域的植被指数(NDVI)栅格数据
  • 处理目标:基于像元二分模型,批量根据NDVI估算植被覆盖度
    关于估算植被覆盖度的说明可以看这篇:【MODIS数据处理#10】例五:用NDVI估算植被覆盖度

假设我们根据NDVI的累计频率分布,已经确定了像元二分模型中的两个阈值分别为0.1、0.85。则可以通过将该工具中的expression设置为:

Con({A}<0.1,0,Con({A}>=0.85,1,({A}-0.1)/0.75))

在这里插入图片描述
在这里插入图片描述

4.3 批量填充空值

  • 输入文件:某区域的净初级生产力NPP栅格数据
  • 处理目标:将NPP的缺失值区域填充为0
Con(IsNull({A}), 0, {A})

在这里插入图片描述
在这里插入图片描述
还可以选择根据空白区域周围的有效像元插值进行填充,表达式可以参考

Con(IsNull({A}), FocalStatistics({A}, NbrRectangle(5,5, "CELL"), "MEAN"), {A})

关于上述表达式的说明,可以参考

缺失像元处的值就用以其为中心的5*5的矩形窗口内所有的有效像元的值平均后得到

FOCALMEAN中的长方形的尺寸可以被编辑以适应数据的需求。编辑"5,5"的值的大小可以改变长方形的尺寸。可能需要改成更大或者更小,这取决于数据。
原理是利用邻域均值代替空缺值。
可用的不同类型的邻域:
NbrAnnulus,NbrCircle,NbrRectangle,NbrWedge, NbrIrregular,和NbrWeight。默认邻域是正方形NbrRectangle,其宽度和高度为3个单元格。
要计算的统计类型:
MEAN(平均值)—计算附近单元格的平均值(平均值)。
MAJORITY —计算附近的单元格的多数(最常出现的值)。
MAXIMUM —计算附近的像元的最大值(最大值)。
MEDIAN —计算附近单元格的中位数。
MINIMUM —计算附近的像元的最小值(最小值)。
MINORITY-计算邻域中的单元格的少数(最少出现的值)。
RANGE(范围)—计算附近单元格的范围(最大值与最小值之间的差)。
STD —计算附近单元格的标准差。
SUM —计算附近单元格的总和(所有值的总和)。
VARIETY(变异度)—计算附近单元格的变异度(唯一值的数量)。
默认的统计类型是MEAN。
如果输入栅格为浮点,则只有MEAN,MAXIMUM,MINIMUM,RANGE,STD和SUM统计类型可用。

举个例子,对于上文使用的存在缺失区域的NPP栅格,使用相邻有效像元的值进行填充
在这里插入图片描述
在这里插入图片描述


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

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

相关文章

linux内核内存笔记

一、linux用户态内核态内存结构 对于32位的linux操作系统&#xff0c;系统为每个进程分配0~4G的内存空间&#xff0c;而64位系统则更大&#xff1a; linux内存空间地址范围 可见Linux的内存分配规则&#xff1a; 二、总体分配规则 1、用户态在低地址&#xff0c;内核态在高地址…

进击中的 Zebec 生态,Web2 与 Web3 世界的连接器

虽然从意识形态上看&#xff0c;Web2世界与Web3世界存在着不同的逻辑&#xff0c;但我们同样看到&#xff0c;随着加密资产领域的发展&#xff0c;其正在作为优质投资品&#xff0c;被以Paypal、高盛等主流机构重视与接受。当然&#xff0c;除了作为投资者品外&#xff0c;近年…

C++学习笔记-环境设置

C 是一种通用编程语言&#xff0c;如今已广泛用于竞争性编程。它具有命令式&#xff0c;面向对象和通用编程功能。 C 在Windows&#xff0c;Linux&#xff0c;Unix&#xff0c;Mac等许多平台上运行。在开始使用C 进行编程之前。我们将需要在本地计算机上设置一个环境&#xff0…

用PHP实现CSPRepor报告预警信息存储和动态显示。

一、了解CSP内容安全策略 CSP 的实质就是白名单制度&#xff0c;开发者明确告诉客户端&#xff0c;哪些外部资源可以加载和执行&#xff0c;等同于提供白名单。它的实现和执行全部由浏览器完成&#xff0c;开发者只需提供配置。 作用就是&#xff1a;大大增强了网页的安全性。…

透明和半透明效果

Alpha通道 透明度可以通过base map的alpha通道来控制。Alpha值低的话&#xff0c;mesh就变得更加透明&#xff0c;alpha值高的话&#xff0c;mesh的透明度会变低&#xff0c;变得能更加轻松地被看到。当alpha为0时&#xff0c;mesh就完全不可见了&#xff0c;alpha值在中间时&a…

kubernetes(k8s) 知识总结(第2期)

1. “控制器”思想 kube-controller-manager 是一系列控制器的集合&#xff0c;这些控制器被放在 Kubernetes 项目的 pkg/controller 目录&#xff0c;这些控制器都以独有的方式负责某种编排功能。它们都遵循一个通用的编排模式——控制循环。 以 Deployment 为例介绍它对控…

最最普通程序员,如何利用工资攒够彩礼,成为人生赢家

今天我们不讲如何提升你的专业技能去涨工资&#xff0c;不讲面试技巧如何跳槽涨工资&#xff0c;不讲如何干兼职赚人生第一桶金&#xff0c;就讲一个最最普通的程序员&#xff0c;如何在工作几年后&#xff0c;可以攒够彩礼钱&#xff0c;婚礼酒席钱&#xff0c;在自己人生大事…

什么是网络流量分析(NTA),有什么好用的NTA软件

分析网络的稳定性首先要监控其性能、设备功能、网络速度以及许多网络管理员忽略的另一个方面&#xff1a;网络流量。网络流量分析 &#xff08;NTA&#xff09; 通常是考虑最少的方面&#xff0c;但它会影响许多问题&#xff0c;例如性能下降和用户速度缓慢。忽视它可能会让位于…

SQL语句实现找到一行中数据最大值(greatest)/最小值(least);mysql行转列

今日我在刷题时遇到这样一个题&#xff0c;它提到了以下需求&#xff1a; 有一场节目表演&#xff0c;五名裁判会对节目提供1-10分的打分&#xff0c;节目最终得分为去掉一个最高分和一个最低分后的平均分。 存在以下一张表performence_detail&#xff0c;包含字段有performa…

Docker安装RocketMQ 4.8

1拉取4.8镜像 docker pull foxiswho/rocketmq:4.8.0拉取控制台镜像 docker pull styletang/rocketmq-console-ng2创建rocketmq使用的共有网络&#xff0c;便于相互访问 docker network create rocketmq_network3启动rmqnamesrv docker run -d --name rmqnamesrv --network …

电脑录屏怎样不录到外界声音?调整这一个开关,即可实现

​有很多小伙伴希望自己电脑录屏的时候&#xff0c;不要录制自己的声音&#xff0c;而是通过后期配音的方式完成视频创作。电脑录屏怎样不录到外界声音&#xff1f;其实只需要调整这一个开关&#xff0c;就能实现不录外界声音&#xff0c;一起来看看吧。 不录外界声音1&#xf…

什么是 Java 泛型?

本文首发自「慕课网」&#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注&#xff01; 作者| 慕课网精英讲师 ColorfulC 通过本篇文章你将了解到什么是泛型&#xff0c;为什么需要泛型&#xff0c;如何使用泛型&#xff0c;如何自定义泛型&…

记一次以小勃大,紧张刺激的渗透测试(2017年老文)

零、前言 有技术交流或渗透测试培训需求的朋友欢迎联系QQ/VX-547006660&#xff0c;需要代码审计、渗透测试、红蓝对抗网络安全相关业务可以看置顶博文 2000人网络安全交流群&#xff0c;欢迎大佬们来玩 群号820783253 一、起因 emmm&#xff0c;炎炎夏日到来&#xff0c;这…

libxlsxwriter数据验证

今天要分享的这个问题其实也属于excel的高级用法。我们想通过libxlsxwriter来实现一个能对用户的输入进行数据验证的表格功能。 内心os&#xff1a;小白最近是不是有点走火入魔了……我们真的会遇上这样的场景吗&#xff1a;需要通过代码生成一个表格&#xff0c;这个表格中还有…

智慧机场,或将成为航空领域数字孪生技术得完美应用

在《智慧民航建设路线图》文件中&#xff0c;民航局明确指出&#xff0c;智慧机场是实现智慧民航的四个核心抓手之一。这一战略性举措旨在推进数字化技术与航空产业的深度融合&#xff0c;为旅客提供更加智能化、便捷化、安全化的出行服务&#xff0c;进一步提升我国民航发展的…

IO流进阶

&#x1f3e1;个人主页 &#xff1a; 守夜人st &#x1f680;系列专栏&#xff1a;Java …持续更新中敬请关注… &#x1f649;博主简介&#xff1a;软件工程专业&#xff0c;在校学生&#xff0c;写博客是为了总结回顾一些所学知识点 目录IO流进阶缓冲流缓冲流概述字节缓冲流(…

【LeetCode】剑指 Offer(1)

目录 写在前面&#xff1a; 题目1&#xff1a;剑指 Offer 03. 数组中重复的数字 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目2&#xff1a;剑指 Offer 06. 从…

JavaEE初阶---TCP/IP协议

一:概述 本文是网络编程的理论基础,也是网络部分的重点和难点,在笔试,面试中,这部分内容也多有考察.二:详解 TCP/IP五层协议 应用层传输层网络层数据链路层物理层 2.1应用层 我们自己编写的代码,就是在应用层,这也是在实际开发中接触最多的层.应用层里有许多现成的协议 , 而在…

springboot(5)静态资源访问前缀+欢迎页+REST风格的传递参数

Springboot的访问规则是 先访问controller的请求&#xff0c;如果没有的话&#xff0c;我们在访问静态资源。 但是静态资源过多的情况下这样不好处理&#xff0c;所以我们可以加一个前缀&#xff0c;这样可以拦截掉非静态资源的请求&#xff0c;每次都可以准确快速无风险的访…

镀镍废水处理,企业污水处理,离子交换树脂在镀镍废水中的应用

传统沉淀法不能满足日益提的环保要求(如电镀表三镍含量要求0.1mg/l以下)。针对特定重金属离子的特点&#xff0c;利用螯合树脂的特种功能基团与重金属离子形成络合物的特性&#xff0c;实现重金属离子的回收利用及深度去除。 CH-90Na对除铜镍铅锌钴锰等具有特定的选择性&#x…