6 votos

Datos páginas con mapa móvil leyenda/recuadro

He creado una herramienta de secuencia de comandos para ArcMap 10.3.1 que se mueven una leyenda en torno a un marco de datos de modo que no obstruya una determinada capa del mapa cuando el uso de las páginas controladas por datos. Sin embargo, me estoy encontrando con un problema interesante al intentar alinear la leyenda a la derecha del borde del marco de datos.

Aquí está el código que se usa para alinear la leyenda (the legend está anclado en la parte inferior izquierda):

inset.elementPositionX = (DataFrame.elementPositionX +
   DataFrame.elementWidth) - inset.elementWidth

Ahora, este script funciona perfectamente hasta que he "mostrar Sólo las clases que son visibles en la extensión de mapa actual" casilla marcada con la leyenda de propiedades. Tener marcada esta opción hace que la leyenda de tamaño a medida que el programa se repite en cada página (en función de lo que es visible en el mapa), y cuando lo hace se deja un hueco o saturaciones de los datos borde del marco.

Lo interesante es que mientras el "mostrar Sólo las clases que son visibles en la extensión de mapa actual" está marcada en la leyenda de propiedades, si me iterar a través de cada página de forma manual, la ejecución de este pequeño alinear fragmento de código en la ventana de python después de cambiar de página, funciona perfectamente.

Entonces, mi pregunta es: ¿por qué esto no funciona mientras se está ejecutando en una herramienta de secuencia de comandos, pero cuando se ejecuta manualmente? Es casi como si de ArcMap no es capaz de seguir con el mismo (si es que tiene algún sentido...)

Nota* esta herramienta fue construida para que se ejecute en un abrir MXD, no fuera de uno.

Para probar probar esto:

Abrir un MXD, añadir dos capas: una capa de un índice de la capa de DDP, y una segunda capa que es simbolizado por categorías. Asegúrese de que no todas las categorías se muestran en cada DDP. A continuación, inserte una leyenda, ir a propiedades, seleccione la casilla "mostrar Sólo las clases que son visibles en la extensión de mapa actual". Entonces, como usted haga clic a través de su DDPs, su leyenda debe (a menos que todas las descripciones de elementos son de la misma anchura) cambiar de forma.

A continuación, agregue esto a la ventana de python:

mxd = arcpy.mapping.MapDocument("Current")

SecondaryObject = "Legend"
inset = arcpy.mapping.ListLayoutElements(mxd, "", SecondaryObject)[0]

PrimeObject =  "Main View"
DataFrame = arcpy.mapping.ListDataFrames(mxd, PrimeObject)[0]

inset.elementPositionX = (DataFrame.elementPositionX + DataFrame.elementWidth) - inset.elementWidth

Siguiente, iterar a través de su DDP para observar el fragmento de la acción, de trabajo.


En la versión completa de la DDP con muebles leyenda de secuencia de comandos, el alinear tiene lugar después de la DDP se cambia a cada nueva página. Primero la leyenda se mueve hacia atrás a la posición inicial, y si el "intersect" función devuelve > 0 a partir de allí, se mueve a una nueva posición:

for pageNum in range(1, mxd.dataDrivenPages.pageCount + 1):
    #setup naming and path for output maps
    path = mxd.filePath
    bn = os.path.basename(path)[:-4]
    mxd.dataDrivenPages.currentPageID = pageNum   

    insetDefaultX = inset.elementPositionX
    insetDefaultY = inset.elementPositionY

    #check defualt position for intersect
    intersect = checkIntersect(inset)

    if intersect == 0: #if it doesn't intersect, print the map
        arcpy.mapping.ExportToEPS(mxd, exportFolder + "\\" + bn + "_"+ str(pageNum) + ".eps", "Page_Layout",640,480,300,"BETTER","RGB",3,"ADAPTIVE","RASTERIZE_BITMAP",True,False)

    else: #intersect != 0: #move inset to SE corner
        inset.elementPositionX = (DataFrame.elementPositionX + DataFrame.elementWidth) - inset.elementWidth
        inset.elementPositionY = DataFrame.elementPositionY

1voto

CaedJar4 Puntos 18

Inserte arcpy.RefreshActiveView() en tu escritura antes de la prueba de traslapo de leyenda.

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