Tenía un requisito similar y armé un complemento QGIS para generar los mapas, basado en un archivo de forma con localidades puntuales para todas las especies (se asume un nombre de taxón único en la tabla de atributos como el identificador común). Mis requisitos no eran tan complejos: no necesitaba información de temporada, títulos o leyendas, pero puede ser un punto de partida útil para usted. Para los aspectos más complejos, deberá utilizar el compositor de mapas. Consulte el libro de cocina PyQGIS para obtener más información al respecto.
Enchufar
El complemento automatiza la creación de los mapas y le permite configurar extensiones, resolución y otros aspectos. Aplica el mismo estilo a la salida que la superposición de cuadrícula. Actualmente solo se ejecuta en la versión de desarrollo de QGIS (1.9 o posterior).
Guión sextante
Antes de crear el complemento, resolví la lógica usando SEXTANTE. Este script de usuario también debería funcionar en 1.8 (no lo he probado). El archivo de estilo de distribución (.qml) es el estilo de las distribuciones de salida (ignora el estilo de la superposición de distribución). Actualmente coloca mapas de salida en el directorio temporal según los valores predeterminados del sistema operativo (/ tmp en Linux y varios lugares en Windows, definidos por la variable de entorno TEMP). Sin embargo, puedes definirlo fácilmente en el código. También deberá editar la extensión y la resolución de salida en el código (y el color de fondo si desea un color diferente para el mar).
#Definition of inputs and outputs
#==================================
##[Scratch]=group
##all_localities=vector
##taxon_field=field all_localities
##africa_map=vector
##sa_map=vector
##grid_layer=vector
##distribution_style_file=file
#Algorithm body
#==================================
from qgis.core import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from sextante.core.QGisLayers import QGisLayers
from sextante.core.SextanteVectorWriter import SextanteVectorWriter
import tempfile
import os
def print_map(taxon,taxon_shp):
#load taxon layer (necessary?)
#QGisLayers.load(taxon_shp,name = "taxon",style = distribution_style_file)
taxon_layer = QgsVectorLayer(taxon_shp,"taxon","ogr")
QgsMapLayerRegistry.instance().addMapLayer(taxon_layer)
taxon_layer.loadNamedStyle(distribution_style_file)
# create image (dimensions 325x299)
img = QImage(QSize(325,299), QImage.Format_ARGB32_Premultiplied)
# set image's background color
color = QColor(192,192,255) # blue sea
img.fill(color.rgb())
# create painter
p = QPainter()
p.begin(img)
p.setRenderHint(QPainter.Antialiasing)
render = QgsMapRenderer()
# create layer set
africa_layer = QGisLayers.getObjectFromUri(africa_map)
sa_layer = QGisLayers.getObjectFromUri(sa_map)
#taxon_layer = QGisLayers.getObjectFromUri(taxon_shp)
lst = []
lst.append(taxon_layer.id())
lst.append(sa_layer.id())
lst.append(africa_layer.id())
render.setLayerSet(lst)
# set extent (xmin,ymin,xmax,ymax)
rect = QgsRectangle(14.75,-36.00,34.00,-21.00)
render.setExtent(rect)
# set output size
render.setOutputSize(img.size(), img.logicalDpiX())
# do the rendering
render.render(p)
p.end()
# save image
#outdir = os.path.dirname(os.path.abspath(output))
tempdir = tempfile.gettempdir()
img.save(os.path.join(tempdir,taxon+".png"),"png")
# remove taxon layer from project
QgsMapLayerRegistry.instance().removeMapLayers([taxon_layer.id()])
tempdir = tempfile.gettempdir()
taxa = sextante.runalg('qgis:listuniquevalues', all_localities, taxon_field, None)['UNIQUE_VALUES'].split(";")
for taxon in taxa:
sextante.runalg('qgis:selectbyattribute', all_localities, taxon_field, 0, taxon)
sextante.runalg('qgis:selectbylocation', grid_layer, all_localities, 0)
filename = os.path.join(tempdir,"taxon.shp") #memory file better?
sextante.runalg('qgis:saveselectedfeatures', grid_layer, filename)
print_map(taxon,filename)