まず、この記事の具体的なニーズを明確にしましょう。下図に示すように、リモートセンシング画像が .tif
形式でファイル名に撮影時刻が含まれたフォルダが大量に保存されています。
2001 年
185 が # あります。 ##10 日
に撮影されたリモートセンシング画像、それぞれはこの日の異なる空間位置での画像であり、同時に 日の
193 日が存在します。 2001
10
のリモート センシング画像。まず、185
日に撮影された 10
リモート センシング画像を結合し、次に 193
日に撮影された 10
画像をスティッチしたいと考えています。センシング画像をつなぎ合わせるなど。リモートセンシング画像の総数が少ない場合は、手動で 1 枚ずつつなぎ合わせることもできますが、画像の数が多い場合は、コードを使用してそれを実現する必要があります。 要件を明確にした後、具体的な運用を開始できます。まず、この記事で必要なコードは以下の通りです。
# -*- coding: utf-8 -*- """ Created on Fri Apr 15 13:21:55 2022 @author: fkxxgis """ import os import arcpy tif_file_path="E:/LST/Data/NDVI/02_TIFF/" out_file_path="E:/LST/Data/NDVI/03_Mosaic/" arcpy.env.workspace=tif_file_path tif_file_name=arcpy.ListRasters("*","tif") tif_file_date=tif_file_name[0][1:8] one_day_tif_list=[] tif_file_example_path=tif_file_path+tif_file_name[0] cell_size_x=arcpy.GetRasterProperties_management(tif_file_example_path,"CELLSIZEX") cell_size=cell_size_x.getOutput(0) value_type=arcpy.GetRasterProperties_management(tif_file_example_path,"VALUETYPE") describe=arcpy.Describe(tif_file_example_path) spatial_reference=describe.spatialReference for tif_file in tif_file_name: if tif_file[1:8]==tif_file_date: one_day_tif_list.append(tif_file) tif_file_temp=tif_file if tif_file==tif_file_name[len(tif_file_name)-1]: out_file_name=tif_file[1:8]+".tif" arcpy.CreateRasterDataset_management(out_file_path,out_file_name, cell_size,"16_BIT_SIGNED",spatial_reference,"1") out_file=out_file_path+out_file_name for tif_file_new in one_day_tif_list: arcpy.Mosaic_management([tif_file_path+tif_file_new],out_file) else: out_file_name=tif_file_temp[1:8]+".tif" arcpy.CreateRasterDataset_management(out_file_path,out_file_name, cell_size,"16_BIT_SIGNED",spatial_reference,"1") out_file=out_file_path+out_file_name for tif_file_new in one_day_tif_list: arcpy.Mosaic_management([tif_file_path+tif_file_new],out_file) one_day_tif_list=[] one_day_tif_list.append(tif_file) tif_file_date=tif_file[1:8]
このうち、
tif_file_path は結合前の元のリモートセンシング画像の保存パスであり、 out_file_path
は結合後に新しく生成されたリモートセンシング画像の保存パスです。スプライシング。 ここでは、まずリソース マネージャーの
パスにあるファイルを「name
」で並べ替える必要があります。次に、arcpy.ListRasters を使用します。 () 関数は、パスの下にある .tif
形式の元の画像ファイルをすべて取得し、最初のファイルのファイル名の一部をインターセプトして、そのイメージング時刻を取得します。次に、新しいラスター ファイル。コードのこの部分の意味については、この記事の冒頭で説明した「Python arcpy によるラスターの作成とラスターのバッチ スプライシング」の記事で説明されているため、ここでは行いません。これを繰り返します。 次に、
パスにあるすべての .tif
形式の画像ファイルをスキャンします。このうち、ある撮影時刻のリモートセンシング画像が読み込まれているかどうかを簡単な判定で判定します。たとえば、185
日に撮影した10枚のリモートセンシング画像が読み込まれているかどうかを判定します。画像がすべて走査されたら、10 枚のリモート センシング画像が結合されます。読み取りが完了していない場合、たとえば、185
日に撮像された 10 枚のリモート センシング画像が現在 8 番目の画像まで走査されている場合、 , その後は接合せずに下にトラバースし続けます。 ここにいる皆さんも、初期段階でフォルダー内のファイルを「
」に従って並べ替える必要がある理由を理解していると思います。これは、同じイメージング時間のすべてのファイルが確実に保存されるようにするためです。 リモート センシング画像はすべて一緒に配置されています。トラバーサル中に 新しいイメージング時間 に遭遇する限り、プログラムは 前のイメージング時間 ## のすべての画像を認識します。 最後のイメージング時刻からのすべてのラスター画像を結合できます。 最後に、tif_file==tif_file_name[len(tif_file_name)-1]
を使用して、フォルダー内の最後の 画像がドキュメントをスキャンしたかどうかを確認します。その場合は、
現在のイメージング時刻ですべてのイメージを結合し、コードの実行を完了する必要があります。 IDLE (Python GUI)
以上がPython ArcPy が長期シリーズ ラスター イメージのバッチ スプライシングを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。