Один із способів зробити це - клонування шару, використання запитів визначення та маркування їх окремо, використання лише позиції мітки зліва вліво для першого шару та нижнього зліва для другого.
Додайте ціле число типу 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 ""
ОНОВЛЕННЯ Листопад 2016 року, сподіваємось, триватиме.
Нижче вираз, перевірений на 2000 дубліках, працює як шарм:
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 "