Python地理数据处理 十九:arcpy批量处理数据之为栅格数据建立属性表并导出

21 篇文章 13 订阅
8 篇文章 2 订阅

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))
}

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jackson的生态模型

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值