การวนชื่อไฟล์เอาต์พุตคลาสคุณลักษณะโดยใช้ ModelBuilder?


11

ฉันพยายามย้ำชุดคุณลักษณะคลาส (รูปหลายเหลี่ยม) ในตัวสร้างแบบจำลองเพื่อแปลงชุดรูปหลายเหลี่ยมเป็น rasters อย่างไรก็ตามฉันประสบปัญหากับชื่อไฟล์เอาต์พุต

หลังจากแทรกเครื่องมือ "iterate feature class" ลงในหน้าต่างตัวสร้างแบบจำลองและการเชื่อมโยง gdb ของฉันที่เก็บรูปหลายเหลี่ยมทั้งหมดเป็นอินพุตคุณสมบัติเอาท์พุท (ฟองสีเขียว) จะกลายเป็นชื่อของรูปหลายเหลี่ยมแรกของฉันโดยอัตโนมัติ ดังนั้นรูปแบบที่ฉันพยายามเรียกใช้ดูเหมือนว่าจะเกิดขึ้นอีกครั้งกับรูปหลายเหลี่ยมที่มีชื่อแทนที่จะเป็นรูปหลายเหลี่ยมถัดไปในรายการ rasters เอาต์พุตถูกสร้างขึ้น แต่เขียนทับชื่อไฟล์นั้นแทนที่จะสร้างแรสเตอร์ใหม่ด้วยชื่อใหม่ที่ตรงกับรูปหลายเหลี่ยมที่ตามมา

ผมทำอะไรผิดหรือเปล่า?

คำตอบ:


10

นี่คือรูปแบบมันใช้การทดแทนแบบอินไลน์ตามที่อธิบายโดยแอรอน หมายเหตุ: การส่งออกของรูปหลายเหลี่ยมเครื่องมือแรสเตอร์คือ .. \ fGBD_Scratch.gdb \ ras_ % มูลค่า% ค่ามาจากตัววนซ้ำซึ่งในกรณีนี้ถูกตั้งค่าเป็น FID เพื่อแจกแจงแถวที่ไม่ซ้ำกัน ดังนั้นชุดข้อมูลแรสเตอร์ชุดแรกจะเป็น ras_1 จากนั้นเป็น ras_2 เป็นต้น

แบบ


คุณเพียงแค่เพิ่ม "%" ที่ด้านใดด้านหนึ่งของชื่อที่ใส่ลงในผลลัพธ์ เช่น% name% _clip?
macdonaw

ใช่ดังนั้นในตัวอย่าง 'ชื่อ' ของคุณจะเป็นตัวแปรในโมเดลของคุณซึ่งโดยทั่วไปจะเป็นบางสิ่งจากตัววนซ้ำ
Hornbydd

1
ใช่ แต่ชื่อของคุณไม่ควรเริ่มต้นด้วยเครื่องหมาย% ... ใช้มันในลำดับย้อนกลับเช่น clip_% ชื่อ%
maycca

10

มีหลายวิธีในการจัดการกับการตั้งชื่อในตัวสร้างแบบจำลอง ArcGIS มีส่วนช่วยเหลือเกี่ยวกับเรื่องนี้: ทัวร์อย่างรวดเร็วของการใช้แทนค่าตัวแปรแบบอินไลน์

วิธีหนึ่งที่รวดเร็วในการสร้างชื่อที่ไม่ซ้ำจากตัววนซ้ำอย่างรวดเร็วคือการเรียก%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 คืออะไร


ลูปซ้อนในตัวสร้างแบบจำลองมีความทุกข์ยาก หลีกเลี่ยงถ้าเป็นไปได้
Mox
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.