ฉันมีความต้องการที่คล้ายกันและรวบรวมปลั๊กอิน QGIS เพื่อสร้างแผนที่โดยอิงจากไฟล์รูปร่างที่มีจุดท้องถิ่นสำหรับสปีชีส์ทั้งหมด (จะถือว่าชื่อแท็กซอนที่ไม่ซ้ำกันในตารางแอตทริบิวต์เป็นตัวระบุทั่วไป) ความต้องการของฉันไม่ซับซ้อน - ฉันไม่ต้องการข้อมูลตามฤดูกาลชื่อเรื่องหรือคำอธิบายภาพ แต่มันอาจเป็นจุดเริ่มต้นที่มีประโยชน์สำหรับคุณ สำหรับแง่มุมที่ซับซ้อนยิ่งขึ้นคุณจะต้องใช้ผู้แต่งแผนที่ ดูตำรา PyQGISสำหรับข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนั้น
เสียบเข้าไป
ปลั๊กอินทำการสร้างแผนที่โดยอัตโนมัติและช่วยให้คุณกำหนดค่าขอบเขตความละเอียดและด้านอื่น ๆ มันใช้รูปแบบเดียวกันกับการส่งออกเป็นตารางซ้อนทับของคุณ ขณะนี้มันทำงานเฉพาะกับรุ่นพัฒนาของ QGIS (1.9 หรือใหม่กว่า)
สคริปต์ Sextante
ก่อนที่ฉันจะสร้างปลั๊กอินฉันใช้ตรรกะโดยใช้ SEXTANTE สคริปต์ผู้ใช้นี้ควรใช้งานได้ใน 1.8 (ยังไม่ได้ทดสอบ) ไฟล์ลักษณะการแจกจ่าย (.qml) เป็นรูปแบบของการแจกแจงเอาต์พุต (จะละเว้นสไตล์ของการซ้อนทับการกระจาย) ขณะนี้วางแผนที่แสดงผลในไดเรกทอรีชั่วคราวตามค่าเริ่มต้นของระบบปฏิบัติการ (/ tmp ใน Linux และสถานที่ต่าง ๆ ใน Windows - กำหนดโดยตัวแปรสภาพแวดล้อม 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)