ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • 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 ツールボックスとは

  • Python ツールボックスの作成
  • Python ツールボックスの例

Python ツールボックス Python ツールボックス は、すべて Python で作成されたジオプロセシング ツールボックスです。Python ツールボックスとツールボックスに含まれるツールの外観および動作は、別の方法で作成されたツールボックスやツールと同様です。Python ツールボックス (*.pyt) は、ツールボックスと 1 つ以上のツールを定義するシンプルな ASCII ベースのファイルです。

Python ツールボックスを作成すると、そのツールボックス内のツールによって多くの利点がもたらされます。

  • Python ツールボックスを作成すると、Python に関する知識を活用して、フル機能のジオプロセシング ツールのプロトタイプを迅速に作成し、フル機能のジオプロセシング ツールを構築することができます。
  • 作成したツールはシステム ツール同様、ジオプロセシングに重要なツールです。検索ウィンドウまたはカタログ ウィンドウから開くことが可能で、ModelBuilder および Python ウィンドウで使用したり、スクリプトから呼び出したりすることができます。
  • [結果] ウィンドウおよび進捗ダイアログ ボックスに、メッセージを書き込むことができます。
  • 組み込みのドキュメント化ツールを使用して、ドキュメント化を行うことができます。
  • スクリプトをスクリプト ツールとして実行する場合、arcpy は呼び出し元のアプリケーション (ArcMap など) を完全に認識します。アプリケーションで行った設定 (arcpy.env.overwriteOutput、arcpy.env.scratchWorkspace など) は、スクリプト ツールの ArcPy から利用することができます。

Python ツールボックスの作成

Python ツールボックスを作成するには、新しいツールボックスを作成するフォルダーを右クリックし、[新規作成] > [Python ツールボックス] の順にクリックします。

最初、Python ツールボックスには、ツールボックスの特性を定義する Toolbox という名前の Python クラスと、雛形となるジオプロセシング ツールを提供する Tool という名前のもう 1 つの Python クラスが含まれます。

はじめに

はじめに

新しい Python ツールボックスの作成

Python ツールボックスの編集

ツールの定義

ツールの定義

ツールのパラメーターの定義

Python ツールボックスでのパラメーターの定義

Python ツールボックスのパラメーター データ タイプの定義

ツールの動作のカスタマイズ

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

Python ツールボックスのスキーマの更新

Python ツールボックスのライセンスに関連する動作の制御

ツールの「ソース コード」の記述

Python ツールボックス内でのパラメーターへのアクセス

Python ツールボックスでのメッセージの書き込み

ツールのドキュメント化

Python ツールボックスのツールのドキュメント化

Python ツールボックスの例

以下は、ツールを 1 つだけ含む Python ツールボックスの例です。CalculateSinuosity という名前のツールは、フィールドを追加して、フィーチャの湾曲 (ラインの曲率の測定値) を計算します。

注意:

このツールを使用するには、サンプル コードをコピーしてメモ帳などのエディターに貼り付け、「.pyt」の拡張子を付けてファイルを保存します。

import arcpy

class Toolbox(object):
    def __init__(self):
        self.label =  "Sinuosity toolbox"
        self.alias  = "sinuosity"

        # List of tool classes associated with this toolbox
        self.tools = [CalculateSinuosity] 

class CalculateSinuosity(object):
    def __init__(self):
        self.label       = "Calculate Sinuosity"
        self.description = "Sinuosity measures the amount that a river " + \
                           "meanders within its valley, calculated by " + \
                           "dividing total stream length by valley length."

    def getParameterInfo(self):
        #Define parameter definitions

        # Input Features parameter
        in_features = arcpy.Parameter(
            displayName="Input Features",
            name="in_features",
            datatype="GPFeatureLayer",
            parameterType="Required",
            direction="Input")
        
        in_features.filter.list = ["Polyline"]

        # Sinuosity Field parameter
        sinuosity_field = arcpy.Parameter(
            displayName="Sinuosity Field",
            name="sinuosity_field",
            datatype="Field",
            parameterType="Optional",
            direction="Input")
        
        sinuosity_field.value = "sinuosity"
        
        # Derived Output Features parameter
        out_features = arcpy.Parameter(
            displayName="Output Features",
            name="out_features",
            datatype="GPFeatureLayer",
            parameterType="Derived",
            direction="Output")
        
        out_features.parameterDependencies = [in_features.name]
        out_features.schema.clone = True

        parameters = [in_features, sinuosity_field, out_features]
        
        return parameters

    def isLicensed(self): #optional
        return True

    def updateParameters(self, parameters): #optional
        if parameters[0].altered:
            parameters[1].value = arcpy.ValidateFieldName(parameters[1].value,
                                                          parameters[0].value)
        return

    def updateMessages(self, parameters): #optional
        return

    def execute(self, parameters, messages):
        inFeatures  = parameters[0].valueAsText
        fieldName   = parameters[1].valueAsText
        
        if fieldName in ["#", "", None]:
            fieldName = "sinuosity"

        arcpy.AddField_management(inFeatures, fieldName, 'DOUBLE')

        expression = '''
import math
def getSinuosity(shape):
    length = shape.length
    d = math.sqrt((shape.firstPoint.X - shape.lastPoint.X) ** 2 +
                  (shape.firstPoint.Y - shape.lastPoint.Y) ** 2)
    return d/length
'''

        arcpy.CalculateField_management(inFeatures,
                                        fieldName,
                                        'getSinuosity(!shape!)',
                                        'PYTHON_9.3',
                                        expression)

関連トピック

  • Python を使用したツールの作成の概要
  • カスタム ツールボックスと Python ツールボックスの比較

ArcGIS Desktop

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

ArcGIS プラットフォーム

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

Esri について

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