Ben benzer bir gereksinim vardı ve tüm türler için nokta yerelliği olan bir şekil dosyasına dayalı haritalar oluşturmak için bir QGIS eklentisi koymak (ortak tanımlayıcı olarak öznitelik tablosunda benzersiz bir takson adı varsayar). Gereksinimlerim o kadar karmaşık değildi - mevsimsel bilgilere, başlıklara veya efsaneye ihtiyacım yoktu, ama sizin için yararlı bir başlangıç noktası olabilir. Daha karmaşık yönler için, harita oluşturucuyu kullanmanız gerekir. Bununla ilgili daha fazla bilgi için PyQGIS yemek kitabına bakınız .
Eklenti
Eklenti, haritaların oluşturulmasını otomatikleştirir ve uzantıları, çözünürlüğü ve diğer yönleri yapılandırmanıza olanak tanır. Izgara katmanınızla çıktıya aynı stili uygular. Şu anda sadece QGIS'in (1.9 veya üzeri) geliştirme sürümünde çalışıyor.
Sextante alfabesi
Eklentiyi yapmadan önce SEXTANTE kullanarak mantığı çalıştım. Bu kullanıcı betiği de 1.8 olarak çalışmalıdır (test etmedi). Dağıtım stili dosyası (.qml), çıktı dağıtımlarının stilidir (dağıtım katmanının stilini yoksayar). Şu anda çıktı haritalarını işletim sisteminizin varsayılanlarına (Linux'ta / tmp ve Windows'daki çeşitli yerlerde - TEMP çevresel değişkeni tarafından tanımlanan) geçici dizine yerleştirir. Yine de kolayca kodu kendiniz tanımlayabilirsiniz. Ayrıca koddaki kapsamı ve çıktı çözünürlüğünü (ve deniz için farklı bir renk istiyorsanız arka plan rengini) düzenlemeniz gerekir.
#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)