मेरे पास एक समान आवश्यकता थी और सभी प्रजातियों के लिए बिंदु इलाकों के साथ आकृति के आधार पर मैप्स उत्पन्न करने के लिए QGIS प्लगइन को एक साथ रखा गया था (यह सामान्य पहचानकर्ता के रूप में विशेषता तालिका में एक अद्वितीय टैक्सन नाम मानता है)। मेरी आवश्यकताएं उतनी जटिल नहीं थीं - मुझे मौसमी जानकारी, शीर्षक या किंवदंती की आवश्यकता नहीं थी, लेकिन यह आपके लिए एक उपयोगी शुरुआती बिंदु हो सकता है। अधिक जटिल पहलुओं के लिए, आपको मानचित्र संगीतकार का उपयोग करने की आवश्यकता होगी। उस पर अधिक के लिए PyQGIS कुकबुक देखें ।
लगाना
प्लगइन नक्शे के निर्माण को स्वचालित करता है, और आपको विलुप्त होने, रिज़ॉल्यूशन और अन्य पहलुओं को कॉन्फ़िगर करने की अनुमति देता है। यह आपके ग्रिड ओवरले के रूप में आउटपुट के लिए एक ही शैली लागू करता है। वर्तमान में यह केवल QGIS (1.9 या बाद के) के विकास संस्करण पर चलता है।
Sextante लिपि
प्लगइन बनाने से पहले मैंने SEXTANTE का उपयोग करके तर्क को काम किया। यह उपयोगकर्ता स्क्रिप्ट 1.8 में भी काम करना चाहिए (इसका परीक्षण नहीं किया है)। वितरण शैली फ़ाइल (.qml) आउटपुट वितरण की शैली है (यह वितरण ओवरले की शैली को अनदेखा करता है)। वर्तमान में यह आपके ऑपरेटिंग सिस्टम डिफॉल्ट्स (लिनक्स में tmp, और विंडोज में विभिन्न स्थानों पर आधारित - TEMP पर्यावरण चर द्वारा परिभाषित) के आधार पर टेंप डायरेक्टरी में आउटपुट मैप देता है। आप कोड में हालांकि खुद को आसानी से परिभाषित कर सकते हैं। आपको कोड में सीमा और आउटपुट रिज़ॉल्यूशन (और यदि आप समुद्र के लिए एक अलग रंग चाहते हैं तो पृष्ठभूमि रंग) को संपादित करने की आवश्यकता होगी।
#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)