ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • ヘルプ
  • Sign Out
ArcGIS Desktop

ArcGIS Online

組織のマッピング プラットフォーム

ArcGIS Desktop

完全なプロ仕様の GIS

ArcGIS Enterprise

エンタープライズ GIS

ArcGIS Developers

位置情報利用アプリの開発ツール

ArcGIS Solutions

各種業界向けの無料のテンプレート マップおよびテンプレート アプリケーション

ArcGIS Marketplace

組織で使えるアプリとデータを取得

  • ドキュメント
  • サポート
Esri
  • サイン イン
user
  • マイ プロフィール
  • サイン アウト

ArcMap

  • ホーム
  • はじめに
  • マップ
  • 解析
  • データ管理
  • ツール
  • エクステンション

Python ツールボックスのツール動作のカスタマイズ

  • ツール パラメーターへのアクセス
  • パラメーター オブジェクト

ツールの [OK] ボタンをクリックする前に、整合チェックを必ず実行します。独自のカスタム ツールを作成する場合、整合チェックによって、パラメーターの値に対する動作とパラメーター同士の動作をカスタマイズすることができます。整合チェックは、ツールの動作を制御するために使用される Python コードのブロックを使用して実行されます。

整合チェックの詳細については、「スクリプト ツールの整合チェックの概要」をご参照ください。

Python ツールボックスでは、個々のツール パラメーターは、ツールの整合チェックに便利なプロパティとメソッドを備えた Parameter オブジェクトと関連付けられています。Python ツールボックスでは、パラメーターの定義はツール クラスの getParameterInfo メソッドで行われます。これらのパラメーターの動作と、他のパラメーターや入力とやり取りを行う方法は、ツール クラスの updateParameters メソッドに従って整合チェックされます。

  • Python ツールボックスのスキーマの更新
  • Python ツールボックスのライセンスの動作

ツール パラメーターへのアクセス

Parameter オブジェクトは、パラメーターの定義方法と Python ツールボックスでのやり取りの方法に関する基礎を構成します。標準的な方法では、次のコードに示すように、ツール クラスの getParameterInfo メソッド内にパラメーターのリストを作成します。

def getParameterInfo(self):
    #Define parameter definitions
    # First parameter
    param0 = arcpy.Parameter(
        displayName="Input Features",
        name="in_features",
        datatype="GPFeatureLayer",
        parameterType="Required",
        direction="Input")
    return [param0]

Python ツールボックスのパラメーターを定義する詳細については、「Python ツールボックスのパラメーターの定義」をご参照ください。

パラメーター オブジェクト

メソッド

メソッド名使用法の説明

setErrorMessage(message:string)

パラメーターにエラー (赤の X 印) と該当するメッセージがあるとマークします。任意のパラメーターにエラーがある場合、ツールは実行できません。

setWarningMessage(message:string)

パラメーターに警告 (黄色の三角印) と該当するメッセージがあるとマークします。エラーと異なり、警告メッセージがある場合でもツールは実行します。

setIDMessage(messageType: string, messageID: string, {AddArgument1}, {AddArgument2})

システム メッセージを設定できます。引数は、AddIDMessage 関数と同じです。

clearMessage()

メッセージのテキストを消去し、ステータスを情報 (エラーまたは警告なし) に設定します。

hasError()

パラメーターにエラーがある場合に true を返します。

hasWarning()

パラメーターに警告がある場合に true を返します。

isInputValueDerived()

ツールがモデル内で整合チェック中で入力値がモデル内にある別のツールの出力である場合に、true を返します。

パラメーター オブジェクトのメソッド

プロパティ

プロパティ名読み取り/書き込み値説明

name

読み取り専用

String

パラメーター名。

direction

読み取り専用

文字列: "Input"、"Output"

パラメーターの入力または出力の方向。

datatype

読み取り専用

String

パラメーターのデータ タイプのリストについては、「Python ツールボックスにあるパラメーターのデータ タイプの定義」をご参照ください。

parameterType

読み取り専用

文字列: "Required"、"Optional"、"Derived"

パラメーター タイプ。

parameterDependencies

読み取り/書き込み

Python リスト

各従属パラメーターのインデックスのリスト。

value

読み取り/書き込み

Value オブジェクト

パラメーターの値。

defaultEnvironmentName

読み取り専用

String

デフォルトの環境設定。

enabled

読み取り/書き込み

Boolean

