নীচের কোডটি অন্য উত্তরগুলিকে একত্রিত করে এবং শীর্ষবিন্দুগুলিকে সংখ্যায় সামান্য যোগ করে।
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" মান রয়েছে এমন সমস্ত পয়েন্ট নির্বাচন করে মুছে ফেলা যাবে। একটি সংজ্ঞা কোয়েরি প্রদর্শন থেকে ওভারল্যাপিং পয়েন্টগুলি সরাতে ব্যবহার করা যেতে পারে।
এক্সওয়াই ডেটা উপস্থিত, তবে আমি এটি আপনার লেবেলিং / আকাঙ্ক্ষাগুলি প্রদর্শন করব। লেবেলিংয়ের জন্য এক্সওয়াই ফিল্ড যুক্ত করার বিষয়ে হারুনের উত্তর দেখুন।
আমি ফিচারক্লাসের সাথে নাম্পার অ্যারেতেও টোয়িং করছিলাম তবে আমি এটি প্রথম শেষ করেছি।