5 votos

¿Las expresiones de etiquetas reducen la velocidad de dibujo?

Además de mi pregunta anterior sobre el uso de diferentes fuentes en el mismo PC Me pregunto si las expresiones de etiquetas reducirían la velocidad de dibujo de un MXD.

Esta es la expresión de mi etiqueta:

def FindLabel ( [GEONAME] ):
      import os
      if str(os.getenv("COMPUTERNAME")) == 'GIS-HP':
        return ("<FNT name='Adobe Fan Heiti Std B' size='8'>" + [GEONAME] + "</FNT>")
      else:
        return ("<FNT name='Arial' size='8'>" + [GEONAME] + "</FNT>")

Esto funciona a las mil maravillas y aún no he notado nada, pero me da la impresión de que añadir esto a todas mis capas reducirá drásticamente la velocidad de dibujo en mi MXD. La velocidad de dibujo es una de las cosas más importantes para mí, ya que comparto mis MXD con otros usuarios para que hagan análisis básicos. Normalmente guardo un MXD separado, lo abro y cambio todas las etiquetas a algo fácil antes de compartirlo. Si esto no ralentiza la velocidad de dibujo, sería fantástico y me ahorraría algo de tiempo en el futuro. ¿Alguien tiene alguna idea?

5voto

NoobDeveloper Puntos 101

Sí.

Las expresiones de las etiquetas ralentizan el rendimiento del dibujo. En particular, evite utilizar scripts de expresión de etiquetas para analizar condicionalmente o formatear cadenas de etiquetas o concatenar la información de varios campos en una cadena de etiquetas cuando se dibujan. En su lugar, calcule un nuevo campo con exactamente la información que se necesita. El campo puede incluir etiquetas de formato.

Desde Ayuda de ESRI que también tiene mucha otra información sobre cómo mejorar el rendimiento del dibujo de etiquetas.

2voto

Paul Puntos 555

Esto será mucho, mucho más lento. Considere la posibilidad de hacer algún tipo de preprocesamiento para evitar el trabajo redundante, ponga esto en el bloque de código en su lugar:

import os

if str(os.getenv("COMPUTERNAME")) == 'GIS-HP':
  LABEL_TEXT = "<FNT name='Adobe Fan Heiti Std B' size='8'>{}</FNT>"
else:
  LABEL_TEXT = "<FNT name='Arial' size='8'>{}</FNT>"

def FindLabel( [GEONAME] ):
  return LABEL_TEXT.format( [GEONAME] )

Así, sólo tendrá que comprobar la variable de entorno una vez por cada representación del mapa en lugar de por cada etiqueta. Y también se podría construir un caché si se tienen muchos valores repetidos:

import os
if str(os.getenv("COMPUTERNAME")) == 'GIS-HP':
  LABEL_TEXT = "<FNT name='Adobe Fan Heiti Std B' size='8'>{}</FNT>"
else:
  LABEL_TEXT = "<FNT name='Arial' size='8'>{}</FNT>"

VALUE_CACHE = {}

def FindLabel( [GEONAME] ):
  if [GEONAME] not in VALUE_CACHE:
      VALUE_CACHE[ [GEONAME] ] = LABEL_TEXT.format( [GEONAME] )
  return VALUE_CACHE[ [GEONAME] ]

2voto

Barrett Puntos 1430

Esta solución ya la conoces, pero no está de más mencionarla:

A menudo cometo el error de acercarme a las características de 6000 puntos, sólo para esperar a que se etiqueten.

Etiquetar los rangos de la escala ayudará enormemente en esas situaciones. De todos modos, las etiquetas son ilegibles a escala 50.000.

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