ArcGIS Desktop

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

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

ArcGIS Online

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

ArcGIS Desktop

完全なプロ仕様の GIS

ArcGIS Enterprise

エンタープライズ GIS

ArcGIS for 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 を返します。

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

プロパティ

プロパティ名Read/Write値説明

name

Read-only

文字列

パラメーター名。

direction

Read-only

文字列:"Input"、"Output"

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

datatype

Read-only

文字列

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

parameterType

Read-only

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

パラメーター タイプ。

parameterDependencies

Read/write

Python リスト

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

value

Read/write

Value オブジェクト

パラメーターの値。

defaultEnvironmentName

Read-only

文字列

デフォルトの環境設定。

enabled

Read/write

ブール演算

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

altered

Read-only

ブール演算

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

hasBeenValidated

Read-only

ブール演算

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

category

Read/write

文字列

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

schema

Read-only

Schema オブジェクト

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

filter

Read-only

Filter オブジェクト

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

symbology

Read/write

文字列

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

message

Read-only

文字列

ユーザーに表示するメッセージ。上記の 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)
注意:

With the exception of Describe, don't use methods that take a catalog path, such as ListFields, in validation. The dataset may not exist when your tool is validated in ModelBuilder, and the method may fail or give unexpected results.

In the specific case of ListFields, the Describe object's fields property will provide the equivalent information.

注意:

Don't set a parameter value in updateMessages() since the value will not be validated by the internal validation routine.

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 for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

Esri について

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