arcpy批量处理
- 1、裁剪
- 2、重分类
- 3、栅格计算器(乘法)
- 4、格式转换(tif转换为ASCII格式)
- 5、相关参考
1、裁剪
目的: 对指定路径下的所有子文件中的tif影像进行批量裁剪,并生成对应的文件夹,保存裁剪后的tif文件。
# -*- coding: cp936 -*-
import arcpy
import os
arcpy.CheckOutExtension("spatial")
# 创建一个用于存储输出的文件夹
input_folder = r"D:\SDMs\Datasets\worldclim1.4\Future_RCP_30s\2070"
mask = r"D:\SDMs\Datasets\arcgis\China-map.shp"
# 获取指定目录下的所有文件和文件夹
all_files_and_folders = os.listdir(input_folder)
print(all_files_and_folders)
for folder_name in all_files_and_folders:
# 子文件夹路径
folder_path = os.path.join(input_folder, folder_name)
# 获取子文件夹中的所有tif文件
tif_files = [file for file in os.listdir(folder_path) if file.endswith(".tif")]
clip_name = "Clip_" + folder_name
# path = arcpy.CreateFolder_management(input_folder, clip_name)
path = os.path.join(input_folder, clip_name)
print(clip_name)
print(path)
arcpy.CreateFolder_management(input_folder, clip_name)
arcpy.env.workspace = folder_path #栅格文件路径
for i in tif_files:
print str(i)
# 输出tif文件路径
output_tif = os.path.join(path, i)
print(output_tif)
arcpy.gp.ExtractByMask_sa(i, mask, output_tif)
print("mask_" + i + "has done!")
print("===============================================================")
print("All OK!!!")
本例子中使用了os.listdir(input_folder)来获取文件夹下的子文件名,而不需要手动输入文件名,这样更加方便,之前的文章中就是手动输入的:Python地理数据处理 22:基于arcpy批量操作(四)—— 3. 栅格批量缩小n倍
2、重分类
对文件夹下的所有tif格式图像进行重分类:
# -*- coding: cp936 -*-
import arcpy
import os
arcpy.CheckOutExtension('Spatial')
# 设置工作环境
arcpy.env.workspace = r"D:\SDMs\SCI1\finallresult"
# 输入文件夹路径
input_folder = r"D:\SDMs\SCI1\finallresult"
# 输出文件夹路径
output_folder = r"D:\SDMs\SCI1\finallresult\Resample"
# 定义重分类范围
reclass_ranges = "0 200 1; 201 400 2; 401 600 3; 601 1000 4"
# 获取文件夹中的所有TIFF文件
tif_files = arcpy.ListRasters("*", "TIF")
# 遍历每个TIFF文件并进行重分类
for tif_file in tif_files:
# 构建输入和输出的文件路径
input_tiff = os.path.join(input_folder, tif_file)
output_tiff = os.path.join(output_folder, tif_file.replace(".tif", "_reclass.tif"))
# input_tiff1 = arcpy.gp.Int_sa(input_tiff, output_tiff)
# 进行重分类
arcpy.gp.Reclassify_sa(input_tiff, "Value", reclass_ranges, output_tiff)
print("重分类: {} ".format(tif_file))
print("重分类完成!")
3、栅格计算器(乘法)
# -*- coding: cp936 -*-
import arcpy
import os
arcpy.CheckOutExtension('Spatial')
# 设置工作环境
arcpy.env.workspace = r"D:\SDMs\SCI1\finallresult"
# 输入文件夹路径
input_folder = r"D:\SDMs\SCI1\finallresult"
# 输出文件夹路径
output_folder = r"D:\SDMs\SCI1\finallresult\Finally0_1"
# 获取文件夹中的所有 TIFF 文件
tif_files = arcpy.ListRasters("*", "TIF")
# 遍历每个 TIFF 文件并进行栅格计算器操作
for tif_file in tif_files:
input_tiff = os.path.join(input_folder, tif_file)
output_tiff = os.path.join(output_folder, tif_file.replace(".tif", "_scaled.tif"))
print tif_file
# 使用栅格计算器进行乘法操作
# 注意:{}两边必须加上' '(单引号),否则会报错,如'{}'
expression = "'{}' * 0.001".format(tif_file)
arcpy.gp.RasterCalculator_sa(expression, output_tiff)
print("正在处理: {} ".format(tif_file))
print("处理完成。")
注意: 在expression中的{}两边必须加上’ ‘(单引号),否则会报错,如’{}’
4、格式转换(tif转换为ASCII格式)
# -*- coding: cp936 -*-
import arcpy
import os
arcpy.CheckOutExtension('Spatial')
# 设置工作环境
arcpy.env.workspace = r"D:\SDMs\SCI1\finallresult\Finally0_1"
# 输入文件夹路径
input_folder = r"D:\SDMs\SCI1\finallresult\Finally0_1"
# 输出文件夹路径
output_folder = r"D:\SDMs\SCI1\finallresult\Finally0_1\ASCII_Output"
# 获取文件夹中的所有TIFF文件
tif_files = arcpy.ListRasters("*", "TIF")
# 遍历每个TIFF文件并进行ASCII格式转换
for tif_file in tif_files:
# 构建输入和输出的文件路径
input_tiff = os.path.join(input_folder, tif_file)
# 提取文件名中第一个下划线之前的部分
new_name = tif_file.split('_')[0]
output_ascii = os.path.join(output_folder, "cur_{}_thresholded.asc".format(new_name))
#output_ascii = os.path.join(output_folder, tif_file.replace(".tif", ".asc"))
# 进行ASCII格式转换
arcpy.RasterToASCII_conversion(input_tiff, output_ascii)
print("转换为ASCII格式: {} ".format(tif_file))
print("转换完成!")
5、相关参考
- Python:arcpy批量重分类实现