Saya memiliki persyaratan yang sama dan mengumpulkan plugin QGIS untuk menghasilkan peta, berdasarkan pada shapefile dengan titik lokalitas untuk semua spesies (diasumsikan nama takson yang unik dalam tabel atribut sebagai pengidentifikasi umum). Persyaratan saya tidak serumit - saya tidak memerlukan informasi musiman, judul atau legenda, tetapi ini mungkin merupakan titik awal yang berguna bagi Anda. Untuk aspek yang lebih kompleks, Anda perlu menggunakan komposer peta. Lihat buku resep PyQGIS untuk informasi lebih lanjut tentang itu.
Plugin
Plugin mengotomatiskan pembuatan peta, dan memungkinkan Anda untuk mengonfigurasi luasan, resolusi, dan aspek lainnya. Ini menerapkan gaya yang sama pada output dengan overlay kisi Anda. Saat ini hanya berjalan pada versi pengembangan QGIS (1.9 atau lebih baru).
Skrip sextante
Sebelum saya membuat plugin saya mengerjakan logika menggunakan SEXTANTE. Skrip pengguna ini juga harus berfungsi dalam 1.8 (belum mengujinya). File gaya distribusi (.qml) adalah gaya distribusi output (mengabaikan gaya overlay distribusi). Saat ini ia menempatkan peta output di direktori temp berdasarkan pada standar sistem operasi Anda (/ tmp di Linux, dan berbagai tempat di Windows - ditentukan oleh variabel lingkungan TEMP). Anda dapat dengan mudah mendefinisikan itu sendiri dalam kode. Anda juga perlu mengedit tingkat dan resolusi output dalam kode (dan warna latar belakang jika Anda menginginkan warna yang berbeda untuk laut).
#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)