ฉันพยายามที่จะเข้าใจการสร้างกระบวนการทางภูมิศาสตร์ด้วย ModelBuilder แต่ฉันไม่รู้ว่าทำไมการใช้เลเยอร์คุณลักษณะแทนการเรียนคุณลักษณะเมื่อสร้างกระบวนการทางภูมิศาสตร์ด้วย ModelBuilder ใครช่วยอธิบายหน่อยได้ไหม
ฉันพยายามที่จะเข้าใจการสร้างกระบวนการทางภูมิศาสตร์ด้วย ModelBuilder แต่ฉันไม่รู้ว่าทำไมการใช้เลเยอร์คุณลักษณะแทนการเรียนคุณลักษณะเมื่อสร้างกระบวนการทางภูมิศาสตร์ด้วย ModelBuilder ใครช่วยอธิบายหน่อยได้ไหม
คำตอบ:
ตัวแบบอาจมีชั้นเอาท์พุทกระบวนการย่อยมากมายขึ้นอยู่กับขนาดและความซับซ้อน เพื่อกำจัดไฟล์ที่เขียนลงบนฮาร์ดดิสก์ของคุณเครื่องมือบางอย่างทำให้คุณใช้คุณสมบัติเลเยอร์ (เช่นการเลือกคุณลักษณะซ้ำหรือเลือกตามคุณสมบัติ ) เลเยอร์คุณลักษณะเป็นแบบชั่วคราวและจะไม่คงอยู่หลังจากแบบจำลองของคุณสิ้นสุดลง
ดูที่การสร้างเลเยอร์คุณลักษณะ
มีเหตุผลสองประการที่คุณต้องการอ้างอิงคุณลักษณะเลเยอร์ใน ModelBuilder ซึ่งตรงข้ามกับคุณลักษณะคลาส ก่อนอื่นจะช่วยให้เข้าใจความแตกต่าง
ต่อไปนี้เป็นเหตุผลบางประการที่คุณต้องการใช้เครื่องมือ "ทำให้คุณสมบัติของเลเยอร์" เป็นสิ่งที่เกิดขึ้นจากข้อมูลดิบและเครื่องมือประมวลผลทางภูมิศาสตร์อื่น ๆ
หากคุณต้องการเรียกใช้แบบจำลองจาก ArcCatalog หรือส่งออกแบบจำลองของคุณไปยังสคริปต์ Python ที่สามารถเรียกใช้นอก ArcGIS คุณต้องใช้ "เลเยอร์คุณสมบัติ" เพื่อให้แปลงแหล่งข้อมูลดิบของคุณเป็น "เลเยอร์" สิ่งนี้จะคล้ายคลึงกับ "การเพิ่มข้อมูล" ในเซสชัน ArcMap ของคุณ
การใช้เลเยอร์ทำให้ง่ายต่อการเซ็ตย่อยข้อมูลของคุณเมื่อคุณดำเนินการตามกระบวนการ ModelBuilder สมมติว่าคุณต้องการประมวลผลข้อมูลทั้งหมดด้วยแอตทริบิวต์ "A" ด้วยวิธีหนึ่ง แต่ข้อมูลทั้งหมดที่มีแอตทริบิวต์ "B" ด้วยวิธีอื่น คุณสามารถอ้างอิงข้อมูลดิบของคุณหนึ่งครั้งจากนั้นแยกข้อมูลออกเป็นสอง "กิ่ง" โดยใช้คุณลักษณะเลเยอร์และประมวลผลแต่ละชุดอย่างอิสระ แต่มีผลต่อ / อัปเดตชุดข้อมูลแหล่งเดียว
การรวมเลเยอร์ชั่วคราวไว้ในแบบจำลองของคุณจะลดเวลาในการประมวล จากมุมมองการประมวลผลมันมีประสิทธิภาพมากขึ้นในการเขียนไปยังหน่วยความจำเมื่อเทียบกับการเขียนลงดิสก์ ในทำนองเดียวกันคุณสามารถเขียนข้อมูลชั่วคราวไปยังพื้นที่ทำงาน in_memoryซึ่งมีประสิทธิภาพในการคำนวณมากกว่า
การทำงานหลายอย่างใน ArcGIS ต้องการเลเยอร์ชั่วคราวเป็นอินพุต ตัวอย่างเช่นเลือกเลเยอร์ตามตำแหน่ง (การจัดการข้อมูล)เป็นเครื่องมือที่ทรงพลังและมีประโยชน์มากที่ช่วยให้คุณเลือกคุณลักษณะของเลเยอร์ที่แบ่งปันความสัมพันธ์เชิงพื้นที่กับคุณสมบัติการเลือกอื่น คุณสามารถระบุความสัมพันธ์ที่ซับซ้อนเช่น "HAVE_THEIR_CENTER_IN" หรือ "BOUNDARY_TOUCHES" ฯลฯ
แก้ไข:
ด้วยความอยากรู้อยากเห็นและอธิบายถึงความแตกต่างของการประมวลผลโดยใช้เลเยอร์คุณลักษณะและเวิร์กสเปซ in_memory ให้พิจารณาการทดสอบความเร็วต่อไปนี้โดยที่ 39,000 คะแนนถูกบัฟเฟอร์ 100m:
import arcpy, time
from arcpy import env
# Set overwrite
arcpy.env.overwriteOutput = 1
# Parameters
input_features = r'C:\temp\39000points.shp'
output_features = r'C:\temp\temp.shp'
###########################
# Method 1 Buffer a feature class and write to disk
StartTime = time.clock()
arcpy.Buffer_analysis(input_features,output_features, "100 Feet")
EndTime = time.clock()
print "Method 1 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)
############################
# Method 2 Buffer a feature class and write in_memory
StartTime = time.clock()
arcpy.Buffer_analysis(input_features, "in_memory/temp", "100 Feet")
EndTime = time.clock()
print "Method 2 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)
############################
# Method 3 Make a feature layer, buffer then write to in_memory
StartTime = time.clock()
arcpy.MakeFeatureLayer_management(input_features, "out_layer")
arcpy.Buffer_analysis("out_layer", "in_memory/temp", "100 Feet")
EndTime = time.clock()
print "Method 3 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)
เราสามารถเห็นได้ว่าวิธีที่ 2 และ 3 นั้นเทียบเท่าและเร็วกว่าวิธีที่ 1 ประมาณ 3 เท่าซึ่งแสดงให้เห็นถึงพลังของการใช้เลเยอร์คุณลักษณะเป็นขั้นตอนกลางในเวิร์กโฟลว์ขนาดใหญ่
in_memory
พื้นที่ทำงานยังคงเป็นข้อมูล (เช่นคลาสของคุณลักษณะและตาราง) ยังคงใช้พื้นที่ (อาจมีจำนวนมาก) ในทางกลับกันคุณลักษณะเลเยอร์เป็นมุมมองของข้อมูลช่วยให้คุณสามารถเลือกชุดย่อยของข้อมูลและใช้ในกระบวนการที่ตามมาแทนที่จะเป็นข้อมูลที่ซ้ำกันเพียงเพื่อให้ได้ชุดย่อยของมัน เลเยอร์คุณลักษณะใช้พื้นที่เกือบจะไม่มีเลย ฉันชอบคิดว่าพวกเขาเป็น "ตัวชี้ที่มีข้อมูลเมตา" เช่นพวกเขาชี้ไปที่ข้อมูลบางส่วนและอธิบายถึงวิธีการสืบค้น / แสดงผล
in-memory
พื้นที่ทำงานนั้นเป็นฐานข้อมูลไฟล์ที่อยู่ในหน่วยความจำหากคุณต้องการคิดแบบนั้น