パラメーターが使用不可の場合は false。

altered

読み取り専用

Boolean

ユーザーが値を変更した場合は true。

hasBeenValidated

読み取り専用

Boolean

内部整合チェック ルーチンがパラメーターをチェック済みの場合は true。

category

読み取り/書き込み

String

パラメーターのカテゴリ。

schema

読み取り専用

Schema オブジェクト

出力データセットのスキーマ。

filter

読み取り専用

Filter オブジェクト

パラメーター内の値に適用するフィルター。

symbology

読み取り/書き込み

String

出力の描画に使用するレイヤー ファイル (*.lyr) のパス。

message

読み取り専用

String

ユーザーに表示するメッセージ。上記の SetErrorMessage および SetWarningMessage をご参照ください。

パラメーター オブジェクトのプロパティ

parameterDependencies

パラメーターの依存性は、通常、Schema オブジェクトで使用するために設定します。ツールの getParameterInfo メソッドで、依存性がすでに設定されている場合が 2 つあります。

  • タイプが Derived の出力データセット パラメーターの場合、依存性は出力の派生元となるパラメーターのインデックスです。
  • 特定の入力データ タイプの場合、次の表に示したように、依存性はコントロールが使用する情報を含むパラメーターのインデックスです。

入力データ タイプ従属データ タイプ説明

フィールドまたは SQL 文

テーブル

そのフィールドを持つテーブル。

INFO アイテムまたは INFO 条件式

INFO テーブル

そのアイテムを持つ INFO テーブル。

カバレッジ フィーチャクラス

カバレッジ

フィーチャを含むカバレッジ。

面積単位または距離単位

ジオデータセット

デフォルト単位を決定する地理データセット。

座標

ワークスペース

デフォルトの座標系を決定するワークスペース。

Network Analyst 階層の設定

ネットワーク データセット

階層情報を持つネットワーク データセット。

Geostatistical 値テーブル

Geostatistical レイヤー

テーブルを含む解析レイヤー。

取得元のデータ タイプ
メモ:

[parameterDependencies] は、スクリプト ツール ウィザードの [取得元] の設定に相当します。

通常、依存性は getParameterInfo メソッドで設定されます。

def getParameterInfo(self):
    #Define parameter definitions
    # First parameter
    param0 = arcpy.Parameter(
        displayName="Input Features",
        name="in_features",
        datatype="GPFeatureLayer",
        parameterType="Required",
        direction="Input")
    # Second parameter
    param1 = arcpy.Parameter(
        displayName="Sinuosity Field",
        name="sinuosity_field",
        datatype="Field",
        parameterType="Optional",
        direction="Input")
    param1.value = "sinuosity"
    # Third parameter
    param2 = arcpy.Parameter(
        displayName="Output Features",
        name="out_features",
        datatype="GPFeatureLayer",
        parameterType="Derived",
        direction="Output")
    param2.parameterDependencies = [param0.name]
    param2.schema.clone = True
    params = [param0, param1, param2]
    return params

value

これは、ユーザーが入力したか、プログラムで設定したパラメーターの値です。getParameterInfo メソッドで値を設定すると、パラメーターの初期のデフォルト値になります。また、以下に示すように、ユーザー入力に対応して updateParameters で値を設定することもできます。

def updateParameters(self, parameters):
    # Set the default distance threshold to 1/100 of the larger of the width
    #  or height of the extent of the input features.  Do not set if there is no 
    #  input dataset yet, or the user has set a specific distance (Altered is true).
    #
    if parameters[0].value:
        if not parameters[6].altered:
            extent = arcpy.Describe(parameters[0].value).extent
        if extent.width > extent.height:
            parameters[6].value = extent.width / 100
        else:
            parameters[6].value = extent.height / 100
    return

パラメーターの value プロパティはオブジェクトを返します。ただし、パラメーターが設定されていない場合、value は None を返します。パラメーターが設定されない場合を避けるには、その値を使用する前に if チェックを使用します。

次のコード部では、値が文字列「Get Spatial Weights From File」と等しいかどうかをテストしています。このテストが機能するのは、パラメーターのデータ タイプが文字列だからです。

# If the option to use a weights file is selected, enable the 
#   parameter for specifying the file, otherwise disable it
if parameters[3].value:  # check that parameter has a value
    if parameters[3].value == "Get Spatial Weights From File":
        parameters[8].enabled = True
    else:
        parameters[8].enabled = False

