En este articulo aprenderás cómo usar datadriven page para controlar varios dataframe en un archivo de ArcMap y generar varios archivos de ArcGIS (MXD) con las distintas vistas utilizando Python. Sin necesidad de programar.
Seguro encontraste muy útil mi artículo "PYTHON GIS - Exportar Data Driven Pages a Archivos ArcGIS / ArcMap (MXD) individuales", pero en ese artículo se por supuesto que sólo hay un dataframe principal que necesita ser controlado por datadriven page, pero ahora iremos más allá, y lograremos lo que muchas veces me dijeron que era imposible, “controlar” varios dataframe con datadriven page…
Supongamos que necesitas en un mapa mostrar la ruta de un proyecto lineal de gran longitud a una escala muy detallada, tienes dos opciones:
¿Cómo mostrar vistas detalladas a lo largo de una línea?
Opción 1: usar Strip Map Index para generar una guadricula orientada con ese alineamiento y activar datadriven page con esa cuadricula en un solo dataframe. El resultado será un archivo MXD con el recorrido de toda la línea.
Pros: -Mayor rapidez, incluso si hay ajustes posteriores. Contras: -La cantidad de páginas de mapas necesarias puede llegar a números exorbitantes, y poco practico si hay que imprimir los mapas.
Opción 2: usar Strip Map Index para generar una guadricula orientada con ese alineamiento, crear dos o tres dataframe, y hacer coincidir cada grilla a los distintos dataframe, con todo y orientación manualmente, una vez que se han ajustados los dataframe hay que guardar el archivo y hacer lo propio con las grillas subsiguientes y repetir el procedimiento hasta haber cubierto todo el alineamiento. El resultado serán varios archivos MXD que muestran en recorrido de la línea en varios dataframe.
Pros: -Uso optimo del espacio de las páginas de los mapas, reduciendo considerablemente el número de archivos y/o salidas gráficas a imprimir. Contras: Mucho de consumo de tiempo al momento de generar los mapas y las correcciones pueden ser muy engorrosas al tener que corregir cada archivo individualmente.
Con el siguiente procedimiento aprenderás como combinar ambas opciones en una sola suprimiendo los contras de ambas, serás muchísimo más eficiente ya que obtendrás el resultado de la segunda opción sin el desgaste de tiempo que esta forma de hacerlo implica, todo esto utilizando código Python (No te preocupes no necesitaras saber programar para lograrlo).
Aunque no sea necesario saber programar para llevar a cabo este procedimiento, he de reconocer que es uno de los códigos más complicados que he creado, sigue con mucha atención los siguientes pasos:
¿Cómo usar Data Driven Page para multiples Dataframes utilizando Python?
Paso 0: Crear un mapa que tenga todos los dataframe a utilizar (En este caso supongamos que sean dos dataframe, VISTA_01 [a], y VISTA_02 [b]).
Paso 1: Crear un feature que represente las ventanas que quieres mostrar en los distintos dataframe, las herramientas mas practicas para hacer esto son Grid Index Feature o Strip Map Index, siendo esta ultima la ideal para proyectos donde se deba seguir un alineamiento, y la que usé para este ejemplo.
Paso 2A: Para el feature creado en el paso 1, crea un campo llamado "MAP" del tipo Double según el procedimiento mostrado a continuación.
Paso 2B: Indicar en el campo "MAP" (a) a que mapa pertenecen las ventanas creadas. Por ejemplo: si hay dos dataframes y el número de vistas es cuatro, Las vistas uno y dos estarán en el MAPA 1, por lo tanto, para estas vistas el campo MAP será diligenciado con el número 1 (b); Por otra parte las vistas tres y cuatro estarán en el MAPA 2, por lo que el campo MAP para las vistas tres y cuatro se llenará con el número 2 (c), así en función del número de vistas generadas y el número de dataframe contemplados en el archivo MXD este procedimiento se repetirá con todas las vistas representadas por los polígonos creados en el feature del paso 1.
Paso 3: Para el feature creado en el paso 1, crea un campo llamado "CUAD" del tipo Double según lo visto en el paso 2A e indicar ahí a que dataframe pertenecen las ventanas creadas (Por ejemplo si hay dos dataframes y el número de vistas es cuatro, La vista uno y la vista tres estarán en el dataframe 1, por lo tanto, para estas vistas el campo CUAD será diligenciado con el número 1 [a]; Por otra parte las vistas dos y cuatro estarán en el dataframe 2, por lo que el campo CUAD para las vistas 2 y 4 se llenará con el número 2 [b], así en función del número de vistas generadas y el número de dataframe contemplados en el archivo MXD).
Paso 4: Arrastra el feature creado en el paso 1 a cada uno de los dataframe (debe estar sobre todas las capas en todos los dataframe [a]), y aplica una Definition Query para dicho feature en cada dataframe según cada valor único del campo CUAD correspondiente al dataframe (Por ejemplo, si hay dos dataframe, significa el campo CUAD sólo puede tener los valores 1 y 2, por lo que se ha de aplicar la Definition Query CUAD = 1 a la capa cargada al dataframe 1 en la primera posición [b]; luego aplicar la Definition Query CUAD = 2 y sobre la capa cargada al dataframe 2 en la primera posición [c]).
NOTA: Para ver una explicación mas detallada de como crear una Definition Query, revisar mi articulo "PYTHON GIS - Como modificar y/o crear una Definition Query a una capa dentro de varios archivos de ArcGIS (ArcMap / MXD)", sección "¿Cómo modificar y/o crear una expresión SQL una capa de ArcGIS / ArcMap?".
Paso 5: Definir la escala de trabajo para cada uno de los dataframe en la barra de herramienta "Standard", cada dataframe debe ser activado para que el ajuste de escala surta efecto (En este caso la escal de trabajo es 1:5000).
Paso 6: Configurar el datadriven page en el primer dataframe (a), especificando el Sort field con el campo MAP (b), el Name field (No es relevante que campo se utilice) , el Angle Field (sólo si se usó Strip Map Index [c]), y en la pestaña "Extent" (d) marcar la opción "Center And Mantain Current Scale" (e).
Paso 7: Copiar el siguiente código en un blog de notas.
Paso 8: Modificar en la línea #04 del código la palabra "VISTA_01" y colocar el nombre que se quiera utilizar para el primer dataframe.
Paso 9: Modificar en la línea #15 del código la palabra "VISTA_02" y colocar el nombre que se quiera utilizar para el segundo dataframe.
Paso 10: Modificar en la línea #12 del código el número 5000 y colocar el denominador de la escala a emplear en el mapa para el primer dataframe (Igual a la establecida en el paso 5).
Paso 11: Modificar en la línea #21 del código el número 5000 y colocar el denominador de la escala a emplear en el mapa para el segundo dataframe (Igual a la establecida en el paso 5).
Paso 12: Modificar en la línea #24 del código la ruta "C:\EJEMPLO\EJEMPLO" por la ruta donde se han de generar y guardar los archivos MXD; en esa misma línea modificar la palabra “ARCHIVO_” por el prefijo que tendrán todos los archivos MXD.
Paso 13: Abrir la ventana Python en la barra de herramientas Standard (Esto debe hacerse en el archivo MXD creado en el paso 0).
Paso 14: Copiar el código modificado en la ventana Python y presionar la tecla Enter o Intro dos veces.
Al cabo de unos segundos veras como comienzan aparecer los archivos MXD en la ruta especificada (a), y al abrirlos notaras como cada uno tiene la vista correspondiente (b).
Notas:
- Actualmente, el código trabaja con dos dataframe, si necesitas utilizar un tercer dataframe debes copiar el código desde la línea #14 hasta la línea #23, situarte en la línea #23 presionar Enter o Intro y pegar el código, seguidamente hacer los ajustes necesarios mostrados en los pasos 9 y 11.
- Usar este código requiere mucha imaginación para poder preparar los datos y visualizar el producto final mucho antes de que esté listo, pero si logras dominarlo te aseguro que serás más productivo que 20 personas juntas, no necesitas más que un solo archivo de ArcMap para producir decenas de mapas de manera óptima, sin importar la longitud de una línea, siempre has de concentrarte en pulir un solo archivo.
Espero hayas disfrutado este artículo, próximamente subiré un video explicativo del procedimiento que podrás consultar en este blog. Guarda mi blog entre tus enlaces favoritos, estaré subiendo muchos más trucos de este estilo, recuerda que puedes hacer llegarme tus inquietudes en la página de contacto o deja tu comentario, estaré atento a responder.











