ModelBuilder kullanarak özellik sınıfı çıktı dosya adlarını yineleme?


11

Ben bir çokgenler serers dönüştürmek için model oluşturucu özellik sınıfları (çokgenler) bir dizi yinelemeye çalışıyorum, ancak, çıktı dosya adları ile ilgili bir sorun yaşıyorum.

"İterate feature class" aracını model oluşturucu penceresine yerleştirdikten ve gdb'imi tüm çokgenleri girdi olarak bağladıktan sonra, çıktı özelliği (yeşil kabarcık) otomatik olarak ilk çokgenin adı olur. Sonuç olarak çalıştırmaya çalıştığım model, listedeki bir sonraki çokgene gitmek yerine o adı verilen çokgene tekrarlıyor gibi görünüyor. Çıktı rasterleri oluşturulur, ancak sonraki çokgenlerle eşleşen yeni bir adla yeni bir raster oluşturmak yerine bu dosya adının üzerine yazar.

Neyi yanlış yapıyorum?

Yanıtlar:


10

İşte model, Aaron tarafından tarif edildiği gibi satır içi ikame kullanıyor. Rastere Çokgen aracının çıktısının .. \ fGBD_Scratch.gdb \ ras_ % Değer% olduğuna dikkat edin . Değer, bu durumda benzersiz satırları dağıtmak için FID olarak ayarlanmış yineleyiciden geliyor. Böylece ilk tarama veri kümesi ras_1, sonra ras_2 vb.

model


Çıktıya eklenen ismin her iki tarafına da "%" ekler misiniz? örneğin% name% _clip?
macdonaw

Evet, bu nedenle 'isim' örneğinizde modelinizde bir değişken, tipik olarak bir yineleyiciden bir şey var.
Hornbydd

1
Evet, ancak adınız% işaretiyle başlamamalıdır ... ters sırayla kullanın, yani clip_% Ad%
maycca

10

Model oluşturucuda adlandırma ile başa çıkmanın birkaç yolu vardır. ArcGIS'in bu konuda bir yardım bölümü vardır: Satır içi değişken ikamesi kullanma konusunda hızlı bir tur .

Bir yineleyiciden hızlı bir şekilde benzersiz adlar oluşturmanın kaygan bir yolu , dosyaları şu biçimde veren %i%veya %n%sistem değişkenlerini çağırmaktır : dosya1, dosya2, dosya3, dosya4 ... %i%Sistem değişkeni geçerli liste konumuna başvururken %n%sistem değişkeni geçerli model yinelemesini belirtir. Bunu, kullandığınız bir aracın çıktı parametresinde uygulamaya koyacaksınız. Örneğin:

Çıktı Özellik Sınıfı

C:\temp\out%i%.shp

1

Biri bir çalışma alanındaki özellik sınıfları için ve diğeri her özellik sınıfındaki özellikler için olmak üzere birkaç iç içe döngü yapmak istediğiniz gibi geliyor. Bu, ModelBuilder ile yapmak acı verici (ancak mümkün ).

Python ile ellerinizi kirletmek istiyorsanız (ki kesinlikle böyle şeyler için tavsiye ederim), başlamanıza bir örnek:

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)

Test edilmedi, ama umarım fikir alırsınız. IMO, Python betikleriyle çalışmak, en önemsiz görevler dışındaki tüm modellerde ModelBuilder modellerine göre çok daha kolaydır.

Python / ArcPy öğrenme kaynakları için şu sorudan başka bir yere bakmayın: ArcPy'yi öğrenmek için bazı kaynaklar nelerdir?


Model oluşturucudaki iç içe döngüler sefalettir. Mümkünse kaçının.
Mox
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.