Cómo crear PDFs que contienen mapas empleando la librería PyFPDF de Python

La librería PyFPDF es una forma sencilla de crear PDFs que incluyen mapas; tal como refiere Joel Lawhead en su libro de Learning Geospatial Analysis with Python. No se encuentra en los repositorios de GNU/Linux Debian pero puede instalarse fácilmente a partir del archivo comprimido que se baja de la página del proyecto. Sólo hay que descomprimirlo, moverse al directorio correspondiente y ejecutar, como root, el comando python setup.py install. Si todo va bien, la ejecución de import fpdf en el intérprete de Python no debería producir errores.

Para probar su ejecución se va a adaptar una serie de instrucciones tomadas de una promoción del libro de Lawhead en las cuales se convierte en pdf una imagen *.png del Condado Hancock del Estado de Indiana (USA). Para entender la sintaxis de las instrucciones se remite a la consideración del Manual de Referencia de la librería FPDF 1.7.

En mi caso, abrí QGIS, cargué un shapefile escogido arbitrariamente, ajusté los settings del proyecto a los del shapefile (UTM, zona 19N), lo desmarqué y luego lancé el plugin de GEarthView. Realicé el acercamiento a una zona también escogida arbitrariamente y le coloqué cuatro puntos de control; tal como se visualiza a continuación:

pdf1

Los puntos de control me sirvieron de base para crear un polígono en QGIS (xMín,yMín 648671.97,1062346.91 : xMáx,yMáx 650235.22,1063155.27) con el cual ejecuté nuevamente GEarthView.

pdf2

Recorté la zona con el Gimp y la denominé como fabulosa.png; correspondiente a la ficticia “Finca La Fabulosa”:

fabulosa

La abrí nuevamente en el GIMP para ver la proporción de la imagen en columnas x filas (940×540 = 1,740740741) e intenté re escalarla (Imagen -> Escalar la imagen) para que la salida del pdf con la imagen abarcara la mayor parte del área útil de la hoja en modo “Landscape” y con la misma proporción (230×132 = 1,742424242).

Ejecuté las siguientes líneas de código; que añaden como encabezado del pdf el nombre del sitio y el vértice superior izquierdo e inferior derecho del cuadrilátero de la imagen (UTM 19N, WGS 84).

#!/usr/bin/env python
#-*- coding: utf-8

from os import system
import fpdf

system("clear")

# PDF constructor:
# Landscape, millimeter units, A4 page size
pdf=fpdf.FPDF("L", "mm", "A4")

# create a new page
pdf.add_page()

# Set font: arial, bold, size 20
pdf.set_font('Arial','B',20)

# Layout cell: 40 x 25mm, title, no border, left
pdf.cell(40,25,'Hacienda La Fabulosa', border=0, ln=2, align="L")
pdf.cell(0,0,'xMin,yMin: 648671.97,1062346.91', border=0, ln=2, align="L")
pdf.cell(0,25,'xMax,yMax: 650235.22,1063155.27', border=0, ln=2, align="L")
pdf.image("fabulosa.png",33,60,230,132)

# Save the file: filename, F = to file System
pdf.output('fabulosa.pdf','F')

El resultado es el siguiente:

fpdf

y pesa lo mismo que la imagen original. Por tanto, no se logra beneficio adicional transformando en pdf; con el agravante de que para incorporarlo al SIG habría que transformar el pdf nuevamente en imagen o, si es el caso, en dxf. Con estos últimos si quizás valdría la pena porque podría ser un sustituto del ArcScan. Tendría que probarlo.

Esta entrada fue publicada en Código Python, Debian, SIG, Software Libre. Guarda el enlace permanente.

3 respuestas a Cómo crear PDFs que contienen mapas empleando la librería PyFPDF de Python

  1. Pingback: Cómo crear PDFs que contienen mapas empl...

  2. david arturomendez matute dijo:

    que bien gracias

  3. Pingback: Cómo convertir un PDF con información geográfica en archivos vectorial o ráster | El Blog de José Guerrero

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s