이를 수행하는 한 가지 방법은 정의 쿼리를 사용하여 레이어를 복제하고 첫 번째 레이어의 왼쪽 위만 레이블 위치를 사용하고 두 번째 레이어는 왼쪽 아래 만 사용하여 별도로 레이블을 지정하는 것입니다.
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 필드를 사용하여이 테이블을 다시 원래 테이블로 결합하십시오. firs <> last가있는 레코드를 선택하고 다음을 사용하여 새 필드에서 첫 번째 레이블과 마지막 레이블을 연결하십시오.
'%s\n%s' %(!Sum_Output_4.First_MUID!, !Sum_Output_4.Last_MUID!)
Count_COORD 및 THEFIELD를 사용하여 2 개의 '다른 레이어'와 필드를 정의하여 레이블을 지정하십시오.
@Hornbydd 솔루션에서 영감을 얻은 업데이트 # 2 :
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 년 11 월 업데이트.
아래의 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 "