Como usuario de ArcGIS, seguramente en más de una ocasión has tenido la necesidad de abrir un proyecto .mxd con el único fin de generar un mapa en PDF de la composición preparada.
Y muy probablemente en el tiempo que tarda en abrirse el programa te habrás preguntado:
– ¿es realmente necesario tener que abrir ArcGIS para exportar el mapa a PDF?
La respuesta es: NO, no es necesario.
Gracias a ArcPy podemos exportar un mxd a pdf, jpg, png, etc. Partiendo de una composición de mapa de ArcGIS, sin necesidad de tener abierto ese mxd.
Qué es ArcPy
ArcPy es una biblioteca específica de ESRI creada para programar y automatizar procesos GIS, esta biblioteca se integra dentro de Python, es decir, no es un lenguaje específico de ESRI, sino que han desarrollado un paquete con Clases, Funciones, etc. específicas para desarrollos GIS bajo el lenguaje de Python, lo que significa que además de estas funcionalidades podemos utilizar otras tantas de otras bibliotecas y combinarlas bajo un lenguaje de programación preciso a la par que sencillo.
¿Cómo acceder a la sintáxis?
Evidentemente nuestro grado de conocimientos y de destreza con la programación nos permitirá sacarle más ventaja a la ArcPy.
Pero si lo que queremos es la simple ejecución de una herramienta o una acción concreta te recomendamos consultar la ayuda de ArcGIS http://desktop.arcgis.com/en/.
Afortunadamente la documentación que nos ofrece es muy clara, estructurada y siempre se acompaña de un ejemplo práctico.
Para el caso que nos ocupa: generar un mapa en formato pdf a partir del mxd especificado.
Introducimos en el buscador las palabras clave de la búsqueda: mxd to pdf arcpy.
Para facilitar la búsqueda puedes hacer un filtrado que muestre sólo los resultados de tipo Ayuda (Help) en el producto ArcGIS Desktop.
El primer enlace nos aporta la información que necesitamos:(http://desktop.arcgis.com/en/desktop/latest/analyze/arcpy-mapping/exporttopdf.htm)
En el apartado de Sintaxis podemos ver la sentencia para ejecutar la acción:
Las sentencias para ejecutar herramientas GIS siempre mantienen la misma estructura:
arcpy + punto + módulo específico (si tiene) + nombre de la herramienta + _apellido de la herramienta (si tiene)+ (parámetros entre paréntesis separados por comas, {parámetros opcionales})
Siguiendo esta estructura, vemos que los dos únicos elementos que necesitamos para la ejecución son el mxd de entrada y el pdf de salida. Ahora podemos fijarnos en alguno de los ejemplos de la ayuda para ver más claramente su uso.
OK! Ya lo tenemos! Parece sencillo…. Y lo es!
- Con la primera línea estamos importando la biblioteca arcpy, esta sentencia es necesaria siempre que el código se ejecute fuera de un entorno de ArcGIS, para que reconozca sus elementos específicos.
- En la segunda línea se define el mxd.
- En la tercera línea se realiza la exportación del mxd al directorio y archivo pdf especificado.
- Y en la cuarta línea se borra el objeto que recoge el mxd, esta práctica no es obligada pero sí muy recomendable.
Manos a la obra: Exportación de un mxd a PDF con Python
Tenemos varias opciones para ejecutar nuestro código.
El modo más fácil e intuitivo es a través de la Ventana de Python de ArcGIS, a la que puedes acceder a través de su icono Python (barra de herramientas Estandar) tanto en ArcMap como en ArcCatalog.
Como ventajas de utilizar este entorno:
- No es necesario importar la Arcpy.
- El texto predictivo nos ayuda con la sintaxis.
- Podemos arrastrar a la ventana determinados elementos, como por ejemplo el mxd en el momento de definirlo, o la ruta de destino.
mxd = arcpy.mapping.MapDocument(r'c:\CURSO_ARCPY\proyectos_mxd\fichas_urbano.mxd') arcpy.mapping.ExportToPDF(mxd,r'c:\CURSO_ARCPY\proyectos_mxd\mapas\fichas_urbano.pdf')
Genial, ya tenemos nuestro pdf en el directorio y con el nombre indicado.
¿Se puede mejorar?
Por supuesto, esta ejecución nos ha resultado útil, sin necesidad de abrir el mxd hemos podido generar su mapa pdf.
Esto puede ser práctico, por ejemplo, cuando la capa que se representa en el proyecto ha cambiado, imaginemos un mapa de climatología que todos los días representa la temperatura de una zona siendo esa capa diferente cada día pero con el mismo nombre y ubicación.
Sin embargo lo habitual es que un mapa presente más cambios: fecha, título, zona de estudio, etc.. De la misma manera que hemos accedido al código para exportar el mapa podemos acceder y ejecutar estas acciones: modificar los elementos de texto, cambiar la extensión, etc..
La mejora también puede proceder de la combinación de este código dentro de otros objetivos como por ejemplo un análisis estadístico con información y mapa, una generación masiva de mapas a partir de un directorio de búsqueda, una generación de una ficha informe junto con la imagen del mapa de situación, etc… las posibilidades son ilimitadas.
¿Se puede optimizar su ejecución?
También, para empezar tendríamos que conservar este fragmento de código, y esto podemos hacerlo bien desde un editor de texto, guardándolo con extensión .py. O bien desde un editor de código, te recomendamos PyScripter (Cómo depurar código Python con PyScripter) porque además de editor es depurador.
Como script, lo suyo es ejecutarlo fuera del entorno de ArcGIS, bien desde PyScripter, o bien desde línea de comandos. Ten en cuenta que en este caso en la primera línea de nuestros scripts si es obligada la importación de la Arcpy: import arcpy
En este artículo puedes ver las distintas opciones para ejecutar nuestro código Python.
Si quiero exportar con frecuencia varios mxd a pdf podría, programar en python que ejecute el proceso solo a los mxd que han sido modificados?
Saludos y felicidadades por la web, tengo una consulta al respecto quiero exportar el mxd (layaout) pero a un archivo CAD. Si me podrían ayudar con eso y si fuese con python seria genial. muchas gracias
Buenos días, actualmente tengo un archivo mpk (Map Package) y quisiera saber como puedo descomprimirlo de una manera sencilla para tener los layers indiviuales. Estaré atento si me pueden colaborar con esto. Gracias
Hola Julián,
Un Map Package contiene un proyecto mxd y las capas que lo contienen. Puedes descomprimir este archivo utilizando ArcCatalog o ArcGIS online. Si trabajas en ArcCatalog, puedes hacer clic derecho en el paquete de mapa y seleccionar Unpack en el menú desplegable. En este artículo tienes más información: http://blogs.esri.com/esri/arcgis/2010/09/30/map-packages-con-t/
Saludos!
Buena explicacion y aporte. Todavia tengo una duda, segun la pagina de ESRI la resolucion del PDF resultante es 300 pdi por defecto. Que pasa si quiero cambiar la resolución del PDF a 100 pdi solamente, usando ese mismo ejemplo?
Muchas gracias Jorge E Rodriguez por tus comentarios.
Como verás en la sintáxis de la herramienta y en la ayuda de la misma, esta opción se fija a través del parámetro «resolution», dado que este parámetro es opcional (fíjate que va entre llaves), no es necesario incluirlo, y por defecto la resolución será de 300 DPI.
Si queremos cambiar este valor tendremos que incluir en la herramienta el argumento requerido con su nombre y la asignación del valor que queramos darle utilizando el operador de igualdad:
arcpy.mapping.ExportToPDF(mxd,r’c:\CURSO_ARCPY\proyectos_mxd\mapas\fichas_urbano_100.pdf’,resolution=100)
Esperamos que nuestra respuesta te sirva de ayuda. Un saludo!