FAQ
ArcPy (ArcMap): マルチバンド ラスターをシングルバンド ラスターに分割するツール

ナレッジ番号:2655 | 登録日:2023/05/29 | 更新日:2024/03/18

概要

マルチバンド ラスターをシングルバンド ラスターに分割するツールをご紹介します。

入力パラメータ

  • [入力ラスタ] : ラスター データセット、またはラスター レイヤを設定します。
  • [出力ワークスペース] : 各バンドのラスター データを出力するフォルダ、または ジオデータベースを設定します。

内容

[入力ラスタ] に設定したマルチバンドの ラスタ データセット、またはラスタ レイヤを [出力ワークスペース] で設定したフォルダ、またはジオデータベースにシングルバンド ラスタに分割して出力します。

[出力ワークスペース] にフォルダを指定した場合は、[入力ラスタ] に設定したラスタ データと同じ拡張子のラスタ データセットを出力します。

使用手順

  1. zip ファイルをダウンロードし、任意のフォルダに解凍します。
  2. ArcMap を起動し、データを追加します。
  3. [カタログ] ウィンドウで解凍により作成されたフォルダを展開します。
  4. フォルダ内の「SeparateRasterTool」ツールボックスを展開し、[マルチバンド → シングルバンド] ツールをダブルクリックします。
  5. パラメータを入力し、ツールを実行します。

ダウンロード

SeparateRasterTool

※ ans4668.zip という名前の zip ファイルがダウンロードされます。

Python ソース コード

# coding:cp932
# Purpose : マルチバンド ラスタをシングルバンド ラスタに分割
#
# Author : ESRIジャパン

# ArcPy サイト パッケージ、os モジュールのインポート
import arcpy,os

# ツールのパラメータを設定します。
inras = arcpy.GetParameterAsText(0)
outWS = arcpy.GetParameterAsText(1)

# 入力ラスタ、出力ワークスペースの情報を取得します。
desc = arcpy.Describe(inras)
inpath = desc.catalogPath
BandCount = desc.bandCount
Bands = desc.children
desc2 = arcpy.Describe(outWS)
outWS_Type = desc2.workspaceType

# バンド数をプログレス ウィンドウに表示します。
arcpy.AddMessage("\n" + inras + u" は、" + str(BandCount) + u" バンドラスタです。\n")

# 仮想ラスタ レイヤをマルチバンド からシングルバンドに分割
if not arcpy.Exists(inpath) or desc.format == "AFR":
    # 仮想レイヤをエクスポート
    if outWS_Type == u"FileSystem":
        tmpWS = arcpy.CreateFileGDB_management(outWS,"tmp.gdb")
        tmpRas = arcpy.CopyRaster_management(inras,tmpWS.getOutput(0) + os.sep + "tmp")
    elif outWS_Type == u"LocalDatabase":
        tmpWS = outWS
        tmpRas = arcpy.CopyRaster_management(inras,tmpWS + os.sep + "tmp")
    tmp_desc = arcpy.Describe(tmpRas)
    tmp_Bands = tmp_desc.children

    if "." in str(arcpy.GetParameter(0)):
        rasName = str(arcpy.GetParameter(0)).split(".")[0]
    else:
        rasName = str(arcpy.GetParameter(0))

    i = 0

    for tmp_Band in tmp_Bands:
        # フォルダの場合
        if outWS_Type == u"FileSystem":
            inras2 = tmpRas.getOutput(0) + os.sep + tmp_Band.name
            outras = outWS + os.sep + rasName + "_" + Bands[i].name + ".tif"
        # ジオデータベースの場合
        elif outWS_Type == u"LocalDatabase":
            inras2 = tmpWS + os.sep + "tmp" + os.sep + tmp_Band.name
            outras = outWS + os.sep + rasName + "_" + Bands[i].name

        arcpy.CopyRaster_management(inras2,outras)

        arcpy.AddMessage("\n" + outras + u" の出力が完了しました。" + "\n")
        i += 1

    if outWS_Type == u"FileSystem":
        if arcpy.Exists(tmpWS.getOutput(0)):
            arcpy.Delete_management(tmpWS.getOutput(0))
    elif outWS_Type == u"LocalDatabase":
        if arcpy.Exists(tmpWS + os.sep + "tmp"):
            arcpy.Delete_management(tmpWS + os.sep + "tmp")

# 実存するラスタ レイヤをマルチバンド からシングルバンドに分割
elif arcpy.Exists(inpath):
    for Band in Bands:
        inras2 = inpath + os.sep + Band.name
        # フォルダの場合
        if outWS_Type == u"FileSystem":
          outras = outWS + os.sep + os.path.basename(inpath).split(".")[0] + "_" + Band.name + "." + os.path.basename(inpath).split(".")[1]
        # ジオデータベースの場合
        elif outWS_Type == u"LocalDatabase":
          outras = outWS + os.sep + os.path.basename(inpath).split(".")[0] + "_" + Band.name
        arcpy.CopyRaster_management(inras2,outras)

        arcpy.AddMessage("\n" + outras + u" の出力が完了しました。" + "\n")

del outWS,desc2,desc

こちらのサンプルはあくまでもコーディングの見本であり、ツール実行時に発生したエラーの対処方法につきましては、サポート対象外とさせていただきます。また、操作方法やソースコードに関するご質問は別途有償の開発者サポート契約にてご対応させていただきます。新規バージョンに対応したツールを継続的に提供することを保証するものでもないことも予めご承知おきください。なお、ツールを利用して生じたいかなる損害についても弊社では責任を負いかねます。

メタデータ

種類

製品

バージョン