Iterasi nama file keluaran kelas fitur menggunakan ModelBuilder?

11

Saya mencoba untuk mengulangi serangkaian kelas fitur (poligon) dalam pembangun model untuk mengubah serangkaian poligon menjadi raster, namun, saya mengalami masalah dengan nama file keluaran.

Setelah memasukkan alat "iterate feature class" ke jendela model builder, dan menghubungkan gdb saya menyimpan semua poligon sebagai input, fitur output (gelembung hijau) secara otomatis menjadi nama poligon pertama saya. Akibatnya model yang saya coba jalankan tampaknya berulang ke poligon bernama daripada pergi ke poligon berikutnya dalam daftar. Output raster dibuat, tetapi menimpa nama file itu daripada menghasilkan raster baru dengan nama baru yang cocok dengan poligon berikutnya.

Apa yang saya lakukan salah?

macdonaw
sumber

Jawaban:

10

Berikut adalah modelnya, ia menggunakan substitusi sebaris seperti yang dijelaskan oleh Aaron. Perhatikan output dari alat Polygon to raster adalah .. \ fGBD_Scratch.gdb \ ras_ % Value% . Nilai berasal dari iterator yang dalam hal ini disetel ke FID untuk membagikan baris unik. Jadi dataset raster pertama adalah ras_1, lalu ras_2, dll.

Model

Hornbydd
sumber
Apakah Anda cukup menambahkan "%" di kedua sisi nama yang dimasukkan dalam output? misalnya% name% _clip?
macdonaw
Ya, jadi dalam contoh Anda 'nama' adalah variabel dalam model Anda, biasanya sesuatu dari iterator.
Hornbydd
1
Ya, tetapi nama Anda tidak boleh dimulai dengan tanda% ... gunakan dalam urutan terbalik, yaitu clip_% Nama%
maycca
10

Ada beberapa cara untuk menangani penamaan dalam model builder. ArcGIS memiliki bagian bantuan tentang ini: Tur singkat menggunakan substitusi variabel sebaris .

Salah satu cara cepat untuk membuat nama unik dari iterator adalah dengan memanggil variabel sistem %i%atau %n%, yang menampilkan file dalam bentuk berikut: file1, file2, file3, file4 ... %i%Variabel sistem mereferensikan posisi daftar saat ini, sedangkan %n%variabel sistem referensi iterasi model saat ini. Anda akan mempraktikkannya dalam parameter output alat yang Anda gunakan. Sebagai contoh:

Kelas Fitur Keluaran

C:\temp\out%i%.shp
Harun
sumber
1

Sepertinya Anda ingin melakukan beberapa loop bersarang, satu untuk kelas fitur di ruang kerja, dan satu untuk fitur di setiap kelas fitur. Ini menyakitkan (tetapi mungkin ) dilakukan dengan ModelBuilder.

Jika Anda ingin tangan Anda kotor dengan Python (yang saya sarankan untuk hal-hal seperti ini), berikut adalah contoh untuk membantu Anda memulai:

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)

Belum teruji, tapi mudah-mudahan Anda mendapatkan idenya. IMO, skrip Python jauh lebih mudah untuk dikerjakan daripada model ModelBuilder untuk semua kecuali tugas yang paling sepele.

Untuk sumber belajar Python / ArcPy, tidak terlihat lagi dari pertanyaan ini: Apa sajakah sumber daya untuk mempelajari ArcPy?

blah238
sumber
Loop bersarang di pembangun model adalah kesengsaraan. Hindari jika memungkinkan.
Mox