当前位置: 首页 > article >正文

Arcpy 多线程批量重采样脚本

Arcpy 多线程批量重采样脚本

import arcpy
import os
import multiprocessing

def resample_tifs(input_folder, output_folder, cell_size=0.05, resampling_type="BILINEAR"):
    """
    将指定文件夹下的所有 TIFF 文件重采样到指定分辨率,并输出到新文件夹中。

    参数:
        input_folder (str): 输入 TIFF 文件所在的文件夹路径。
        output_folder (str): 重采样后的 TIFF 文件输出到的文件夹路径。
        cell_size (float): 重采样后的分辨率大小。默认为 symbol。
        resampling_type (str): 重采样方法。可选值包括 "NEAREST_NEIGHBOR", "BILINEAR", "CUBIC", "MAJORITY"。默认为 "BILINEAR"。
    """
    # 检查输入文件夹是否存在
    if not os.path.exists(input_folder):
        raise FileNotFoundError(f"输入文件夹不存在: {input_folder}")
    
    # 如果输出文件夹不存在,则创建
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
        print(f"已创建输出文件夹: {output_folder}")

    # 设置环境工作空间
    arcpy.env.workspace = input_folder

    # 获取所有 TIFF 文件
    tif_list = arcpy.ListRasters("*", "TIF")
    
    if not tif_list:
        print("没有找到 TIFF 文件。")
        return

    print(f"找到 {len(tif_list)} 个 TIFF 文件。开始重采样...")

    # 遍历每个 TIFF 文件并进行重采样
    for tif in tif_list:
        input_path = os.path.join(input_folder, tif)
        output_path = os.path.join(output_folder, tif)
        
        try:
            print(f"正在处理: {tif}")
            # 使用 Resample_management 工具进行重采样
            arcpy.management.Resample(
                in_raster=input_path,
                out_raster=output_path,
                cell_size=cell_size,
                resampling_type=resampling_type
            )
            print(f"成功重采样并保存到: {output_path}")
        except arcpy.ExecuteError:
            print(f"ArcPy 错误处理文件 {tif}: {arcpy.GetMessages(2)}")
        except Exception as e:
            print(f"错误处理文件 {tif}: {e}")

    print("所有文件重采样完成。")

def main():
    output_dir2 = r"./010_世界人口数据 _0.1/"    #保存new重采样文件
    symbol = 0.25 # 重采样大小
    tasks = [
        # # ("./01_land_cover", "./China_01_landcover"),
        # ("./Global_tif_0.1_LC", output_dir2, symbol, "MAJORITY"),
        ("010_世界人口数据", output_dir2, symbol, "NEAREST"),

    ] 
    # 创建进程池,进程数设为CPU核心数
    pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())

    # 准备并行执行的任务
    results = []
    print(tasks)
    for input_dir11, output_dir22,cell_size ,resampling_type in tasks:
        result = pool.apply_async(resample_tifs, args=(input_dir11, output_dir22,cell_size ,resampling_type))
        results.append(result)

    # 关闭进程池,等待所有任务完成
    pool.close()
    pool.join()

    print("所有任务已完成。")


# 示例用法
if __name__ == "__main__":
  main()


http://www.kler.cn/a/407146.html

相关文章:

  • C#语言入门
  • 银河麒麟v10 二进制kubeadm+containerd搭建k8s集群(证书100年)—— 筑梦之路
  • 设计LRU缓存
  • Python 使用 Token 认证方案连接 Kubernetes (k8s) 的详细过程
  • MyBatis Plus 项目的创建和使用
  • 速盾:CDN服务器和双线服务器哪个更好?
  • 11 —— 打包模式的应用
  • 一站式学习:害虫识别与分类图像分割
  • 汽车加油行驶问题-动态规划算法(已在洛谷AC)
  • 埃文科技携手河南企业代表团亮相第十九届广州中博会
  • 移门缓冲支架:为好梦加分
  • 【青牛科技】电流模式PWM控制器系列--D4870
  • HTML通过JavaScript获取访问连接,IP和端口
  • 力扣—面试题 17.14. 最小K个数
  • 多目标优化算法:多目标河马优化算法(MOHOA)求解ZDT1、ZDT2、ZDT3、ZDT4、ZDT6,提供完整MATLAB代码
  • C++中类的继承
  • 25.UE5时间膨胀,慢动作,切换地图,刷BOSS
  • 使用flink编写WordCount
  • 高频面试题(含笔试高频算法整理)基本总结回顾23
  • 界面控件DevExpress WinForms v24.2新功能预览 - 人工智能(AI)
  • vue2 _src_Todolist自定义事件版本
  • JavaWeb——Maven、web入门
  • 前端测试工具(Jest与Mock)
  • 体验免费开箱即用的AI工具:Blackbox.AI
  • 【100ask】IMX6ULL开发板用SPI驱动RC522模块
  • 【手写一个spring】spring源码的简单实现--BeanPostProcessor(实现AOP)以及JDK动态代理/CGLIB动态代理