ArcGIS批量处理异常值(ArcPy方法)

7 篇文章 9 订阅
6 篇文章 4 订阅

遥感数据处理系列

一些项目及科研中遇到的小需求,一方面记录自己的学习历程,另一方面帮助大家学习。本系列文章的开发环境为:ArcGIS 10.2.2 + Python 2.7、ENVI 5.3 + IDL 8.5

ArcPy批量计算栅格数据平均值
GLDAS数据下载及处理(NC转TIF)
ArcGIS批量裁剪栅格数据
ArcPy批量栅格重采样
ArcPy批量裁剪栅格数据

IDL多进程批处理遥感数据
ArcPy批量拼接栅格数据



前言

如何遥感影像中的异常值?一大堆的遥感数据如何批量处理?又如何把一个文件夹里的所有值为32767的栅格数据设为NoData?那么,一个NB的批处理脚本派上了用场!祭出ArcPy


一、栅格数据异常值处理

1. 原理简介

栅格数据异常值处理主要使用ArcPy的SetNull 函数。

函数使用:

SetNull (in_conditional_raster, in_false_raster_or_constant, {where_clause})

常用参数简介:

	in_conditional_raster:表示所需条件结果为真或假的输入栅格。


	in_false_raster_or_constant:条件为假时,其值作为输出像元值的输入
	
	where_clause:决定输入像元为真或假的逻辑表达式。
		-> 表达式遵循 SQL 表达式的一般格式。where_clause 的一个示例为 "VALUE > 100"

注意:当逻辑条件为真时,输出栅格的像元值为 NoData ,为假时,输出栅格的像元值为第二个输入栅格的值,即“in_false_raster_or_constant”所代表的栅格数据。

2. 代码

文件组织架构:

inws MYD09.2011.001.tif MYD09.2011.002.tif ... outws 输出到

输入:

  1. 一个含有若干栅格数据的文件夹 inws_1 (本例为“.tif”格式)
  2. 另一个文件夹 inws_2 中的文件数量与顺序和 inws_1 中相同

输出: 在输出路径文件夹下重构文件夹组织形式,并生成若干合并空间范围的tif格式数据

代码实例:

# -*- coding: UTF-8 -*-
from arcpy.sa import *
import arcpy
import glob
import os

'''
功能:
    将 输入文件夹 下的 所有栅格数据 的 异常值 设为 NoData
'''

arcpy.CheckOutExtension("spatial")  # 检查许可
arcpy.CheckOutExtension("ImageAnalyst")  # 检查许可

# 输入路径  应该注意,中文路径,会导致读不出文件
inws = r"F:\LE-daily-LMB"

# 输出路径
outws = r"F:\LE-daily-LMB-setNull"

path_list = os.listdir(inws)  # 若存了三年的数据,则里面有三个文件夹,每个文件夹直接放了每年的数据

# 进入二级目录
for i in range(len(path_list)):
    path = inws + "\\" + path_list[i]  # 年份文件夹的路径

    # 重构输出文件夹
    outFolder = outws + "\\" + path_list[i]
    isExists = os.path.exists(outFolder)
    if not isExists:
        os.makedirs(outFolder)

    # 利用glob包,将二级目录下的所有tif文件读存放到rasters中
    rasters = glob.glob(os.path.join(path, "*.tif"))

    for ras in rasters:
        whereClause = "VALUE = 0"  # 无效值
        outSetNull = SetNull(ras, ras, whereClause)  # 去除无效值

        nameT = os.path.basename(ras)
        outname = os.path.join(outFolder, nameT)  # 合并输出文件名+输出路径

        outSetNull.save(outname)  # 保存数据

        print os.path.basename(nameT) + "         ---- OK! ----         "

    print path_list[i] + "         ---- OK! ----         "

print("   ---   All project is OK!   ---   ")

总结

ArcPy牛皮!毕业万岁!中期快乐!

后记

写博客的初衷是分享我的一些经验,同时也方便自己在其他电脑上进行数据处理。帮了很多人,但评论区小伙伴也有遇到问题的,那么:知识付费,我的时间和经验正好可以解决你的问题。
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值