1. 为栅格数据建立属性表
arcmap解决办法:然后利用int工具,对数据进行求整:
但是,当有上百幅影像时,这样操作就十分麻烦了,所以这里需要使用arcpy编程:
# -*- coding: cp936 -*-
import arcpy
import os
import time
from arcpy import env
from arcpy.sa import *
start = time.clock()
arcpy.CheckOutExtension("Spatial")
# 设置工作空间和输出路径
workspace = r"D:\clipforest\1phe"
out_folder = r"D:\clipforest_beifen\1phe"
# 遍历工作空间中所有文件夹
for root, dirs, files in os.walk(workspace):
for dir in dirs:
# 如果文件夹名为数字,则进行处理
if dir.isdigit():
# 构造输入和输出路径
in_folder = os.path.join(workspace, dir)
out_subfolder = os.path.join(out_folder, "0" + dir)
if not os.path.exists(out_subfolder):
os.makedirs(out_subfolder)
arcpy.env.workspace = in_folder
rasters = arcpy.ListRasters("*", "tif")
# 遍历文件夹中的.tif文件
for raster in rasters:
print("Processing " + raster)
# 构造输出路径和文件名
out_raster = os.path.join(out_subfolder, "int_" + raster)
# 使用Raster Calculator将浮点型栅格转换为整型栅格
arcpy.gp.Int_sa(raster, out_raster)
end = time.clock()
print("Done!!!")
print (str(end-start))
一次性对D:\clipforest\1phe文件下的所有文件建立属性表,并按照之前文件夹的名字保存到D:\clipforest_beifen\1phe路径下。
2. 获取.tif图像的属性表并以 .dbf 格式导出
# -*- coding: cp936 -*-
import arcpy
import os
import time
start = time.clock()
# 设置工作空间和输出路径
tif_folder = r"D:\clipforest_beifen\1phe"
out_folder = r"D:\clipforest_dbf\1phe"
# 获取所有数字命名的文件夹
folders = [folder for folder in os.listdir(tif_folder) if folder.isdigit()]
# 遍历所有数字命名的文件夹
for folder in sorted(folders):
# 设置工作空间为当前文件夹
arcpy.env.workspace = os.path.join(tif_folder, folder)
# 获取当前文件夹下所有.tif文件
rasters = arcpy.ListRasters("*", "tif")
# 遍历所有.tif文件
for raster in rasters:
# 获取栅格属性表
desc = arcpy.Describe(raster)
table = desc.catalogPath
if table:
# 构造输出路径和文件名
out_csv = os.path.join(out_folder, "0" + folder + "_" + os.path.splitext(raster)[0] + ".csv")
# 将栅格属性表导出为CSV文件
arcpy.TableToTable_conversion(table, out_folder, "0" + folder + "_" + os.path.splitext(raster)[0] + ".csv")
print("Exported {} to {}".format(raster, out_csv))
else:
print("No attribute table found for {}".format(raster))
end = time.clock()
print("Done!!!")
print (str(end-start))
获取"D:\clipforest_beifen\1phe"路劲下的.tif图像的属性表,导出到"D:\clipforest_dbf\1phe"文件夹下。
3. 使用R语言将.dbf格式文件转换为.xlsx格式
##-------------------------------------------------------------------------------------
# @author:Jackson Zhao
# @time:2023/3/24 17:42:12
# 将文件夹中的.dbf文件转换为.xlsx文件
# 导入需要使用的包
library(foreign)
library(openxlsx)
# 设置工作目录和输出目录
setwd("D:\\clipforest_dbf\\1phe")
out_folder <- "1"
# 获取所有.dbf文件
dbf_files <- list.files(pattern = "\\.dbf$")
dbf_files
# 遍历所有.dbf文件
for (file in dbf_files) {
# 读取.dbf文件
dbf_data <- read.dbf(file)
# 构造输出路径和文件名
out_file <- file.path(out_folder, paste0(out_folder, tools::file_path_sans_ext(file), ".xlsx"))
# 将数据写入.xlsx文件
write.xlsx(dbf_data, out_file)
message(paste0("Converted ", file, " to ", out_file))
}