値オブジェクトは文字列の操作をサポートしていないため、文字列を操作または解析するときは、必ず値オブジェクトの値プロパティを使用します。次のサンプル コードは os.path.dirname メソッドを使用して、データセットからディレクトリを返しています。

if parameters[0].value:
    workspace = os.path.dirname(parameters[0].value.value)
メモ:

Describe を除き、整合チェックに ListFields などのカタログ パスを使用するメソッドは使用しないでください。ModelBuilder でツールが整合チェックされるときにデータセットが存在せず、メソッドが失敗したり、予期しない結果が返される可能性があります。

特定の ListFields の場合、Describe オブジェクトの fields プロパティは、それに相当する情報を提供します。

メモ:

値が内部整合チェック ルーチンで整合チェックされないため、パラメーター値を updateMessages() では設定しないでください。

altered

altered は、出力パスの入力など、パラメーターの値が変更された場合に true になります。パラメーターを変更すると、ユーザーが値を空白にするまで変更済みの状態となります。空白にすると、未変更に戻ります。整合チェック コードによって値をプログラムから変更すると、変更済みの状態に変わります。つまり、パラメーターの値を設定すると、パラメーターの変更済み状態が更新されます。

altered は、パラメーターの値を変更できるかどうかを判別するために使用されます。たとえば、ツールにフィーチャクラスのパラメーターとキーワードのパラメーターがあるとします。フィーチャクラスにポイントまたはポリゴンが含まれる場合、キーワードは RED、GREEN、BLUE になり、ラインが含まれる場合、キーワードは ORANGE、YELLOW、PURPLE、WHITE になります。

ユーザーがポイント フィーチャクラスを入力したとします。キーワードのパラメーターが変更されていない場合、値をデフォルト値の RED を設定します。

ライン フィーチャクラスが入力された場合、キーワードのパラメーターが変更されていない限り、デフォルト値を ORANGE に設定します。

しかし、キーワードのパラメーターがユーザーによって変更された場合 (キーワードが GREEN に設定された場合)、キーワードを再設定してはなりません。ユーザーは GREEN を選択しましたが、その意図がわからないからです。ユーザーは、GREEN が有効になるようにフィーチャクラスを変更するかもしれませんし、キーワードを (PURPLE などに) 変更するかもしれません。GREEN は、ライン用に作成したキーワード群のメンバーではないため、内部整合チェックは、このパラメーターにエラーのフラグを付けます。この時点で、ユーザーには、入力フィーチャクラスを変更するかキーワードを変更するかの 2 つの選択肢があります。

if not parameters[2].altered:
    parameters[2].value = "POINT"

hasBeenValidated

hasBeenValidated は、updateParameters と内部整合チェックが最後に呼び出されてから、ユーザーがパラメーターの値を変更した場合に、false になります。内部整合チェックが呼び出されると、ジオプロセシングはすべてのパラメーターについて hasBeenValidated を true に自動的に設定します。

hasBeenValidated は、updateParameters を最後に呼び出してから、ユーザーが値を変更したかどうかを判別するために使用されます。この情報は、パラメーターを独自にチェックするかどうかを決定する際に利用できます。

def updateParameters(self, parameters):
    # Set the default distance threshold to 1/100 of the larger of the width
    #  or height of the extent of the input features.  Do not set if there is no 
    #  input dataset yet, or the user has set a specific distance (Altered is true).
    #
    if parameters[0].value:
        if not parameters[6].altered:
            extent = arcpy.Describe(parameters[0].value).extent
        if extent.width > extent.height:
            parameters[6].value = extent.width / 100
        else:
            parameters[6].value = extent.height / 100
    return

関連トピック

  • Python ツールボックスのスキーマの更新
  • Python ツールボックスでのパラメーターの定義
  • Python ツールボックスとは
  • スクリプト ツールのパラメーターの理解
  • スクリプト ツールの整合チェックについて

ArcGIS Desktop

  • ホーム
  • ドキュメント
  • サポート

ArcGIS

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS
  • ArcGIS Developer
  • ArcGIS Solutions
  • ArcGIS Marketplace

Esri について

  • 会社概要
  • 採用情報
  • Esri ブログ
  • ユーザ カンファレンス
  • デベロッパ サミット
Esri
ご意見・ご感想をお寄せください。
Copyright © 2021 Esri. | プライバシー | リーガル