Mã dưới đây kết hợp các câu trả lời khác và thêm một chút để đánh số các đỉnh.
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)
Các điểm được dán nhãn theo thứ tự vẽ. Điểm cuối cùng (dưới điểm đầu tiên) sẽ không có nhãn và có thể bị xóa bằng cách chọn tất cả các điểm có giá trị Null hoặc duy nhất, "DRAW_ORDER" nếu không cần thiết để xây dựng lại. Một truy vấn định nghĩa có thể được sử dụng để loại bỏ các điểm chồng chéo khỏi màn hình.
Dữ liệu XY có mặt, nhưng tôi sẽ để nó cho nhãn của bạn / hiển thị mong muốn. Xem câu trả lời của Aaron về việc thêm trường XY để ghi nhãn.
Tôi cũng đang chơi đùa với FeatureClass với mảng numpy, nhưng tôi đã hoàn thành nó đầu tiên.