07_- 2023-04-25 11:11 采纳率: 55.6%
浏览 36
已结题

python调用Arcmap完成批量重分类及属性表导出及合并

#求助#python调用Arcmap完成以下处理流程#
已知目录 D:\asc结果文件 中含有多个以变量I、D命名的ASC文件,其中I可以从表“A.xlsx"的名为”强度“列读取,D可以从表“B.xlsx"中的名为“时间”列读取,asc结果文件的文件夹中asc文件被命名如:result40-1.asc result100-4.asc ……

现需要调用arcmap完成以下批量处理操作:
1.使用Spatial Analyst工具下的重分类对所有的asc文件进行重分类,输入栅格为各个asc文件,重分类字段为VALUE,分类具体要求为:旧值0-1,赋新值为1,旧值1-15,则赋新值为2,输出文件名称与输入的asc保持一致,但输出格式修改为tif格式,即 resultI-D.tif ,I与D值与asc保持一致
2.对输出的所有tif的属性表进行 表转excel 导出,
其中原属性表的格式为
示例:result40-1.tif

| OID | Value | Count |
| 0 | 1 | 1800 |
| 1 |2 | 3446 |
将所有的属性表导出并合并,要求的格式为

| Tif文件名 | Count1 | Count2|
| result40-1 |1800 | 3446 |
| result40-2 | …… | …… |
| result100-4 | …… | …… |
合并的表的路径及名称为 D:\tif结果汇总表.xlsx

  • 写回答

1条回答 默认 最新

  • 社区专家-Monster-XH 2023-04-25 12:47
    关注

    基于Monster 组和GPT的调写:

    import arcpy
    import pandas as pd
    import os
    
    # 设置工作环境
    arcpy.env.workspace = "D:/asc结果文件"
    arcpy.CheckOutExtension("Spatial")
    
    # 读取表格
    df_intensity = pd.read_excel("A.xlsx")
    df_time = pd.read_excel("B.xlsx")
    
    # 遍历asc文件,进行重分类
    for i in df_intensity['强度']:
        for d in df_time['时间']:
            # 构建输入输出文件路径
            input_raster = "result{}-{}.asc".format(str(i), str(d))
            output_raster = "result{}-{}.tif".format(str(i), str(d))
            # 执行重分类
            remap = arcpy.sa.RemapRange([[0, 1, 1], [1, 15, 2]])
            out_raster = arcpy.sa.Reclassify(input_raster, "VALUE", remap, "NODATA")
            out_raster.save(output_raster)
    
    # 提取属性表并转换为Excel
    output_excel = "D:/tif结果汇总表.xlsx"
    for root, dirs, files in os.walk(arcpy.env.workspace):
        for file in files:
            if file.endswith(".tif"):
                # 提取属性表
                input_raster = os.path.join(root, file)
                table_name = arcpy.ValidateTableName("table", arcpy.env.workspace)
                arcpy.TableToTable_conversion(input_raster, arcpy.env.workspace, table_name)
                table = os.path.join(arcpy.env.workspace, table_name)
                # 提取Count字段并汇总
                with arcpy.da.SearchCursor(table, ['VALUE', 'Count']) as cursor:
                    count_dict = {}
                    for row in cursor:
                        count_dict[row[0]] = row[1]
                # 构建新行数据
                new_row = {'Tif文件名': os.path.splitext(file)[0]}
                for key, value in count_dict.items():
                    new_row['Count' + str(key)] = value
                # 添加到输出表格
                if not os.path.isfile(output_excel):
                    pd.DataFrame(columns=new_row.keys()).to_excel(output_excel, index=False)
                pd.DataFrame([new_row]).to_excel(output_excel, index=False, header=False, mode='a')
    
    # 释放Spatial Analyst扩展许可
    arcpy.CheckInExtension("Spatial")
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月20日
  • 已采纳回答 5月12日
  • 创建了问题 4月25日