Crear un libro de mapas con mapas insertos

Se pueden integrar secuencias de comandos de mapa en las páginas controladas por datos para crear un libro de mapas que incluya mapas insertados personalizados en páginas diferentes, utilizando un único documento de mapa. Se puede introducir una lógica personalizada para controlar no sólo la visibilidad del mapa insertado, sino también su tamaño, ubicación y extensión.

Imagen de muestra de un libro de mapas con mapas insertos

Crear su libro de mapas

El primer paso es crear el documento de mapa y establecer las Páginas controladas por datos. Querrá diseñar un diseño de línea base que todas las páginas compartirán.

¿Qué son las Páginas controladas por datos?

Agregar el mapa inserto al diseño

Después de que tenga su diseño de página básico, debe insertar un marco de datos que servirá como el mapa inserto.

Pasos:
  1. Haga clic en el menú Insertar y elija Marco de datos.
  2. Déle un nombre único al marco de datos. Este nombre se utilizará para identificar el marco de datos en la secuencia de comandos de exportación.
  3. Haga clic en Aceptar para cerrar el cuadro de diálogo Propiedades del marco de datos.
  4. Continúe para crear el mapa inserto al agregar las capas necesarias y simbolizarlas según desee.

Establecer los mapas insertos personalizados para páginas individuales

Debido a que la extensión, tamaño y posición del mapa inserto se establecerá para páginas individuales durante la exportación, debe conocer estos valores con anterioridad para que pueda hacer uso de ellos dentro de la secuencia de comandos de exportación. Esto significa que primero debe decidir qué páginas deben tener un mapa inserto. Luego deberá navegar a cada una de esas páginas, configurar el diseño como desee que aparezca en el producto final, y a continuación registrar la configuración adecuada que se utilizará en la secuencia de comandos final.

Los siguientes pasos lo llevan por el proceso de registrar manualmente la información del mapa inserto necesaria para una página en la serie de mapas. Estos pasos se deben repetir para cada página que contenga un mapa inserto.

Pasos:
  1. Navegue a una página que incluirá un mapa inserto. Registre el valor de índice de la página al abrir la barra de herramientas Páginas controladas por datos y cambiar la visualización a Mostrar página.
    Menú de la lista desplegable de la barra de herramientas Páginas controladas por datos
  2. Ubique y asigne el tamaño del marco de datos del mapa inserto en la página y establezca su extensión.
  3. Registre los valores Superior, Izquierdo, Derecho e Inferior de la extensión actual del mapa inserto. Para obtener esta información, abra el cuadro de diálogo Propiedades del Marco de datos del mapa inserto, haga clic en la pestaña Marco de datos y, a continuación, cambie la extensión a Extensión fija para que los valores de coordenadas aparezcan.
    Opción Extensión fija en la pestaña Marco de datos del cuadro de diálogo Propiedades del marco de datos
  4. Registre la información que necesite y cambie la extensión de nuevo a Automático. Si la extensión se establece como algo distinto a Automático, no podrá cambiarla en una secuencia de comandos. Los otros tipos de extensión son fijos y recibirá un error de tiempo de ejecución.
  5. Haga clic en la pestaña Tamaño y posición y registre los valores de posición x- y y-. Tenga en cuenta que estos reflejan el punto de anclaje actual y es necesario actualizarlos si el punto de anclaje se modifica alguna vez.
  6. Registre los valores de la altura y el ancho del marco de datos también.
  7. Cierre el cuadro de diálogo Propiedades del Marco de datos , teniendo cuidado de no aplicar los cambios no deseados.

NotaNota:

Puede registrar toda esta información de forma manual, o podría ejecutar la siguiente secuencia de comandos en la ventana Python de ArcMap para escribir la información a un archivo de texto. Es posible que tenga que ajustar los nombres de variables, pero la información se escribirá de tal modo que podrá copiarla y pegarla en la secuencia de comandos.

El siguiente bloque de códigos se puede ejecutar en la ventana Python de ArcMap, y escribirá la información sobre el diseño de página actual en un archivo de texto específico.

import os   # Create an output location variable outputDirectory = r"C:\temp"    # Open a text file to append info to insetTxt = outputDirectory + r"\insetInfo.txt" FILE = open(insetTxt, "a")  try:     mxd = arcpy.mapping.MapDocument("current")     df = arcpy.mapping.ListDataFrames(mxd, "Inset*")[0]     ddp = mxd.dataDrivenPages     infoList = []     infoList.append("\n")     # The following is information you would like to record     # The text is written so it can be pasted directly into your script     # This example assumes that 'pgIndex' is the variable for the current page id     # and that 'dataFrame' is the variable for the data frame containing the inset map     infoList.append("if (pgIndex == " + str(ddp.currentPageID) + "):\n")     infoList.append("\tdataFrame.elementPositionX = " + str(df.elementPositionX) + "\n")      infoList.append("\tdataFrame.elementPositionY = " + str(df.elementPositionY) + "\n")     infoList.append("\tdataFrame.elementHeight = " + str(df.elementHeight) + "\n")      infoList.append("\tdataFrame.elementWidth = " + str(df.elementWidth) + "\n")     infoList.append("\tinsetExtent_" + str(ddp.currentPageID) + " = arcpy.Extent(" +                     str(df.extent.XMin) + ", " + str(df.extent.YMin) + ", " +                      str(df.extent.XMax) + ", " + str(df.extent.YMax) + ")" + "\n")                infoList.append("\tdataFrame.extent = insetExtent_" + str(ddp.currentPageID) + "\n")           FILE.writelines(infoList) except:     print "Writing to file failed"  # Close the text file FILE.close()
NotaNota:

