Une façon de procéder consiste à cloner la couche, à l'aide de requêtes de définition et à les étiqueter séparément, en utilisant uniquement la position d'étiquette en haut à gauche pour la première couche et en bas à gauche pour la seconde.
Ajoutez un entier de type THEFIELD au calque et remplissez-le à l'aide de l'expression ci-dessous:
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
Appelez-le par:
FirstOrOthers( !Shape! )
Créez une copie de la couche dans la table des matières, appliquez la requête de définition THEFIELD = 1.
Appliquer la requête de définition THEFIELD = 2 pour la couche d'origine.
Appliquer un placement d'étiquette fixe différent
MISE À JOUR basée sur les commentaires de la solution d'origine:
Ajoutez le champ COORD et remplissez-le en utilisant
'%s %s' %(round( !Shape!.firstPoint.X,2),round( !Shape!.firstPoint.Y,2))
Résumez ce champ en utilisant le premier et le dernier pour l'étiquette. Joignez ce tableau à l'original à l'aide du champ COORD. Sélectionnez les enregistrements dans lesquels <<> dernier et concaténez la première et la dernière étiquette dans un nouveau champ à l'aide de
'%s\n%s' %(!Sum_Output_4.First_MUID!, !Sum_Output_4.Last_MUID!)
Utilisez Count_COORD et THEFIELD pour définir 2 «couches différentes» et des champs pour les étiqueter:
Mise à jour # 2 inspirée de la solution @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 ""
MISE À JOUR novembre 2016, espérons-le dernier.
L'expression ci-dessous testée sur 2000 doublons fonctionne comme un charme:
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 "