#求助#python调用Arcmap完成以下处理流程#
已知目录 D:\asc结果文件 中含有多个以变量I、D命名的ASC文件,其中I可以从表“A.xlsx"的名为”强度“列读取,D可以从表“B.xlsx"中的名为“时间”列读取,asc结果文件的文件夹中asc文件被命名如:result40-1.asc result100-4.asc ……
!!
特别注意的是在jupter notebook中编写代码所使用的为python3.10.9,但电脑上安装的arcmap10.7自带的为python2.7
已在anaconda中配置了python27如下图
现需要调用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
以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:
思路:
代码实现:
import os
import arcpy
import pandas as pd
# 设置工作空间
arcpy.env.workspace = r"D:\asc结果文件"
# 设置输出路径
output_path = r"D:\tif结果汇总表.xlsx"
# 设置分类规则
remap = arcpy.sa.RemapRange([[0, 1, 1], [1, 15, 2]])
# 读取 A.xlsx 和 B.xlsx 中的数据
a_df = pd.read_excel(r"A.xlsx")
b_df = pd.read_excel(r"B.xlsx")
a_dict = dict(zip(a_df["文件名"], a_df["强度"]))
b_dict = dict(zip(b_df["文件名"], b_df["时间"]))
# 遍历 ASC 文件进行重分类和属性表转 Excel 导出
result_list = []
for asc_file in os.listdir(arcpy.env.workspace):
if asc_file.endswith(".asc"):
# 解析文件名,获取强度和时间信息
intensity = a_dict[asc_file.split(".")[0]]
time = b_dict[asc_file.split(".")[0]]
# 构造输出文件名
output_file = "result{}-{}.tif".format(intensity, time)
# 执行重分类操作
out_raster = arcpy.sa.Reclassify(asc_file, "Value", remap, "NODATA")
out_raster.save(output_file)
# 执行属性表转 Excel 导出并存储结果
output_excel = "{}.xlsx".format(output_file.split(".")[0])
arcpy.TableToExcel_conversion(output_file, output_excel)
result_list.append(pd.read_excel(output_excel))
# 将所有 Excel 文件合并到一个表格中
result_df = pd.concat(result_list, axis=1)
result_df.to_excel(output_path, index=False)
注意事项:
arcpy.sa.RemapRange
函数来定义分类规则;.xlsx
格式,否则可能会出现编码问题;pd.concat
函数来将多个 DataFrame 拼接到一起。