Salah satu cara untuk melakukan ini adalah mengkloning layer, menggunakan query definisi dan memberi label secara terpisah, menggunakan posisi label hanya kiri atas untuk layer pertama dan kiri bawah untuk kedua.
Tambahkan integer tipe THEFIELD ke layer dan isi dengan menggunakan ekspresi di bawah ini:
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
Sebut dengan:
FirstOrOthers( !Shape! )
Buat salinan layer di tabel konten, terapkan query definisi THEFIELD = 1.
Terapkan kueri definisi THEFIELD = 2 untuk lapisan asli.
Terapkan penempatan label tetap berbeda
UPDATE berdasarkan komentar terhadap solusi asli:
Tambahkan bidang COORD dan isi dengan menggunakan
'%s %s' %(round( !Shape!.firstPoint.X,2),round( !Shape!.firstPoint.Y,2))
Ringkas bidang ini menggunakan label pertama dan terakhir untuk label. Gabung tabel ini kembali ke aslinya menggunakan bidang COORD. Pilih catatan di mana firs <> terakhir dan menggabungkan label pertama dan terakhir dalam bidang baru menggunakan
'%s\n%s' %(!Sum_Output_4.First_MUID!, !Sum_Output_4.Last_MUID!)
Gunakan Count_COORD dan THEFIELD untuk mendefinisikan 2 'lapisan berbeda' dan bidang untuk memberi label:
Perbarui # 2 terinspirasi oleh solusi @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 ""
UPDATE November 2016, semoga berlangsung.
Ekspresi di bawah ini diuji pada 2000 duplikat, berfungsi seperti pesona:
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 "