Estoy tratando de escribir una macro de Python para ArcGIS 10.2 que automatizará el proceso de etiquetar puntos en una capa basada en diferentes tipos de apartamentos. Por ejemplo, un estilo de apartamentos tendría un cuadrado azul con texto en negrita blanco como una etiqueta; otro tendría un cuadrado rosa con texto negro en negrita; otro tendría un cuadrado rojo con un texto en negrita blanco, etc.
¿Qué expresión o función usarías en arcpy para alterar el estilo de estas etiquetas?
Actualmente, el script etiqueta los apartamentos por un código de mapa y cambia su nombre en la tabla de contenido a apartamentos, como debería.
Ahora quiero cambiar la fuente, el gráfico y el tamaño de las etiquetas para que se vean, crear una etiqueta única para cada una, y luego hacer un botón para presionar y simplemente automatizar el proceso cada vez que tengamos que hacer una de estas capas.
¿Hay alguna forma de que las fuentes, las etiquetas y los gráficos se puedan cambiar con el uso de secuencias de comandos de Python (ArcPy, IDLE, etc.)?
Decidí editar esta publicación para dar una descripción final de lo que voy a hacer aquí para que no haya confusión. Esencialmente, los puntos en el mapa pasarán de verse como la imagen de arriba a esto:
He intentado usar la lblClass.expression
función, sin embargo, el código que estoy tratando de usar no funciona. Me imagino que ese es probablemente el paso en la dirección correcta. A continuación se muestra un código que he tratado de usar solo para obtener labelClass.expression para cambiar las fuentes de las etiquetas.
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])
fuente
refocus_layer = arcpy.mapping.ListLayers(mxd, original_fc_name)[0]
arroja un error que dice que el índice está fuera de rango.arcpy.mapping.ListLayers
método no está encontrando una capa en el mxd actual con el mismo nombre que suinput_layer_file
(un índice de índice de[0]
retorno fuera de rango significa que no hay elementos en la 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
Otra opción es establecer una expresión de etiqueta personalizada en la capa (cambiando el tamaño y el color ... etc.) usando python:
p.ej
Construir expresiones de etiqueta
Se pueden configurar a través de:
LabelClass (arcpy.mapping)
EDITAR:
Prueba esto:
Puede eliminar sus otras instrucciones de línea (para loop, labClass y call to function). Además, la función debe llamarse FindLabel.
fuente
def getLabel (Code, Type)
y luego, después de configurar las instrucciones if-else para los diferentes códigos de mapa que uso, configuré 'lblClass.expression = getLabel ("[Map_Code]", "[Type]")', que solo devuelve un errorTypeError: unsupported operand type(s) for &: 'str' and 'str'
que básicamente estoy siguiendo los ejemplos del sitio web de Esri. Si simplemente puedo demostrar que puedo cambiar la fuente, puedo pasar a ajustar los aspectos más difíciles (como la forma, el fondo y el color de las etiquetas).