PythonスクリプティングでModelBuilderを使用する場合、またはその逆の場合


71

私はArcGISでPythonスクリプトを書くのは初めてですが、ModelBuilderを使うのは初めてではありません。

PythonとModelBuilderの利点を知りたいです。

ModelBuilderを使用するのではなく、GISオートメーション用のPythonスクリプトを作成する必要があるのはいつですか?

ModelBuilderにはないPythonの自動化機能とは何ですか?

回答:


82

ユーザーは、使用するツールのセットを決定する前に、目的を明確に定義する必要があると思います。ModelBuilderとPythonスクリプトは異なるタスクに優れています。いくつかの考え:

  1. ModelBuilderにはマッピング機能がありませんが、 arcpy.mappingにはあります。
  2. Pythonは、マルチプロセッシングパッケージ並列処理などのワークフローを最適化するために使用できます 。
  3. Pythonでは、ネストされたループやその他の便利な反復ロジックツールを使用できます。ModelBuilderで同様の結果を実現するには、複雑で複雑なネストされたモデルを構築する必要があります。
  4. 単純なテキスト操作はPythonでは非常に簡単で、ModelBuilderでは非常に難しいか不可能です。

    たとえば、ファイル名のリストの名前を「m_2010_naip_2310345_nw.img」から「2310345nw.img」に変更するには、os.pathモジュールを使用してPythonで簡単に実行できます。

一方:

  1. ModelBuilderは、一般的なツールをすばやくまとめ、スクリプトをデバッグする必要をなくすのに非常に役立ちます。

  2. ModelBuilderには、フォルダとサブフォルダをループするために簡単に実装できる非常に便利な再帰イテレータがあります。

  3. ModelBuilderは、複雑なタスクのワークフローを視覚的かつ直感的に描写するのに優れています 。

  4. ModelBuilderには、Python スクリプトツールを組み込むことができます


5
ArcGISのPythonとModel Builderの違いを明確に説明しました。ありがとう
-BBG_GIS

24
また、追加します。1. ArcMapの外でPythonスクリプトを実行できます。2. PythonでArcObjectsを使用できます。3.速度に多少の違いがある場合があります。
トメック


3
+1 NESTED LOOPS&arcpy.mapping!スクリプト内で計算を行い、それらを属性テーブルに追加するか、マップレイアウト(たとえば、各湿地タイプのエリア)に追加する機能が気に入っています。
ロイ

2
ArcGISブック用のPythonスクリプトを読みました。さらにいくつかの機能を追加します。1-スクリプトカーソルを使用すると、テーブル内のレコードをループして、既存の行を読み取り、新しい行を挿入できます。2-スクリプトを使用して、他のソフトウェアをラップすることができます。つまり、アプリケーションを結合します。たとえば、PythonはMicrosoft Excelまたは統計パッケージRの関数にアクセスするために使用できます。3-ArcGISの外部のディスク上でスタンドアロンスクリプトとしてスクリプトを実行できます。作業。(ArcGISのPythonスクリプト、第2章、39ページ)
BBG_GIS

24

ArcGISの範囲内でのみ作業している場合、採用するアプローチを決定する際に考慮すべき考慮事項がいくつかあります。

  • 何を達成しようとしていますか、
  • 現在のスキルセットは何ですか?
  • 自分の作品を他の人と共有して、使用、学習、または操作しますか?
  • 対象読者は誰ですか。

これらの考慮事項を考えると:

  1. プロセスの一部をModelBuilderで複製できない場合を除き、PythonよりもModelBuilderでプロセスを構築する方が、多くの場合より迅速かつ簡単です。
  2. Pythonを知らず、学習する意図がない場合、ModelBuilderは素晴らしいオプションです。
  3. Pythonがわからず、スキルセットに組み込むことを学びたい場合、ModelBuilderは単純なモデルを作成し、それらをPythonにエクスポートすることから始めて、最終プロセスのスケルトンを事前に構築するのに最適な方法です。通常、変換プロセス中に作成される多くの無関係な情報と変数があるため、この方法にはコストがかかりますが、それでも学習を開始するのに最適な方法です。
  4. 個人用のツールを構築する場合、最も快適だと思う方法を使用するのが一般的です。私は必要に応じて両方を個人的に使用します。
  5. 分析を他の人と共有することを計画しており、モデル/スクリプトを他の人とプロセス文書の一部として共有したい場合、一般的にモデルは技術に詳しくない人にとっても理解しやすいです。

