วิธีหนึ่งในการทำเช่นนี้คือการโคลนเลเยอร์โดยใช้คิวรีคำจำกัดความและติดฉลากแยกต่างหากโดยใช้ตำแหน่งป้ายบนซ้ายเท่านั้นสำหรับเลเยอร์แรกและซ้ายล่างเป็นวินาที
เพิ่มจำนวนเต็มชนิด THEFIELD ลงในเลเยอร์และเติมโดยใช้นิพจน์ด้านล่าง:
aList=[]
def FirstOrOthers(shp):
global aList
key='%s%s' %(round(shp.firstPoint.X,3),round(shp.firstPoint.Y,3))
if key in aList:
return 2
aList.append(key)
return 1
โทรหาโดย:
FirstOrOthers( !Shape! )
สร้างสำเนาของเลเยอร์ในสารบัญใช้แบบสอบถามความหมาย THEFIELD = 1
ใช้แบบสอบถามความหมาย THEFIELD = 2 สำหรับเลเยอร์เดิม
ใช้การจัดวางฉลากแบบคงที่อื่น
อัปเดตตามความคิดเห็นของโซลูชันต้นฉบับ:
เพิ่ม COORD ของฟิลด์และเติมโดยใช้
'%s %s' %(round( !Shape!.firstPoint.X,2),round( !Shape!.firstPoint.Y,2))
สรุปฟิลด์นี้โดยใช้ชื่อแรกและชื่อสุดท้าย เข้าร่วมตารางนี้กลับไปเป็นต้นฉบับโดยใช้ฟิลด์ COORD เลือกระเบียนที่ภาคเรียน <> สุดท้ายและต่อกันเลเบลแรกและสุดท้ายในฟิลด์ใหม่โดยใช้
'%s\n%s' %(!Sum_Output_4.First_MUID!, !Sum_Output_4.Last_MUID!)
ใช้ Count_COORD และ THEFIELD เพื่อกำหนด 2 'เลเยอร์ที่แตกต่าง' และฟิลด์เพื่อติดป้ายกำกับ:
อัปเดต # 2 แรงบันดาลใจจากโซลูชัน @Hornbydd:
import arcpy
def FindLabel ([FID],[MUID]):
f,m=int([FID]),[MUID]
mxd = arcpy.mapping.MapDocument("CURRENT")
dFids={}
dLabels={}
lyr = arcpy.mapping.ListLayers(mxd,"centres")[0]
with arcpy.da.SearchCursor(lyr,["FID","SHAPE@","MUID"]) as cursor:
for row in cursor:
FD,shp,LABEL=row
XY='%s %s' %(round(shp.firstPoint.X,2),round( shp.firstPoint.Y,2))
if f == FD:
aKey=XY
try:
L=dFids[XY]
L+=[FD]
dFids[XY]=L
L=dLabels[XY]
L=L+'\n'+LABEL
dLabels[XY]=L
except:
dFids[XY]=[FD]
dLabels[XY]=LABEL
Labels=dLabels[aKey]
Fids=dFids[aKey]
if f == Fids[0]:
return Labels
return ""
อัปเดตพฤศจิกายน 2559 หวังว่าจะผ่านมา
ด้านล่างมีการทดสอบการแสดงผลซ้ำซ้อน 2,000 ครั้งทำงานเหมือนมีเสน่ห์:
mxd = arcpy.mapping.MapDocument("CURRENT")
lyr = arcpy.mapping.ListLayers(mxd,"centres")[0]
dFids={}
dLabels={}
fidKeys={}
with arcpy.da.SearchCursor(lyr,["FID","SHAPE@","MUID"]) as cursor:
for FD,shp,LABEL in cursor:
XY='%s %s' %(round(shp.firstPoint.X,2),round( shp.firstPoint.Y,2))
fidKeys[FD]=XY
if XY in dLabels:
dLabels[XY]+=('\n'+LABEL)
dFids[XY]+=[FD]
else:
dLabels[XY]=LABEL
dFids[XY]=[FD]
def FindLabel ([FID]):
f=int([FID])
aKey=fidKeys[f]
Fids=dFids[aKey]
if f == Fids[0]:
return dLabels[aKey]
return "