6 votos

ArcMap ignora a veces etiquetado expresión

Estoy usando esta secuencia de comandos de python como una expresión para el etiquetado en ArcMap:

def FindLabel ( [volkorrekt] ):
 if [volkorrekt] >= '5':
  return "<FNT size = '20'>"+  str( [volkorrekt] )+"</FNT>"
 elif [volkorrekt] >= '2':
   return  "<FNT size = '14'>"+  str( [volkorrekt] )+"</FNT>"
 elif [volkorrekt] >= '1':
  return "<FNT size = '8'>"+  str( [volkorrekt] )+"</FNT>"
 else:
  return ""

Quiero ArcMap sólo la etiqueta de la función si el valor volkorrekt es mayor que 1, esto es de trabajo. También quiero ArcMap para cambiar el tamaño de letra de acuerdo a mi si-declaración (tamaño de letra 20 si valor >= 5, 14 si >= 2 y 8 si >= 1), pero esto sólo funciona para algunos pero no para todos los elementos.

Este es mi resultado:

enter image description here

Ejemplos de mal etiquetas: El "19,487..." se muestra muy pequeña a pesar de que es uno de los grandes valores, el "9,552..." sin embargo se muestra mucho a los grandes.

¿Cómo puedo obtener ArcMap para la etiqueta de las características del modo que he descrito?

8voto

Martin Puntos 2872

Esto es debido a que intenta utilizar > como un carácter en la etiqueta, así como para dar formato/programación de la etiqueta. Nada de malo con eso, es cómo funciona. Pero si usted desea utilizar esos personajes en su etiqueta que necesita para escapar de ellos.

En lugar de la real characther necesita usar &lt; (<), &gt; (>) y &amp; (&).

Un enfoque alternativo es el uso de la etiqueta de clases. A continuación, puede hacer consultas SQL en lugar de sus declaraciones, que en mi opinión es más fácil de controlar.

3voto

Berend Puntos 587

Creo que se están mezclando números y texto. Qué tipo de campo es vollkorrekt?

Como lo es ahora, usted está comparando el valor en una cadena, es decir, [vollkorrekt] >= '1'. La comparación es, por tanto, alfabético en lugar de números, lo que significa que '19' es menor que '5', pero más grande que el '1'.

Si el tipo de campo es numérico, usted sólo tiene que quitar las comillas simples: if [volkorrekt] >= 5: etc.

Si el tipo de campo es de texto, usted tiene que convertir el valor a un float: if float([volkorrekt]) >= 5:

Aquí está el código completo, modificado para aumentar la legibilidad:

def FindLabel( [volkorrekt] ):
    value = float( [volkorrekt].replace(',', '.' ))
    if value >= 5:
        size = 20
    elif value >= 2:
        size = 14
    elif value >= 1:
        size = 8
    else:
        return ""

    return "<FNT size='{0}'>{1}</FNT>".format(size, value)

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