项目要用断面法计算水库库容,基于gispro想弄个脚本批量计算,通过ai写了个脚本,修改后无法运行。脚本要求实现的功能大致是:输入一个TIN数据文件,找出数据的最高点最低点,然后从最低点开始,每隔0.5m,用表面体积函数计算每个高程值下的TIN数据的面积和体积,最后将每次的结果汇总,导出到EXCEL。看看该如何改,代码如下:
import arcpy
import pandas as pd
# 设置工作环境
arcpy.env.workspace = "C:/data"
arcpy.CheckOutExtension("3D")
# 输入TIN数据集的路径
tin_dataset = "your_tin_dataset.tds" # 请替换为你的TIN数据集路径
# 获取TIN数据集的描述信息
desc = arcpy.Describe(tin_dataset)
min_elevation = desc.zmin
max_elevation = desc.zmax
# 初始化结果列表
results = []
# 从最低点到最高点,每隔0.5米计算一次
elevation = min_elevation
while elevation <= max_elevation:
output_txt_file = "surf_vol.txt"
arcpy.ddd.SurfaceVolume(tin_dataset, output_txt_file,
reference_plane = "ABOVE", base_z = elevation, z_factor = 1,
pyramid_level_resolution = 0)
# 读取输出文本文件并提取面积和体积
with open(output_txt_file, 'r') as file:
lines = file.readlines()
if len(lines) > 1: # 确保文件中有数据
area = lines[-1].split(',')[-2].strip() # 假设面积在倒数第二列
volume = lines[-1].split(',')[-1].strip() # 假设体积在最后一列
results.append({'Index': len(results) + 1, 'Elevation': elevation, 'Area': area, 'Volume': volume})
# 删除临时文本文件
arcpy.Delete_management(output_txt_file)
# 增加0.5米
elevation += 0.5
# 将结果列表转换为DataFrame
df_results = pd.DataFrame(results)
# 导出到Excel
output_excel_file = "C:/data/results.xlsx" # 请替换为你希望保存Excel文件的路径
df_results.to_excel(output_excel_file, index = False)
print(f'Results exported to {output_excel_file}')