1. 實現(xiàn)一(批量裁剪的高級用法)
實現(xiàn)將給定的 .shp 文件中的所有省份作為裁剪范圍,對給定的 .tif 文件進行裁剪,輸出所有省份的單獨 .tif 文件:
# -*- coding: cp936 -*-
import arcpy
arcpy.CheckOutExtension('Spatial')
# 定義輸入文件的路徑
shp_path = r"C:\Users\map.shp"
tif_path = r"C:\Users\dem.tif"
# 讀取文件
shp = arcpy.mapping.Layer(shp_path)
tif = arcpy.Raster(tif_path)
# 獲取.tif 文件的空間參考信息
spatial_ref = tif.spatialReference
# 創(chuàng)建一個用于存儲輸出的文件夾
output_folder = r"C:\Users\output"
arcpy.CreateFolder_management(output_folder, "clipped_tifs")
# 循環(huán)遍歷 .shp 文件中的每個省份
for row in arcpy.da.SearchCursor(shp, ["SHAPE@", "name"]):
# 構建輸出.tif 文件的路徑
output_tif_path = output_folder + "\\clipped_tifs\\" + row[1] + ".tif"
# 使用.shp 文件對.tif 文件進行裁剪
arcpy.Clip_management(tif_path, "#", output_tif_path, row[0], "#", "ClippingGeometry")
# 打印輸出信息
print row
# 刪除中間變量
del shp, tif
2. 實現(xiàn)二(柵格計算器求和)
實現(xiàn)對文件名前14個字符一樣的tif圖像進行柵格運算求和:
如:XXXX_XXX_2003.M01_Mean、XXXX_XXX_2003.M02_Mean、XXXX_XXX_2003.M03_Mean;XXXX_XXX_2004.M01_Mean、XXXX_XXX_2004.M02_Mean、XXXX_XXX_2004.M03_Mean;XXXX_XXX_2005.M01_Mean、XXXX_XXX_2005.M02_Mean、XXXX_XXX_2005.M03_Mean。。。。。。
# -*- coding: cp936 -*-
import arcpy
import os
arcpy.CheckOutExtension('Spatial')
# 設置工作空間
arcpy.env.workspace = r"D:\Datasets"
# 獲取所有.tif文件
tif_list = arcpy.ListRasters("*", "TIF")
# 創(chuàng)建字典,用于存儲同一年份的柵格圖像
tif_dict = {}
# 遍歷所有.tif文件,將同一年份的柵格圖像添加到字典中
for tif in tif_list:
year = tif.split("_")[2][:4]
if year in tif_dict:
tif_dict[year].append(tif)
else:
tif_dict[year] = [tif]
# 對每個年份的柵格圖像進行柵格運算求和,并保存結果
for year in tif_dict:
tif_sum = None
for tif in tif_dict[year]:
tif_path = os.path.join(arcpy.env.workspace, tif)
tif_raster = arcpy.Raster(tif_path)
if tif_sum is None:
tif_sum = tif_raster
else:
tif_sum += tif_raster
output_name = "D:\\Datasets\\TIFClip\\" + year
output_path = os.path.join(arcpy.env.workspace, output_name)
tif_sum.save(output_path)
print year
3. 實現(xiàn)三(使用柵格計算器刪除指定值)
1、如果我們想刪除柵格圖像的屬性表中的某個空值或者指定值,如9999或52668,如果在arcgis中操作的話,可以使用柵格計算器,輸入以下代碼即可:
Con((input.tif != 9999) & (input.tif != 52668), input.tif)
2、也可以使用arcpy進行批量處理:
# -*- coding: cp936 -*-
import arcpy
import os
arcpy.CheckOutExtension("spatial")
# 定義輸入和輸出文件夾
input_folder = r"D:\Datasets"
output_folder = r"D:\Datasets\tifclipCon"
# 循環(huán)遍歷文件夾下的所有tif文件
for filename in os.listdir(input_folder):
if filename.endswith(".tif"):
# 構建輸入和輸出路徑
input_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, filename)
# 使用Map Algebra表達式刪除指定的屬性表值
expression = "Con((\"" + input_path + "\" != 9999) & (\"" + input_path + "\" != 52668), \"" + input_path + "\")"
arcpy.gp.RasterCalculator_sa(expression, output_path)
print filename
4. 實現(xiàn)四(讀取兩個文件夾中的tif文件進行相乘并保存)
讀取兩個文件夾中的tif文件,并對兩個相對應的文件進行相乘:
# -*- coding: cp936 -*-
import arcpy
import os
import warnings
warnings.filterwarnings('ignore')
arcpy.CheckOutExtension('Spatial')
# 設置工作空間
arcpy.env.workspace = r"D:\RSE\dataset\1\output"
# 設置輸入文件夾路徑
t_folder = r"D:\RSE\dataset\t\output"
p_folder = r"D:\RSE\dataset\p\output"
# 設置輸出文件夾路徑
out_folder = r"D:\RSE\dataset\tbyp"
# 獲取輸入文件夾中以TEM開頭的tif文件列表
t_list = arcpy.ListRasters("TEM*", "TIF")
# 遍歷輸入文件夾中的tif文件
for t_file in t_list:
# 獲取tif文件名的后三個字符
suffix = t_file[3:6]
# 構造PRE文件路徑
p_file = os.path.join(p_folder, "PRE" + suffix + ".tif")
# 判斷PRE文件是否存在
if not arcpy.Exists(p_file):
print("PRE file does not exist for " + t_file)
continue
print "*******************************************************************"
# 構造輸出文件路徑
out_file = os.path.join(out_folder, "output" + suffix + ".tif")
# 使用柵格計算器對兩個tif文件進行相乘
expression = "Times('{}', '{}')".format(t_file, p_file)
arcpy.gp.RasterCalculator_sa(expression, out_file)
print "Processed " + out_file
本代碼使用Times()函數(shù)對兩個柵格進行相乘文章來源:http://www.zghlxwxcb.cn/news/detail-429503.html
5. 實現(xiàn)五(文件夾中所有tif文件相加)
實現(xiàn)文件夾中所有tif文件相加:文章來源地址http://www.zghlxwxcb.cn/news/detail-429503.html
# -*- coding: cp936 -*-
import arcpy
import os
arcpy.CheckOutExtension('Spatial')
# 設置工作空間
arcpy.env.workspace = r"D:\RSE\dataset\TbyP"
# 設置輸出文件夾路徑
out_folder = r"D:\RSE\dataset\TbyP"
# 獲取輸入文件夾中的所有tif文件
tif_list = arcpy.ListRasters("*", "TIF")
# 如果沒有tif文件,則輸出提示信息
if not tif_list:
print("There are no TIFF files in the input folder.")
else:
# 構造柵格計算器表達式
#expression = " + ".join(tif_list)
expression = ' + '.join(['"' + tif + '"' for tif in tif_list])
# 構造輸出文件路徑
out_file = os.path.join(out_folder, "outputAll.tif")
# 使用柵格計算器對所有tif文件進行相加
arcpy.gp.RasterCalculator_sa(expression, out_file)
print"The output file is located at " + out_file
到了這里,關于Python地理數(shù)據(jù)處理 二十一:基于arcpy批量操作(三)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!