個人的な使用には「どちらが良い」という答えはおそらくないでしょうが、雇用の可能性を長期的に見ているなら、Pythonを学ぶことで、事前にプログラムされたツールの使い方だけを知っている人とは一線を画すでしょう。 ModelBuilderの使用方法を知っているだけです。また、Python for ArcGIS(ArcPy)の範囲を超えて、他の独自のオープンソースGISライブラリ、および多くの非GISライブラリ(データベースなど)を使用して、はるかに多くのタスクとプロジェクトの自動化を開始することもできます。 、画像操作、統計など)。


20

モデルビルダーは、優れた学習しやすいビジュアルプログラミング言語であり、一般的なGISプログラミングへの入り口です。しかし、いくつかの点でpythonはもっと多くのことができます。

1つの例は、非ESRI GISライブラリの統合です。ほぼすべてのオープンソースGISも同様にpythonでアドレス指定できます(例:GRASSSextanteQGISSAGA)。ArcViewライセンスしか持っていないので、これは非常に役立ちました。そのため、ArcGISで特定のジオプロセシングツールを使用できないたびに、オープンソースGISで利用可能な他のオプションを探します。次に、これらのOpenSourceツールを使用して、ArcGISツールと組み合わせて、より大きなPythonスクリプトを使用するか、より小さなPythonスクリプトを介してModelBuilderに統合します。

他のメンバーがより多くの利点を挙げられると確信しています。


9

PythonとArcGISを使用する場合、ArcGISに既にあるものに加えて、Pythonの機能全体を利用できます。この種のパワーと柔軟性が必要かどうかは、希望に依存します。さらに、Pythonなどのプログラミング言語を理解し、実際に活用するには時間がかかります。この投資があなたにとって価値があるかどうかはあなた次第です。ただし、本格的なデータ処理の場合は、実際のスクリプト言語を武器に追加することをお勧めします。

ModelBuilderが見逃す可能性のある機能とは別に、より基本的な議論もあります。一般的に、スクリプトは複雑なワークフローを作成するのにはるかに適しています。コードは上から下に処理され、複雑なタスクは、関数などを使用してより小さなサブタスクに細分化できます。またはオブジェクト。モデルビルダーなどのグラフィカルツールは、大きなスパゲッティになる傾向があります。


7

私はPythonスクリプトを作成するのが部分的です。少なくとも私にとっては、線をボックスなどに接続することをいじるよりも、コードを書く方が楽しいです。

Pythonスクリプトの優れている点は、自分の都合の良いときにスクリプトを実行するようにスケジュールできることです。完了までに時間がかかるスクリプトがある場合、または通常の営業時間外に実行する必要があるスクリプトがある場合、これは非常に便利です。ここで、スクリプトのスケジュール方法の例を見ることができます

@Aaronが言及しているように、Pythonスクリプトで簡単にループを設定できます。

Pythonスクリプトを使用して設定する場合は、モデルビルダーでモデルを作成し、Pythonスクリプトとしてエクスポートすることをお勧めします。スクリプトでいくつかのツールを使用する方法を理解するのに問題がある場合、私は時々これを行います。スクリプトをまとめる方法を理解するのに役立ちます。


5

私は、Pythonスクリプトよりもモデルビルダーの方が解決策がないことにこだわっているようです。モデルビルダーのやや「ブラックボックス」の性質により、問題の場所を見つけるのが難しくなります。

また、Pythonでさらに多くのヘルプを見つけることができることもわかりました。私は多くの行き止まりのスレッドとモデルビルダーに関するトピックを見つける傾向があります。通過する例も少ないので、Pythonの場合と同様に、記述しているスクリプトのほとんどの部分の小さなスニペットを見つけることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.