9 votos

¿Poner descripciones de símbolos de leyendas de diseño de ArcMap desde la mesa?

ArcMap tiene la capacidad de mostrar una descripción ampliada para cada elemento de la lista de símbolos. ¿Cómo puedo poblar esa propiedad desde una tabla? El objetivo es evitar tener que editar cada símbolo uno por uno para añadir la descripción .

enter image description here

7voto

UnkwnTech Puntos 21942

En lugar de tratar de usar la aplicación ArcMap por sí sola, he traído a ArcPy a la escena.

Acabo de probar y lograr lo que usted describió usando el Valores ÚnicosSimbología (arcpy.mapping) que tiene una clase de escritura classDescriptions propiedad que se puede establecer:

Una lista de cadenas o números que representan las descripciones de cada valor único que puede aparecer opcionalmente en la leyenda de un documento de mapa. Estos valores sólo son accesibles en la interfaz de usuario de ArcMap por haciendo clic con el botón derecho del ratón en un símbolo que se muestra en la pestaña de Simbología en el Cuadro de diálogo Propiedades de las capas y seleccionando Editar descripción. El La lista de descripciones de clases debe tener el mismo número de elementos y dispuestos en el mismo orden que la propiedad de la clase "Valores".

El código utiliza un Cursor de búsqueda para leer la tabla de búsqueda en un lista y luego escribe esa lista en la propiedad classDescriptions de la clase de simbología de la capa. Nótese que el La tabla de búsqueda DEBE tener el mismo número de filas y estar en el mismo orden que los valores de la clasificación de la simbología única . Mi código tendría que ser mejorado para tener en cuenta que no es el caso, pero asegurarse de que el orden manualmente fue fácil en mi caso de prueba.

import arcpy

vegDescList = []
vegCodes = arcpy.SearchCursor(r"C:\temp\test.gdb\LookupTable")
for vegCode in vegCodes:
    vegDescList.append(vegCode.Description)

mxd = arcpy.mapping.MapDocument(r"C:\temp\test.mxd")
lyr = arcpy.mapping.ListLayers(mxd,"testFC")[0]
if lyr.symbologyType == "UNIQUE_VALUES":
    lyr.symbology.classDescriptions = vegDescList
mxd.save()

del mxd

6voto

Greg Puntos 1756

Trabajando desde El código de PolyGeo Esto es lo que se me ocurrió para resolver el problema de tener un número exacto de artículos y una coincidencia de orden idéntica entre los valores de búsqueda y la descripción. El funcionamiento completo script es aquí .

# name and path of the lookup table
lookup_table = r"..\default.gdb\vegMajorComm_Lookup"

# change these to match the relevant field names in the lookup table
code = 'VegCode'
description = 'Description'

##...snip...

# build the descriptions dictionary
descriptions = {}
rows = arcpy.SearchCursor(lookup_table)
for item in rows:
    #print item.getValue(code), item.getValue(description)
    descriptions[item.getValue(code)] = item.getValue(description)

# lyr.symbology requires the classValues and classDescriptions to have
# same number of rows and be in same order. So extract only matching 
# elements from the description dictionary
desclist = []
if lyr.symbologyType == "UNIQUE_VALUES":

    #extract matches
    for symbol in lyr.symbology.classValues:
      desclist.append(descriptions[symbol])    

    # assign the descriptions
    lyr.symbology.classDescriptions = desclist

mxd.saveACopy(output_map)
del mxd

1voto

Dustin Laine Puntos 213

¿Podría clasificar sus símbolos con "Valores únicos, muchos campos" y elegir un campo para el código y el segundo para la descripción más larga? Eso debería etiquetar cada elemento con una cadena en la forma "[Campo1], [Campo2]"

Trabaja con campos más pequeños, imagino que lo haría con cuerdas más largas, a menos que haya una limitación con la que no esté familiarizado.

La única parte molesta sería que tendrías que revisar y borrar el valor del código desde el principio del valor de la etiqueta, pero eso no sería lo peor que hubiera pasado.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X