この記事では、大きなフォルダー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_path
ArcPy
arcpy.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
最初から計算されており、この記事の中に0
、1
、2
および3
); 以下の図に示すように。
次に、これらの小さなリモート センシング画像をファイル名の特性に従って他のフォルダーに コピーまたは切り取りたい場合は、 Python の記事を参照して、リモート センシング画像のファイル名に基づいて異なるファイルを対応するフォルダーにコピーします。 ( https://blog.csdn.net/zhebushibiaoshifu/article/details/129125339)、Pythonは複数のサブフォルダーを走査し、ファイル名の特性に基づいてファイルを異なるターゲット フォルダーにコピーします(https://blog.csdn.net/ で言及されているコード) zhebusbiaoshifu/article/details/132332068) は自動的に実装されます。
この時点で、作業は完了です。
フォロー歓迎: Crazy Learning GIS