Estou tentando escrever uma macro python para o ArcGIS 10.2 que automatizará o processo de rotular pontos em uma camada com base em diferentes tipos de apartamentos. Por exemplo, um estilo de apartamento teria um quadrado azul com texto em negrito branco como um rótulo; outro teria um quadrado rosa com texto em negrito preto; outro teria um quadrado vermelho com um texto em negrito branco etc.
Que expressão ou função você usaria no arcpy para alterar o estilo desses rótulos?
Atualmente, o script rotula os apartamentos por um código de mapa e altera seu nome no sumário para apartamentos, como deveria.
Agora, quero alterar a fonte, o gráfico e o tamanho dos rótulos para criar um rótulo exclusivo para cada um deles e, em seguida, pressionar um botão e simplesmente automatizar o processo sempre que precisarmos executar uma dessas camadas.
Existe alguma maneira de alterar as fontes, rótulos e gráficos com o uso de scripts Python (ArcPy, IDLE etc.)?
Decidi editar este post para dar uma descrição final do que vou fazer aqui, para que não haja confusão. Essencialmente, os pontos no mapa passarão da aparência da imagem acima para esta:
Eu tentei usar a lblClass.expression
função, no entanto, o código que estou tentando usar não funciona. Eu acho que é provavelmente o passo na direção certa. Abaixo está um código que tentei usar apenas para obter o labelClass.expression para alterar as fontes dos rótulos.
for lblClass in aptLayer.labelClasses:
lblClass.showClassLabels = True
def getLabel (Code, Type):
if Type == "MRR":
return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>"
elif Type == "TAX":
return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>"
elif Type == "MRT":
return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>"
elif Type == "GSS":
return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>"
elif Type == "TGS":
return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>"
else:
return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>"
lblClass.expression = getLabel( [Map_Code],[Type])
fonte
refocus_layer = arcpy.mapping.ListLayers(mxd, original_fc_name)[0]
gera um erro dizendo que o índice está fora do intervalo.arcpy.mapping.ListLayers
método não está encontrando uma camada no mxd atual com o mesmo nome que o seuinput_layer_file
(um índice de[0]
retorno de índice fora do intervalo significa que não há itens na lista).Traceback (most recent call last): File "E:\_Tyler Temp\Python\IanTest.py", line 30, in <module> refocus_layer = arcpy.mapping.ListLayers(mxd, original_fc_name)[0] IndexError: list index out of range
Outra opção é definir a expressão de etiqueta personalizada na camada (alterando tamanho e cor .. etc) usando python:
por exemplo
Construindo expressões de rótulo
Eles podem ser configurados via:
LabelClass (arcpy.mapping)
EDITAR:
Tente o seguinte:
Você pode remover suas outras instruções de linha (para loop, labClass e chamar a função). Além disso, a função precisa ser chamada FindLabel.
fonte
def getLabel (Code, Type)
e, depois de configurar as instruções if-else para os diferentes códigos de mapa que uso, defino 'lblClass.expression = getLabel ("[Map_Code]", "[Type]")', que retorna um erroTypeError: unsupported operand type(s) for &: 'str' and 'str'
Estou basicamente seguindo os exemplos do site da Esri. Se eu puder provar que posso alterar a fonte, posso então ajustar os aspectos mais difíceis (como forma, plano de fundo e cor dos rótulos).