Cuando se trata de la misma zona que se va a mostrar en varios mapas, utilizo páginas controladas por datos, que son idénticas (¿rectángulos?) en términos de geometría. El título del mapa y otras cosas se almacenan en los campos pertinentes de la capa de páginas.
El script oculta/desoculta los grupos mirando los nombres de los grupos. Así no hay drama cuando se pide cambiar pequeñas cosas comunes a un conjunto de mapas, por ejemplo, el estado de BORRADOR a FINAL en cualquier número de mapas.
Para que script funcione:
- agrupar las capas por páginas en la tabla de contenidos. Convención de nomenclatura de grupos: PAGE_01 Geología, PAGE_02_Topografía, PAGE_03 Cualquier cosa etc.
- Coloque las capas vectoriales comunes para todos los mapas (si las hay) en la parte superior de su tabla de contenido.
- Coloque las capas rasterizadas comunes para todos los mapas (imágenes aéreas) en la de su tabla de contenido.
- Utilice la opción en la leyenda para mostrar sólo las capas visibles
script tiene 1 parámetro - carpeta de salida, donde se guardarán los mapas PAGE_01.pdf, PAGE_02.pdf etc.
Precaución : después de la exportación de todos los mapas, cerrar ArcMap activo con mxd y abrir de nuevo, si usted quiere hacer algunos cambios y volver a imprimir los mapas. Por alguna razón desconocida para mí (tal vez la configuración del PC), script podría atascado en la segunda exportación en la primera página.
# EXPORTS MAPS BY SWITCHING GROUPS VISIBILITY ON/OFF
import arcpy, traceback, os, sys, time
outFolder=arcpy.GetParameterAsText(0)
# JUST IN CASE
from arcpy import env
env.overwriteOutput = True
env.workspace = outFolder
## ERROR HANDLING
def showPyMessage():
arcpy.AddMessage(str(time.ctime()) + " - " + message)
try:
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]
allLayers=arcpy.mapping.ListLayers(mxd,"PAGE*")
groupLayers=[]
for m in allLayers:
if m.isGroupLayer: groupLayers.append(m)
# SHUFFLE THROUGH PAGES
ddp = mxd.dataDrivenPages
thePagesLayer = arcpy.mapping.ListLayers(mxd,ddp.indexLayer.name)[0]
for pageID in range(1, ddp.pageCount+1):
ddp.currentPageID = pageID
code='PAGE_%s' %str(pageID).zfill(2)
for group in groupLayers:
group.visible=(code in group.name)
fName='%s%s%s.pdf' %(outFolder,os.sep,code)
arcpy.RefreshActiveView()
time.sleep(3)
ddp.exportToPDF(fName,"CURRENT",resolution=144)
arcpy.AddMessage('%s exported '%fName)
except:
message = "\n*** PYTHON ERRORS *** "; showPyMessage()
message = "Python Traceback Info: " + traceback.format_tb(sys.exc_info()[2])[0]; showPyMessage()
message = "Python Error Info: " + str(sys.exc_type)+ ": " + str(sys.exc_value) + "\n"; showPyMessage()