ตามที่ @Paul & @PolyGeo แนะนำฉันคิดว่าการพยายามทำให้เป็น Python Add-in นี้สมเหตุสมผลที่สุดและฉันจะติดตามความคิดนั้นในภายหลัง
ในระหว่างนี้ฉันรวบรวมรหัสที่จะเพิ่ม / อัปเดตชื่อ TOC ของเลเยอร์ที่ผู้ใช้กำหนดใน MXD ที่มีการนับคุณสมบัติ เพื่อจุดประสงค์ของฉันฉันเพิ่งสร้างสิ่งนี้เป็นเครื่องมือ GP ที่จะยอมรับแต่ละเลเยอร์ผ่านอินพุตหลายค่าที่ยอมรับ "เลเยอร์" ในเครื่องมือสคริปต์ นั่นทำให้ฉันสามารถอัปเดต "ตามความต้องการ" หลายเลเยอร์เพียงแค่อัปเดตจำนวนคุณสมบัติของเลเยอร์ที่น่าสนใจเหล่านั้น
ฉันไม่ได้คิดวิธีที่จะทำให้การทดสอบนี้เป็นไปโดยอัตโนมัติอย่างไรก็ตามในการทำการทดสอบ MXD เก่าบางอย่างซึ่งอาจไม่เป็นที่ต้องการ หากคุณมีเลเยอร์จำนวนมากที่มีคุณสมบัติมากมายอาจเป็นกระบวนการที่ช้า
import arcpy
LayerInput = arcpy.GetParameterAsText(0)
mxd = arcpy.mapping.MapDocument("CURRENT")
for lyr in arcpy.mapping.ListLayers(mxd):
#Skip over group layers, as they have no values to count
if lyr.isGroupLayer:
continue
#Determine basename of the layer, without the feature count
name = str(lyr.name)
#Determine if the layer is in the user-defined list
if name not in LayerInput:
continue
#Determine if the layer name already includes a COUNT
if "[" in name and "]" in name:
lpos = name.find("[")
basename = name[:lpos-1]
else:
basename = name
print " Updating feature count in TOC name for layer: " + str(basename)
arcpy.AddMessage(" Updating feature count in TOC name for layer: " + str(basename) )
# In 10.1, you may be able to use arcpy.da.SearchCursor to increase the speed.
#http://gis.stackexchange.com/questions/30140/fastest-way-to-count-the-number-of-features-in-a-feature-class
#fcount = 0
#cursor = arcpy.SearchCursor(lyr)
#for row in cursor:
# fcount += 1
#del cursor
#Get the feature count
fcount = int(arcpy.GetCount_management(lyr).getOutput(0))
#Update the lyr.name property
lyr.name = basename + " [n=" + str(fcount) + "]"
del fcount
arcpy.RefreshTOC()
#Garbage collection
del mxd