1 votos

¿Etiquetado con el analizador Python en ArcGIS Desktop?

Mi experiencia con Python es limitada.

Necesito crear etiquetas basadas en grupos de atributos. He encontrado una manera torpe de lograrlo, pero implica 20 clases de anotación / consultas SQL / expresiones de etiqueta diferentes, y realmente espero que haya una manera de lograrlo de manera más elegante y eficiente, idealmente con sólo 1 expresión de etiqueta.

Mis datos de entrada (que no pueden ser alterados) es una clase de característica con 3 campos relevantes (que he hecho genéricos aquí).

  • Codelist - códigos numéricos
  • Atributo1 - un atributo
  • Atributo2 - un segundo atributo

Codelist contiene 100 números. Los grupos de estos números requieren una etiqueta: por ejemplo, los códigos 1,3,35,7,8 tendrían la etiqueta "Navidad, Atributo1, Atributo2" en 3 líneas separadas. Los códigos 2,9,34,100,54,22 tendrían la etiqueta "Pascua, Atributo 1, Atributo2" en 3 líneas separadas. Y así sucesivamente.

No consigo averiguar cómo utilizar una sentencia del tipo SQL 'if [CODELIST] in (1,3,35,7,8):' en el constructor de expresiones de etiquetas de Python.

¿Es posible?

¿Estoy enfocando esto de la manera correcta o es mi primer esfuerzo utilizando múltiples clases de anotación y consultas SQL la mejor manera de hacerlo después de todo?

3voto

Ron Warholic Puntos 7479

Así que, depende. Si necesita que las etiquetas tengan un aspecto diferente (una tiene que ser de texto verde, otra de texto negro grande y en negrita), o si necesita gestionar las propiedades de colocación de las etiquetas (una tiene que estar por encima de una línea y la otra por debajo), o si necesita afectar a los pesos de las etiquetas/características y/o al orden de dibujo de las etiquetas, o si necesita gestionar cualquier otra configuración/propiedad de las etiquetas por separado para los diferentes grupos, entonces tendrá que utilizar clases de etiquetas separadas con consultas SQL en las clases como está haciendo.

Dicho esto, si desea etiquetar todas las características de la misma manera excepto el texto de la etiqueta, puede hacerlo con una expresión de etiqueta avanzada como se describe en la respuesta de @Dan. Sin embargo, una nota importante sobre el uso del analizador sintáctico python para una expresión de etiqueta avanzada donde usted está buscando en los valores numéricos:

Según mis pruebas (ArcMap 10.5.1), parece que la expresión de etiqueta leerá todos los valores, INCLUIDOS los numéricos, como cadenas. Así que utiliza esencialmente lo que @Dan publicado, excepto que es probable que tenga que modificar el `in (...) de lo que cabría esperar; posiblemente el uso de código similar al siguiente.

def FindLabel ([Codelist],[Attribute1],[Attribute2]):
  if [Codelist] in ('1','3','35','7','8'):
    return 'Christmas\n'+[Attribute1]+'\n'+[Attribute2]
  elif [Codelist] in ('2','9','34','100','54','22'):
    return 'Easter\n'+[Attribute1]+'\n'+[Attribute2]
  elif ...
    return ...
  else:
    return 'No holiday\n'+[Attribute1]+'\n'+[Attribute2]

Nota: He incluido un else: al final con una sentencia return después. Lo usaría si quisiera devolver una cadena específica cuando el campo [Codelist] no coincide con ninguno de los criterios que ha proporcionado previamente en las declaraciones if y elif anteriores. Si no lo necesita, puede omitir las 2 últimas líneas.

1voto

Tim Trueman Puntos 111

Sí, es posible. Marque la opción Avanzado en el cuadro de diálogo Expresión de etiqueta.

A continuación, añada sus condiciones de etiquetado en el bloque de código.

En mi caso, utilicé el siguiente bloque de código (que puedes adaptar a tu situación).

def FindLabel ( [Report_FC], [Report_Group], [Request_UFI]):
  if [Report_Group] in ('Administration', 'Information'):
    return [Report_FC]
  if [Report_Group] == 'Infrastructure':
    return [Request_UFI] 

enter image description here

Para recuperar tres atributos con una nueva línea entre cada uno, utilizarías

return "{}\n{}\n{}".format([Attrib1], [Attrib2], [Attrib3])

o en tu caso:

return "{}\n{}\n{}".format("Christmas", [Attrib1], [Attrib2])

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