具体流程:excel→table(投影)→shp→克里金插值(掩膜)
import arcpy
from arcpy import env
from arcpy.sa import *
import pandas
arcpy.env.overwriteOutput = True # 允许覆盖之前产生的数据集,便于测试
'''获取excel中sheet名称'''
file_name = "G:/Arcgis/ChangshaXian/Rainfall data.xlsx"
excel_total = pandas.ExcelFile(file_name)
excel_sheet = excel_total.sheet_names
'''excel→表→shp→投影'''
arcpy.env.workspace = "G:/Arcgis/ChangshaXian" # 设置工作空间
out_table = "G:/Arcgis/ChangshaXian/CSX_table" # 表输出路径
out_shp = "G:/Arcgis/ChangshaXian/CSX_shp" # shp输出路径
i = 0
while i < len(excel_sheet):
arcpy.ExcelToTable_conversion("Rainfall data.xlsx", out_table + "/" + excel_sheet[i], excel_sheet[i])
with arcpy.EnvManager(
outputCoordinateSystem='PROJCS["WGS_1984_UTM_Zone_50N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",117.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]'):
arcpy.management.XYTableToPoint(out_table + "/" + excel_sheet[i] + ".dbf", out_shp + "/" + excel_sheet[i],
"经度", "纬度", "rainfall")
i += 1
'''克里金插值'''
z_field = "rainfall"
semiVariogram_props = KrigingModelOrdinary("SPHERICAL")
cell_size = 20
search_radius = "VARIABLE 12" # 搜索半径(可选)
out_variance_prediction_raster = None # 预测栅格的输出方差(可选)
mask_region = "G:/Arcgis/ChangshaXian/CSX_basemap/研究区域.shp" # 掩膜区域限制插值范围
out_kriging = "G:/Arcgis/ChangshaXian/CSX_kriging" # 克里金插值输出路径
j = 0
while j < len(excel_sheet):
in_point_features = out_shp + "/" + excel_sheet[j] + ".shp"
with arcpy.EnvManager( # 设置输出坐标系、掩膜范围
outputCoordinateSystem='PROJCS["WGS_1984_UTM_Zone_50N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",117.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]',
extent=mask_region):
outKriging = Kriging(in_point_features, z_field, semiVariogram_props, cell_size,
search_radius, out_variance_prediction_raster)
outKriging.save(out_kriging + "/" + excel_sheet[j])
j += 1
print("已完成%d个插值" % j)