ModelBuilderを使用してフィーチャクラスの出力ファイル名を繰り返しますか?


11

モデルビルダーで一連のフィーチャクラス(ポリゴン)を反復処理して一連のポリゴンをラスターに変換しようとしていますが、出力ファイル名に問題があります。

モデルビルダーウィンドウに「フィーチャクラスの反復」ツールを挿入し、すべてのポリゴンを入力として格納するgdbをリンクすると、出力フィーチャ(緑色のバブル)が自動的に最初のポリゴンの名前になります。結果として、私が実行しようとするモデルは、リスト内の次のポリゴンに行くのではなく、その名前のポリゴンに再帰するようです。出力ラスターは作成されますが、後続のポリゴンと一致する新しい名前で新しいラスターを生成するのではなく、そのファイル名を上書きします。

私は何を間違えていますか?

回答:


10

モデルは次のとおりです。Aaronが説明したように、インライン置換を使用します。Polygon to rasterツールの出力は.. \ fGBD_Scratch.gdb \ ras_ %Value%であることに注意してください。この場合、一意の行を渡すためにFIDに設定された反復子から値が取得されます。したがって、最初のラスターデータセットはras_1、ras_2などとなります。

モデル


出力に挿入された名前の両側に単に「%」を追加しますか?たとえば、%name%_clip?
マクドナウ

はい、あなたの例では、「名前」はモデルの変数であり、通常はイテレータからのものです。
ホーンバイド

1
はい。ただし、名前は%記号で始まってはなりません。逆の順序で使用してください。つまり、clip_%Name%
maycca

10

モデルビルダーで名前付けを処理する方法はいくつかあります。ArcGISには、これに関するヘルプセクションがあります。インライン変数置換の使用のクイックツアー

すぐにイテレータからユニークな名前を作成する1つの滑らかな道を呼び出すことである%i%か、%n%システム変数、出力次の形式でのファイル:FILE1、FILE2、FILE3、FILE4 ... %i%、システム変数の参照、現在のリスト位置を同時に%n%システム変数現在のモデルの反復を参照します。これは、使用しているツールの出力パラメーターで実行します。例えば:

出力フィーチャクラス

C:\temp\out%i%.shp

1

ワークスペース内のフィーチャクラス用と、各フィーチャクラス内のフィーチャ用に、いくつかのネストされたループを実行したいようです。これは、ModelBuilderで行うのは苦痛です(可能です

Pythonで手を汚したい場合(このようなものには絶対お勧めします)、以下に例を示します。

import arcpy, os

# Your source file geodatabase
input_workspace = r"c:\GISData\input.gdb"

# Your output raster folder
output_workspace = r"c:\GISData\rasters"

# The file extension for the output rasters -- when not saving to a geodatabase, specify .tif for a TIFF file format, .img for an ERDAS IMAGINE file format, or no extension for a GRID raster format.
output_ext = ".img"

# The field used to assign values to the output raster -- hopefully this is the same for all of your feature classes
value_field = "VALUE"

# Note: Instead of hardcoding the above values, you could also use arcpy.GetParameterAsText to allow the user to specify them via script tool parameters

# Set current workspace to the source file geodatabase
arcpy.env.workspace = input_workspace

# Loop over the feature classes
for fc in arcpy.ListFeatureClasses():

  # Get the name of the ObjectID field so we can use it to name the output rasters
  oid_field = arcpy.Describe(fc).OIDFieldName

  # Loop over the features in the current feature class
  for row in arcpy.SearchCursor(fc):

    # Figure out what to name the output raster. In this case we should get something like "c:\GISData\rasters\myFeatureClass_1.img"
    out_raster = os.path.join(output_workspace, "{0}_{1}{2}".format(os.path.basename(fc), row.getValue(oid_field), output_ext))

    # Convert to raster
    arcpy.PolygonToRaster_conversion(row, value_field, out_raster)

テストされていませんが、うまくいけばアイデアが得られます。IMO、Pythonスクリプトは、最も簡単なタスクを除き、ModelBuilderモデルよりもはるかに簡単に作業できます。

Python / ArcPyの学習リソースについては、次の質問をご覧ください。ArcPyを学習するためのリソースは何ですか?


モデルビルダーのネストされたループは悲惨です。可能な限り避けてください。
モックス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.