สร้างเครื่องมือเลเยอร์จากคุณสมบัติที่เลือก: รายการคุณสมบัติถูกเก็บไว้อย่างไร


12

ใน ArcGIS สก์ท็อป, มีเครื่องมือที่เรียกว่าสร้างเลเยอร์จากคุณสมบัติที่เลือก การใช้เครื่องมือนี้ฉันสามารถแปลงส่วนที่เลือกเป็นเลเยอร์ใน ArcMap

ฉันเดาว่ามี "รายการคุณสมบัติ" ที่ฝังอยู่ในเลเยอร์บางแห่งที่แยกคุณลักษณะที่จะแสดงในแผนที่

ผมจะมีความคิดที่ว่า "รายการของคุณสมบัติ" จะได้รับการจัดเก็บไว้ในข้อในการค้นหาความหมายเป็นรายการของwhere objectidsตัวอย่างเช่นwhere objectid in(123,456,789,...). อย่างไรก็ตามนี่ไม่ใช่กรณี

หากเลเยอร์ไม่มีWHEREคำสั่งย่อยหรือคำจำกัดความแล้วรายการคุณสมบัติจะจัดเก็บอย่างไร


2
มีความแตกต่างใหญ่ระหว่างรายการเมนูและเครื่องมือการประมวลผลทางภูมิศาสตร์ สิ่งที่คุณกำลังพูดถึงคืออดีต คุณสามารถใช้ข้อมูลที่เก็บไว้ใน fidset เพื่อสร้างเลเยอร์ของคุณ
FelixIP

2
ฉันค่อนข้างมั่นใจว่าไม่มีส่วนคำสั่ง WHERE ที่เก็บไว้เมื่อคุณสร้างเลเยอร์การเลือกและเมื่อมันถูกสร้างขึ้นคุณจะไม่สามารถหาตัวเลือกดั้งเดิมที่ใช้ในการสร้างได้ ฉันหวังว่าฉันได้รับการพิสูจน์ผิดในรูปแบบของคำตอบเพราะฉันกำลังเผชิญกับเลเยอร์การเลือกที่เก่ามากเมื่อเร็ว ๆ นี้และการค้นหาฟีเจอร์ดั้งเดิมที่ใช้ในการสร้างมันจะเป็นประโยชน์
Dan C

1
Fidset เป็นคุณสมบัติของเลเยอร์ มันคือ ; สตริงที่แยกจากกันเพื่อเก็บ FID ที่เลือกไว้
FelixIP

สร้างเลเยอร์จากคุณสมบัติที่เลือกอย่าสร้างเลเยอร์ DYNAMIC เลเยอร์ที่ได้นั้นไม่ได้เป็นแบบไดนามิกเลย มันขึ้นอยู่กับ FIDset หากคุณเปลี่ยนแหล่งข้อมูล FID จะเปลี่ยนและเลเยอร์การเลือกของคุณจะแตก นี่ไม่เหมือนเลเยอร์เคียวรีซึ่งเก็บประโยคที่
jbalk

คำตอบ:


14

สร้างเลเยอร์จากคุณสมบัติที่เลือกอย่าสร้างเลเยอร์ DYNAMIC เลเยอร์ที่ได้นั้นไม่ได้เป็นแบบไดนามิกเลย มันขึ้นอยู่กับ FIDset

หากคุณเปลี่ยนแหล่งข้อมูล FID จะเปลี่ยนและเลเยอร์การเลือกของคุณจะแตก

ไม่มีข้อที่อยู่ในเลเยอร์การเลือก เป็นไปตาม FIDset (FID ที่เลือกเมื่อคุณใช้ 'สร้างเลเยอร์จากคุณสมบัติที่เลือก')

โปรดทราบว่าถ้าคุณเพิ่มหรือลบบันทึกจากแหล่งข้อมูล FID จะเปลี่ยนไปและเลเยอร์ที่คุณเลือกจะแสดงบันทึกที่ไม่ถูกต้อง

คุณกำลังสับสนเลเยอร์การเลือกกับเลเยอร์การสืบค้นซึ่งจะเก็บตำแหน่ง clause และไดนามิก

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

ในการค้นหารายการคุณสมบัติในเลเยอร์การเลือกคุณสามารถใช้วิธีการต่าง ๆ มากมายรวมถึง SearchCursor เพื่อสร้างรายการ ID

บางสิ่งเช่นนี้

OIDlist = []
with arcpy.da.SearchCursor(layer, 'OBJECTID') as scur:
    for row in scur:
        OIDlist.append(row[0])

จากความคิดเห็นโดยcrmackey :

