नीचे दिया गया कोड अन्य उत्तरों को जोड़ता है और संख्याओं को जोड़ने के लिए थोड़ा जोड़ता है।
import arcpy
arcpy.env.workspace = "in_memory"
#paths
fc = r"...\polygons"
fc_out = r"...\vertices"
arcpy.MakeFeatureLayer_management(fc, "lyr")
# add fields if needed
for FIELD in ["DRAW_ORDER", "COUNT"]:
if FIELD not in [field.name for field in arcpy.ListFields(fc)]:
try:
arcpy.AddField_management("lyr", FIELD, "SHORT")
except Exception as e:
print e
# get the number of points minus overlapping (@dmahr - GSE)
arcpy.CalculateField_management("lyr", "COUNT", "!Shape!.pointCount-!Shape!.partCount", "PYTHON")
# dict to iterate and check count
OIDS = {}
for row in arcpy.da.SearchCursor("lyr", ["OBJECTID", "COUNT"]):
OIDS[row[0]] = row[1]
del row
# get vertices as points and add XY (@Aaron - GSE)
arcpy.FeatureVerticesToPoints_management("lyr", fc_out)
arcpy.AddXY_management(fc_out)
# start adding a number to the points
for OID in OIDS:
order_count = 1
rows = arcpy.da.UpdateCursor(fc_out, ["DRAW_ORDER", "COUNT"], "ORIG_FID = %d"%OID)
for row in rows:
# will leave the overlapping as NULL
if order_count <= OIDS[OID]:
row[0] = order_count
rows.updateRow(row)
order_count += 1
## # this can set the overlapping to 0 or some unique value (999)
## else:
## row[0] = 0
## rows.updateRow(row)
अंक ड्राइंग ऑर्डर में लेबल किए गए हैं। अंतिम बिंदु (पहले के तहत) के पास कोई लेबल नहीं होगा और उन सभी बिंदुओं का चयन करके हटाया जा सकता है जिनमें पुनर्निर्माण के लिए आवश्यक नहीं है, नल, या अद्वितीय, "DRAW_ORDER" मान हैं। ओवरलैपिंग बिंदुओं को प्रदर्शन से हटाने के लिए एक परिभाषा क्वेरी का उपयोग किया जा सकता है।
XY डेटा मौजूद है, लेकिन मैं इसे आपकी लेबलिंग / इच्छाओं को प्रदर्शित करने के लिए छोड़ दूंगा। लेबलिंग के लिए XY फ़ील्ड जोड़ने के बारे में हारून का जवाब देखें।
मैं फीचरक्लास के साथ सुन्न सरणी के लिए भी कर रहा था, लेकिन मैंने इसे पहले पूरा किया।