สร้างเลเยอร์จากคุณสมบัติที่เลือกอย่าสร้างเลเยอร์ 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(';'))