Một cách để làm điều này là nhân bản lớp, sử dụng các truy vấn định nghĩa và gắn nhãn riêng cho chúng, sử dụng vị trí nhãn chỉ phía trên bên trái cho lớp đầu tiên và phía dưới bên trái trong giây.
Thêm số nguyên kiểu THEFIELD vào lớp và điền nó bằng biểu thức bên dưới:
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
Gọi nó bằng cách:
FirstOrOthers( !Shape! )
Tạo một bản sao của lớp trong bảng nội dung, áp dụng truy vấn định nghĩa THEFIELD = 1.
Áp dụng truy vấn định nghĩa THEFIELD = 2 cho lớp gốc.
Áp dụng vị trí nhãn cố định khác nhau
CẬP NHẬT dựa trên ý kiến cho giải pháp ban đầu:
Thêm trường COORD và điền vào nó bằng cách sử dụng
'%s %s' %(round( !Shape!.firstPoint.X,2),round( !Shape!.firstPoint.Y,2))
Tóm tắt lĩnh vực này bằng cách sử dụng đầu tiên và cuối cùng cho nhãn. Tham gia bảng này trở lại ban đầu bằng cách sử dụng trường COORD. Chọn các bản ghi trong đó linh hồn <> cuối cùng và ghép nhãn đầu tiên và cuối cùng trong một trường mới bằng cách sử dụng
'%s\n%s' %(!Sum_Output_4.First_MUID!, !Sum_Output_4.Last_MUID!)
Sử dụng Count_COORD và THEFIELD để xác định 2 'lớp khác nhau' và các trường để gắn nhãn cho chúng:
Cập nhật # 2 lấy cảm hứng từ giải pháp @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 ""
CẬP NHẬT tháng 11 năm 2016, hy vọng cuối cùng.
Biểu thức dưới đây đã thử nghiệm trên 2000 bản sao, hoạt động như bùa mê:
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 "