# – coding: UTF-8 –
import arcpy
import glob
import os
import re

class BatchClip:
def init(self, inws, outws, mask):
self.inws = inws
self.outws = outws
self.mask = mask

arcpy.CheckOutExtension(‘Spatial’)

def clip(self):
if not os.path.exists(self.outws):
os.mkdir(self.outws)
rasters = glob.glob(os.path.join(self.inws, “.tif”))
shps = glob.glob(os.path.join(self.mask, “.shp”))

for shp in shps:
for ras in rasters:
nameT = os.path.basename(ras) + “.tif”
outname = os.path.join(self.outws, nameT)
out_extract = arcpy.sa.ExtractByMask(ras, shp)
out_extract.save(outname)
print os.path.basename(ras) + " ---- down"

print " ---- down ---- “

inws = r"F:\GEE\liangzhongchang\tif\liangzhongchang_ndvi”
outws = r"F:\GEE\liangzhongchang\mask”
mask = r"F:\GEE\liangzhongchang\1_shp"

batch_clip = BatchClip(inws, outws, mask)
batch_clip.clip()


import arcpy
import os
import glob
import re

from arcpy.sa import

arcpy.CheckOutExtension(‘Spatial’)

class RasterReclassify:
def init(self, workspace):
# Set workspace
arcpy.env.workspace = workspace

def reclassify_rasters(self, index):
folder = arcpy.env.workspace[-4:]
folder_name = “reclassify” + folder
folder_path = os.path.dirname(arcpy.env.workspace)
output_path = os.path.join(folder_path, folder_name)

if not os.path.exists(output_path):
os.mkdir(output_path)
print(output_path)

rasterlist = arcpy.ListRasters(“”, “tif”)

for raster in rasterlist:
inRaster = arcpy.Raster(raster)
print(inRaster)
time = inRaster.name[:8]
print(time)
out = os.path.join(output_path, time + “_” + index + “.tif”)
print(out)

if index == “ndvi”:
# NDVI
outCon = Con(inRaster <= 0.19, 1,
Con((inRaster > 0.19) & (inRaster <= 0.39), 2,
Con((inRaster > 0.39) & (inRaster <= 0.55), 3,
Con((inRaster > 0.55) & (inRaster <= 0.75), 4,
Con((inRaster > 0.75), 5)))))

elif index == “gndvi”:
# GNDVI
outCon = Con(inRaster <= 0.2, 1,
Con((inRaster > 0.2) & (inRaster <= 0.4), 2,
Con((inRaster > 0.4) & (inRaster <= 0.6), 3,
Con((inRaster > 0.6) & (inRaster <= 0.8), 4,
Con((inRaster > 0.8), 5)))))

elif index == “vci”:
# VCI
outCon = Con(inRaster <= 0.15, 1,
Con((inRaster > 0.15) & (inRaster <= 0.3), 2,
Con((inRaster > 0.3) & (inRaster <= 0.45), 3,
Con((inRaster > 0.45) & (inRaster <= 0.6), 4,
Con((inRaster > 0.6), 5)))))
elif index == “chlor”:
# Chlor
outCon = Con(inRaster <= 12, 1,
Con((inRaster > 12) & (inRaster <= 21), 2,
Con((inRaster > 21) & (inRaster <= 32), 3,
Con((inRaster > 32) & (inRaster <= 43), 4,
Con((inRaster > 43), 5)))))

outCon.save(out)

