Eine Möglichkeit besteht darin, die Ebene zu klonen, Definitionsabfragen zu verwenden und sie separat zu kennzeichnen, wobei für die erste Ebene nur die Beschriftungsposition oben links und für die zweite Ebene die Beschriftungsposition unten links verwendet wird.
Fügen Sie der Ebene eine Ganzzahl vom Typ THEFIELD hinzu und füllen Sie sie mit dem folgenden Ausdruck:
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
Nennen Sie es durch:
FirstOrOthers( !Shape! )
Erstellen Sie eine Kopie des Layers im Inhaltsverzeichnis und wenden Sie die Definitionsabfrage THEFIELD = 1 an.
Wenden Sie die Definitionsabfrage THEFIELD = 2 für die ursprüngliche Ebene an.
Wenden Sie eine andere feste Etikettenposition an
UPDATE basierend auf Kommentaren zur ursprünglichen Lösung:
Fügen Sie das Feld COORD hinzu und füllen Sie es mit
'%s %s' %(round( !Shape!.firstPoint.X,2),round( !Shape!.firstPoint.Y,2))
Fassen Sie dieses Feld mit first und last for label zusammen. Verbinden Sie diese Tabelle wieder mit dem COORD-Feld. Wählen Sie Datensätze aus, bei denen zuerst <> als letztes angezeigt wird, und verknüpfen Sie das erste und das letzte Etikett in einem neuen Feld mit
'%s\n%s' %(!Sum_Output_4.First_MUID!, !Sum_Output_4.Last_MUID!)
Verwenden Sie Count_COORD und THEFIELD, um zwei "verschiedene Ebenen" und Felder zu definieren, um sie zu kennzeichnen:
Update Nr. 2 inspiriert von der @ Hornbydd-Lösung:
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, hoffentlich zuletzt.
Der folgende Ausdruck, der an 2000 Duplikaten getestet wurde, wirkt wie 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 "