ホームページ  >  記事  >  バックエンド開発  >  Python ArcPy が長期シリーズ ラスター イメージのバッチ スプライシングを実装する方法

Python ArcPy が長期シリーズ ラスター イメージのバッチ スプライシングを実装する方法

PHPz
PHPz転載
2023-04-28 20:16:051345ブラウズ

まず、この記事の具体的なニーズを明確にしましょう。下図に示すように、リモートセンシング画像が .tif 形式でファイル名に撮影時刻が含まれたフォルダが大量に保存されています。

Python ArcPy が長期シリーズ ラスター イメージのバッチ スプライシングを実装する方法

## 同じ日に撮影したリモート センシング画像を結合したいと考えています。たとえば、上の写真には

2001185 が # あります。 ##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 は結合後に新しく生成されたリモートセンシング画像の保存パスです。スプライシング。 ここでは、まずリソース マネージャーの

tif_file_path

パスにあるファイルを「name」で並べ替える必要があります。次に、arcpy.ListRasters を使用します。 () 関数は、パスの下にある .tif 形式の元の画像ファイルをすべて取得し、最初のファイルのファイル名の一部をインターセプトして、そのイメージング時刻を取得します。次に、新しいラスター ファイル。コードのこの部分の意味については、この記事の冒頭で説明した「Python arcpy によるラスターの作成とラスターのバッチ スプライシング」の記事で説明されているため、ここでは行いません。これを繰り返します。 次に、

tif_file_path

パスにあるすべての .tif 形式の画像ファイルをスキャンします。このうち、ある撮影時刻のリモートセンシング画像が読み込まれているかどうかを簡単な判定で判定します。たとえば、185日に撮影した10枚のリモートセンシング画像が読み込まれているかどうかを判定します。画像がすべて走査されたら、10 枚のリモート センシング画像が結合されます。読み取りが完了していない場合、たとえば、185 日に撮像された 10 枚のリモート センシング画像が現在 8 番目の画像まで走査されている場合、 , その後は接合せずに下にトラバースし続けます。 ここにいる皆さんも、初期段階でフォルダー内のファイルを「

name

」に従って並べ替える必要がある理由を理解していると思います。これは、同じイメージング時間のすべてのファイルが確実に保存されるようにするためです。 リモート センシング画像はすべて一緒に配置されています。トラバーサル中に 新しいイメージング時間 に遭遇する限り、プログラムは 前のイメージング時間 ## のすべての画像を認識します。 最後のイメージング時刻からのすべてのラスター画像を結合できます。 最後に、tif_file==tif_file_name[len(tif_file_name)-1]

を使用して、フォルダー内の

最後の 画像がドキュメントをスキャンしたかどうかを確認します。その場合は、現在のイメージング時刻ですべてのイメージを結合し、コードの実行を完了する必要があります。 IDLE (Python GUI)

でコードを実行します。コードの実行後、結果フォルダーを見てみましょう。画像は撮影時刻に応じてすでに個別に結合されていることがわかります。

以上がPython ArcPy が長期シリーズ ラスター イメージのバッチ スプライシングを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。