print(str(raster) + “–down”)
print(" —down— “)

# Example usage
rr = RasterReclassify(r"F:\GEE\liangzhongchang\mask\ndvi”)
rr.reclassify_rasters(“ndvi”)
rr.reclassify_rasters(“gndvi”)
rr.reclassify_rasters(“vci”)
rr.reclassify_rasters(“chlor”)

# coding:utf-8
import arcpy
import os
import re
from arcpy import env

class RasterToPolygonConverter:
def init(self, input_raster_path, output_shp_path):
self.input_raster_path = input_raster_path
self.output_shp_path = output_shp_path

def convert_raster_to_polygon(self):
# Set workspace
arcpy.env.workspace = self.input_raster_path
# Create output folder if it doesn’t exist
if not os.path.exists(self.output_shp_path):
os.mkdir(self.output_shp_path)

# List raster files
rasters = arcpy.ListFiles(“.tif")
for raster in rasters:
# Extract catchment name from raster filename
catchment_name = raster[:8]
print(catchment_name)

# Set output shapefile path
shp_out_name = os.path.join(self.output_shp_path, catchment_name)
print(shp_out_name)

# Convert raster to polygon
arcpy.RasterToPolygon_conversion(raster, shp_out_name, “true”, “Value”)
print(“finished”)

# Example usage
input_raster_path = r"F:\GEE\liangzhongchang\mask\reclassifyndvi"
folder = input_raster_path[-4:]
folder_name = “polygon” + folder
folder_path = r"F:\GEE\liangzhongchang\mask"
output_shp_path = os.path.join(folder_path, folder_name)

converter = RasterToPolygonConverter(input_raster_path, output_shp_path)
converter.convert_raster_to_polygon()

# coding:utf-8
import arcpy
import os
import re
from arcpy import env

def dissolve_shapefiles(input_raster_path, output_shp_path):
arcpy.env.workspace = input_raster_path
shps = arcpy.ListFiles(".shp”)

for shp in shps:
catchment_name = shp[:8]
shp_out_name = os.path.join(output_shp_path,catchment_name)

arcpy.Dissolve_management(shp, shp_out_name,“gridcode”)
print “Finished dissolving”, catchment_name

if name == “main”:
input_raster_path = r"F:\GEE\liangzhongchang\mask\polygonndvi"
folder = input_raster_path[-4:]
folder_name = “dissolve” + folder
folder_path = “F:\GEE\liangzhongchang\mask”
output_shp_path = os.path.join(folder_path,folder_name)

if not os.path.exists(output_shp_path):
os.mkdir(output_shp_path)

dissolve_shapefiles(input_raster_path, output_shp_path)

import arcpy
import os
import re
import glob
import datetime

class FieldCalculator:
def init(self, input_polygon):
self.input_polygon = input_polygon

def calculate_fields(self):
current_year = datetime.datetime.now().year
path_list = os.listdir(self.input_polygon)

for i in range(len(path_list)):
landid = path_list[i][-4:]
print(landid)

path = self.input_polygon + “\” + path_list[i]
shps = glob.glob(os.path.join(self.input_polygon, “*.shp”))

for shp in shps:
print(shp)
catchment_name = shp[-12:-4]

print (catchment_name)

date = int(catchment_name)

# arcpy.DeleteField_management(shp,[“LandId”])

field_names = [f.name for f in arcpy.ListFields(shp)]

if ‘date’ not in field_names:
arcpy.AddField_management(shp, ‘date’, ‘Long’)
arcpy.CalculateField_management(shp,‘date’,expression=date,expression_type=“python”, code_block=“”)

if ‘landId’ not in field_names:
arcpy.AddField_management(shp, ‘landId’, ‘Short’)
arcpy.CalculateField_management(shp,‘landId’,0,expression_type=“python”)

if ‘landName’ not in field_names:
arcpy.AddField_management(shp, ‘landName’,‘TEXT’)

if ‘crop’ not in field_names:
arcpy.AddField_management(shp, ‘crop’,‘TEXT’)

if ‘Area’ not in field_names:
arcpy.AddField_management(shp,‘Area’,‘Double’)

if ‘Area_mu’ not in field_names:
arcpy.AddField_management(shp,‘Area_mu’,‘Double’)

if ‘year’ not in field_names:
arcpy.AddField_management(shp,‘year’,‘Double’)
arcpy.CalculateField_management(shp,‘year’,current_year,expression_type=“python”)

if name == “main”:
input_polygon = r"F:\GEE\liangzhongchang\mask\dissolve_cho"

field_calculator = FieldCalculator(input_polygon)
field_calculator.calculate_fields()

将上述函数、类代码通过输入输出联系起来。