นอกจากนี้ยังมีวิธีการอธิบายเพื่อรับ FIDSet ในตัว นี่คือสตริง แต่ง่ายต่อการแปลงเป็นรายการ:

OIDlist = map(int, arcpy.Describe(layer).FIDSet.split(';'))

1
FIDSetนอกจากนี้ยังมีวิธีการในตัวด้วยการอธิบายที่จะได้รับ นี่เป็นสตริง แต่สามารถแปลงเป็นรายการได้ง่าย: OIDlist = map(int, arcpy.Describe(layer).FIDSet.split(';'))
crmackey


11

วิธีที่ดีที่สุดที่ฉันเข้าใจวิธีการCreate Layer from Selected Featuresอ้างอิงนี้ที่ฉันเจอสร้างเลเยอร์ชั่วคราวเพื่อเลือกคุณสมบัติ

การสร้างเลเยอร์ชั่วคราวช่วยให้คุณทำสิ่งต่าง ๆ เช่นทำการเลือกโดยไม่ส่งผลกระทบต่อแหล่งข้อมูลดั้งเดิม เลเยอร์นี้จะไม่ปรากฏในเนื้อหา ArcCatalog เพราะมันถูกสร้างขึ้นในหน่วยความจำและเพียงแค่อ้างอิงข้อมูลที่เก็บไว้ในดิสก์ เลเยอร์เหล่านี้สามารถใช้เป็นอินพุตไปยังเครื่องมือการประมวลผลทางภูมิศาสตร์อื่น ๆ ภายในเซสชันการทำงานของคุณ เมื่อคุณออกจากแอปพลิเคชันเลเยอร์ในหน่วยความจำจะถูกลบออก

เครื่องมือสร้างคุณลักษณะเลเยอร์อยู่ในชุดเครื่องมือเลเยอร์และมุมมองตารางภายในกล่องเครื่องมือเครื่องมือการจัดการข้อมูล คลิกขวาที่เครื่องมือ Make Feature Layer แล้วคลิก Open หรือดับเบิลคลิกเพื่อเปิดเครื่องมือ

กลไกที่สามารถอ่านในพื้นที่ดิสก์นั้นจะเป็นวิธีการเข้าถึง "ชุดผลลัพธ์"

นอกจากนี้ยังเป็นที่กล่าวถึงก่อนหน้านี้และ Esri ครอบคลุมการทำงานกับคุณสมบัติที่เลือก ,

ในตัวอย่างนี้เลเยอร์ที่สร้างจากคุณลักษณะที่เลือกจะมีประโยชน์เป็นชุดข้อมูลการทำงานชั่วคราวเท่านั้น (ตัวอย่างเช่นสำหรับใช้เป็นอินพุตในโมเดลการประมวลผลทางภูมิศาสตร์) ชั้นใหม่ทำให้รายการของ FeatureIDs (FIDS) หรือ ObjectIDs (OIDs) ของคุณสมบัติที่เลือกและจะกลายเป็นที่ไม่ถูกต้องเมื่อแหล่งข้อมูลเดิมที่มีการปรับปรุงหรือเปลี่ยนแปลง

นอกจากนี้ยังมีการพูดคุยกันมากขึ้นเช่นเดียวกับการอ่านทั่วไปการใช้พื้นที่ทำงานในหน่วยความจำที่เกี่ยวข้องกับin_memoryพื้นที่ทำงาน นี่เป็นเพียงข้อมูลเพิ่มเติมหากคุณสนใจ


2

ฉันเดาว่าเลเยอร์จากCreate Layer From Selected Featuresนั้นไม่ได้ขึ้นอยู่กับWHEREประโยคหรือเงื่อนไขแบบลอจิคัลเนื่องจากชุดการเลือกสามารถสร้างขึ้นได้โดยไม่ต้องเกี่ยวข้องกับตรรกะ

ตัวอย่างเช่นคุณสามารถเพิ่ม / ลบคุณสมบัติใด ๆ ได้ด้วยตนเองจากชุดการเลือกโดยใช้เมนูหลักเช่นการลากกล่องซึ่งอาจมาจากหนึ่งในการเลือกตามคุณสมบัติ / ตำแหน่งก่อนหน้า

ฉันเดาว่าชุดการเลือก ( IFeatureSelection) เป็นเพียงชุดผลลัพธ์จำนวนมาก (ประกอบด้วยสำเนาของ ID ของเลเยอร์ดั้งเดิม) แทนที่จะเป็นกฎที่กำหนดชุดผลลัพธ์ ดังนั้นคำเตือนในเอกสารที่เชื่อมโยงว่า ID อาจไม่ถูกต้องหาก ID ของเลเยอร์เดิมเปลี่ยนไป

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