J'avais une exigence similaire et j'ai créé un plugin QGIS pour générer les cartes, basé sur un fichier de formes avec des localités ponctuelles pour toutes les espèces (il suppose un nom de taxon unique dans la table attributaire comme identifiant commun). Mes exigences n'étaient pas aussi complexes - je n'avais pas besoin d'informations saisonnières, de titres ou de légendes, mais cela peut être un point de départ utile pour vous. Pour les aspects plus complexes, vous devrez utiliser le composeur de cartes. Voir le livre de recettes PyQGIS pour en savoir plus.
Brancher
Le plugin automatise la création des cartes et vous permet de configurer les étendues, la résolution et d'autres aspects. Il applique le même style à la sortie que votre superposition de grille. Actuellement, il ne fonctionne que sur la version de développement de QGIS (1.9 ou ultérieure).
Script sextante
Avant de créer le plugin, j'ai élaboré la logique en utilisant SEXTANTE. Ce script utilisateur devrait également fonctionner en 1.8 (je ne l'ai pas testé). Le fichier de style de distribution (.qml) est le style des distributions de sortie (il ignore le style de la superposition de distribution). Actuellement, il place les mappes de sortie dans le répertoire temp en fonction des paramètres par défaut de votre système d'exploitation (/ tmp sous Linux et divers emplacements dans Windows - définis par la variable d'environnement TEMP). Vous pouvez assez facilement définir cela vous-même dans le code. Vous devrez également modifier l'étendue et la résolution de sortie dans le code (et la couleur d'arrière-plan si vous souhaitez une couleur différente pour la mer).
#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)