Python ArcPy は、複数のフォルダー内の多数のリモート センシング画像を 4 分の 1 に分割して N×M の部分にバッチ クロップまたはカットします。

この記事では、大きなフォルダーArcPyに基づいて、サブフォルダー内のすべてのリモート センシング画像ラスター ファイルを走査し、元のリモートセンシング画像ファイルを4 等分に切断するか、その他の指定された数の小さな部分にトリミングするPython  ベースのモジュールを紹介します

  まず、ニーズを明確にしましょう。次の図に示すように、複数のサブフォルダーを含む大きなフォルダーがあります。

  このうち、サブフォルダーには多数のラスター リモートセンシング画像ファイルが含まれています(.tifここでは例としてラスター画像ファイルの形式を紹介します)。たとえば、上図のいずれかのサブフォルダーを開くと、 「下の図に示すように」を参照してください。

  私たちが実現したいのは各サブフォルダー内の各リモート センシング画像をトリミングおよびカットし、元のリモート センシング画像を4 つの等しい部分4に相当する新しい部分に分割することですここでは、必要に応じて元のイメージをいくつかの部分に分割することができます。つまり、元のシーン イメージをいくつかの部分に分割することができます。N * M

  要件を理解したら、コードの作成を開始できます。この記事で使用されているコードは、実際には以前の記事「Python の ArcPy は、ベクター要素に基づいてラスター イメージをバッチで複数の小さな部分に分割します(https://blog.csdn.net/zhebushibiaoshifu/article/details/128481851)」と同じです。 Python で ArcPy複数のラスター画像を複数のグリッド ブロックに分割する方法 (https://blog.csdn.net/zhebushibiaoshifu/article/details/129018876) で言及されているコードのアイデアは似ていますが、ファイルの読み取りでは、相違点があります。クロップパラメータの設定やその他の点については、必要に応じて、最初に上記 2 つの記事を確認してください。

  この記事で使用したコードは次のとおりです。

# -*- coding: utf-8 -*-
"""
Created on Mon Aug 28 22:39:52 2023

@author: fkxxgis
"""

import os
import arcpy

tif_file_path = r"E:/02_Project/202307_NDVIProduce/Beijing_Preprocessing/Original"
result_file_path = r"E:/02_Project/202307_NDVIProduce/Beijing_Preprocessing/Four_Result"
arcpy.env.parallelProcessingFactor = 0

for root, dirs, files in os.walk(tif_file_path):
    for dir_name in dirs:
        dir_path = os.path.join(root, dir_name)
        arcpy.env.workspace = dir_path
        tif_file_list = arcpy.ListRasters("*", "tif")

        for tif_file in tif_file_list:
            arcpy.SplitRaster_management(tif_file,
                                         result_file_path,
                                         tif_file.split(".tif")[0] + "_",
                                         "NUMBER_OF_TILES",
                                         "TIFF",
                                         "BILINEAR",
                                         "2 2",
                                         "#",
                                         "#",
                                         "PIXELS",
                                         "#",
                                         "#",
                                         "#",
                                         "#",
                                         "#",
                                         "0")
        print(dir_path)

  まず、入力フォルダー パスと出力フォルダー パスを設定する必要があります。ここで、 は元のリモート センシング画像を保存する大きなフォルダーtif_file_pathパスを表し、 は分割結果を保存するフォルダー パスを表します。次に、ここで環境パラメーターを設定する必要があります。処理中に問題が発生しないように、このコードによる並列処理を無効にします。この設定の原理については、記事「ArcGIS の ArcMap 分割ラスター Split Raster ツール」を参照してください。結果はありません解決策(https://fkxxgis.blog.csdn.net/article/details/128474804) で十分です。result_file_pathArcPyarcpy.env.parallelProcessingFactor = 0

  次に、os.walkソース フォルダー内のすべてのサブフォルダーをスキャンし、リモート センシング画像ファイルを使用できるように、サブフォルダーごとArcPy作業環境をサブフォルダーのパスに設定しますarcpy.ListRasters.tif

  次に、リモートセンシング画像ごとに、arcpy.SplitRaster_management関数を使用してセグメント化します。このうち、第 1 パラメータtif_fileは分割するリモートセンシング画像のパス、第 2 パラメータresult_file_pathは分割結果が保存されるフォルダのパス、第 3 パラメータtif_file.split(".tif")[0] + "_"は出力ファイルのプレフィックスです。接尾辞を削除し.tif、最後にアンダースコアを追加します。次のパラメータは、分割方法、出力形式、補間方法などを設定するために使用されます。ここでは、リモート センシング画像をブロックに分割することを選択します2 * 2(リモート センシング画像を他の量に分割する必要がある場合は、ここで変更できます)、補間方法は 、出力形式はBILINEARですTIFF最後のパラメータは、0元のリモート センシング画像の値が、0切り取り後の小さい画像のNoData値として使用されることを示します。

  上記のコードを実行すると、結果フォルダーで、各リモート センシング画像がパーツに分割され4、ここの各ファイルに数値サフィックスが付いていることがわかります (数値サフィックスは0最初から計算されており、この記事の中に012および3); 以下の図に示すように。

次に、これらの小さなリモート センシング画像をファイル名の特性に従って他のフォルダーに  コピーまたは切り取りたい場合は、 Python の記事を参照して、リモート センシング画像のファイル名に基づいて異なるファイルを対応するフォルダーにコピーします。 ( https://blog.csdn.net/zhebushibiaoshifu/article/details/129125339)、Pythonは複数のサブフォルダーを走査し、ファイル名の特性に基づいてファイルを異なるターゲット フォルダーにコピーします(https://blog.csdn.net/ で言及されているコード) zhebusbiaoshifu/article/details/132332068) は自動的に実装されます。

  この時点で、作業は完了です。

フォロー歓迎: Crazy Learning GIS

おすすめ

転載: blog.csdn.net/zhebushibiaoshifu/article/details/132550536