7 votos

Arcpy.mapping.ListLayoutElements () toma más tiempo en una herramienta que en ArcMap

Ha alguien más notó que el acceso a elementos de arcpy.la cartografía.ListLayoutElements() a través de una herramienta de secuencia de comandos toma más tiempo que dentro de ArcMap? Si el uso de un nombre específico, comodín o nada, la llamada tarda del orden de 90 segundos o más para volver:

arcpy.AddMessage("  Start: " + str(datetime.now()))
mapDoc = arcpy.mapping.MapDocument(mapDocumentPath)
elements = arcpy.mapping.ListLayoutElements(mapDoc, "GRAPHIC_ELEMENT")
arcpy.AddMessage("  Finished: " + str(datetime.now()))

Start: 2011-05-24 12:29:28.479000
Finished: 2011-05-24 12:31:10.510000

Cuando la llamada se realiza dentro de ArcMap el retorno es instantánea.

mapDoc = arcpy.mapping.MapDocument("CURRENT")
elements = arcpy.mapping.ListLayoutElements(mapDoc, "GRAPHIC_ELEMENT")

En ambos casos, estoy haciendo referencia al mismo documento de mapa.

El uso de ArcGIS 10 SP2.

Actualización:

  1. Puede que no sea obvio, pero los resultados son instantáneos cuando el script se ejecuta en contra de la "ACTUAL". Especificar cualquier documento de mapa que no sea "ACTUAL" y el guión será más lento.
  2. Yo ejecuta un bucle como Jason sugerido y se encontró poca diferencia entre la primera llamada a ListLayoutElements() y el último. La primera selección se llevó a 28 segundos, mientras que los otros nueve promedio de 24 segundos.
  3. El documento de mapa consta de nueve tramas de datos y nueve leyenda correspondiente de los elementos que se han convertido en los gráficos. Cuando estas "leyendas" están presentes en el documento, a continuación, ListLayoutElements() es lento; cuando se elimina entonces ListLayoutElements() devuelve inmediatamente.

6voto

Paul Puntos 555

Hubo problemas con esto en 10.0, pero hemos allanado todas las que son visibles en los service packs. Usted debe ver una mejora significativa en el rendimiento en ListLayoutElements y amigos con SP1 o SP2 a través de 10.0. Son las llamadas posteriores a la misma función tan lento? Lo que si que añadir el tiempo que se tarda en cargar el documento en ArcMap en cuenta? Habría que llevar a los dos a algo cerca el uno del otro?

Intente esto:

arcpy.AddMessage("  Start: " + str(datetime.now()))
mapDoc = arcpy.mapping.MapDocument(mapDocumentPath)
for counter in xrange(10):
  elements = arcpy.mapping.ListLayoutElements(mapDoc, "GRAPHIC_ELEMENT")
  arcpy.AddMessage("  Finished %i: %s" % (counter + 1, str(datetime.now())))

Fuera de ArcMap, el Documento de Mapa de clases de la necesidad de establecer lo que es esencialmente un hardware contexto para dibujar para asegurarse de que las métricas de los elementos de diseño son correctos. Esto no es necesario en el activo documento de ArcMap porque tiene el hardware de contexto de la ventana de la aplicación, pero se puede explicar en cierta medida, por las diferencias de velocidad.

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