Es posible que haya otros elementos y la configuraciones que desea cambiar página por página, como el texto de escala del mapa inserto. Para ello, siga los pasos similares a los que se describen para el mapa inserto para agregar los elementos a su mapa y registrar su información. A continuación, agregue el código a su secuencia de comandos para agregar o eliminar estos elementos según sea necesario durante la exportación.

Agregar un indicador de extensión

Puede agregar un indicador de extensión a su mapa principal para resaltar el área que se muestra en el mapa inserto.

Pasos:
  1. Abra el cuadro de diálogo Propiedades del marco de datos de su mapa principal y haga clic en la pestaña Indicadores de extensión.
  2. Agregue el marco de datos Mapa inserto.
    Marco de datos agregado al indicador Mostrar extensión para esta lista de marcos de datos
  3. Utilice las opciones disponibles para establecer su apariencia.

Preparar el documento de mapa para la exportación

Después de haber creado el indicador de extensión y registrado la información necesaria para la secuencia de comandos, cree el documento de mapa de modo que no vea el indicador de extensión o mapa inserto en cada página.

Pasos:
  1. Mueva el marco de datos que contiene el mapa inserto del área de impresión de la página.
  2. Cambie la extensión del mapa inserto a algo mucho mayor que la extensión del marco de datos principal de manera que el indicador de extensión no aparezca en las páginas en las que no lo desea.
    Haga una muestra del diseño de página con un marco de datos inserto ubicado fuera de la página y acercado a una extensión grande
  3. Guarde el documento de mapa.

Escribir una secuencia de comandos de exportación

La siguiente es una muestra de secuencia de comandos que exporta un libro de mapas con mapas insertos en las páginas 1 y 3.

La siguiente secuencia de comandos exporta un libro de mapas con mapas insertos en las páginas 1 y 3.

import arcpy, os # Create an output directory variable # outDir = r"C:\Project\MapBook\final_output"    # Create a new, empty pdf document in the specified output directory # This will be your final product finalpdf_filename = outDir + r"\FinalMapBook.pdf" if os.path.exists(finalpdf_filename): # Check to see if file already exists, delete if it does   os.remove(finalpdf_filename) finalPdf = arcpy.mapping.PDFDocumentCreate(finalpdf_filename)   # Create a Data Driven Pages object from the mxd you wish to export # mxdPath = r"C:\Project\MapBook\zipCodePopulation.mxd" tempMap = arcpy.mapping.MapDocument(mxdPath) tempDDP = tempMap.dataDrivenPages  # Create objects for the layout elements that will be moving, e.g., inset data frame, scale text dataFrame = arcpy.mapping.ListDataFrames(tempMap, "Inset Map")[0]      # Instead of exporting all pages at once, you will need to use a loop to export one at a time   # This allows you to check each index and execute code to add inset maps to the correct pages # for pgIndex in range(1, tempDDP.pageCount + 1, 1):      # Create a name for the pdf file you will create for each page   temp_filename = r"C:\Project\MapBook\temp_pdfs\MB_" + \                             str(pgIndex) + ".pdf"   if os.path.exists(temp_filename):     os.remove(temp_filename)      # The following if statements check the current page index against given values   # If the current page index matches, it will execute code to set up that page   # If not, the page remains as is   # Note: If you created a text file containing this information, this is where   # you would paste in that code      # Code for setting up the inset map on the first page #   if (pgIndex == 1):     # Set position of inset map to place it on the page layout     dataFrame.elementPositionX = 0.5     dataFrame.elementPositionY = 0.6     # Set the desired size of the inset map for this page     dataFrame.elementHeight = 2.0     dataFrame.elementWidth = 2.0     # Set the desired extent for the inset map     insetExtent_1 = arcpy.Extent(-88.306778229417176, 41.590293951894907, -87.609922645465474, 42.300975912784295)     dataFrame.extent = insetExtent_1     # Code for setting up the inset map on the third page #   if (pgIndex == 3):     # Set up inset map     dataFrame.elementPositionX = 3.25     dataFrame.elementPositionY = 7     dataFrame.elementHeight = 2.45     dataFrame.elementWidth = 3.0     insetExtent_3 = arcpy.Extent(-83.889191535, 41.870516098, -82.875460656, 42.72572048)     dataFrame.extent = insetExtent_3    # Code to export current page and add it to mapbook   tempDDP.exportToPDF(temp_filename, "RANGE", pgIndex)   finalPdf.appendPages(temp_filename)       # Clean up your page layout by moving the data frame and resetting its extent after exporting the page   # This will reset the page to the basic layout before exporting the next page   #      dataFrame.elementPositionX = 10 # Move inset data frame off the page   dataFrame.scale = 350000000 # Change scale so extent indicator no longer visible in main data frame   arcpy.RefreshActiveView()  # Clean up # del tempMap  # Update the properties of the final pdf # finalPdf.updateDocProperties(pdf_open_view="USE_THUMBS",                              pdf_layout="SINGLE_PAGE")  # Save your result # finalPdf.saveAndClose()

En conclusión, al seguir este flujo de trabajo, puede crear libros de mapas con mapas insertos u otras entidades especiales sólo en algunas páginas mediante un único documento de mapa.

Temas relacionados

9/11/2013