Tôi đang viết một ứng dụng độc lập bằng Python / QGIS chỉ đơn giản là tạo bản đồ.
Tôi muốn tải các lớp vectơ / raster, thiết lập ký hiệu, đặt phạm vi
Hiện tại, đó là tất cả!
Hiện tại tôi chỉ đang sử dụng kỹ thuật kết xuất đơn giản được nêu ở đây: http://www.qgis.org/pyqgis-cookbook/composer.html#simple-rendering
Tôi đã thất bại, tuy nhiên, trong việc điều chỉnh mã này để xác định một phạm vi cụ thể. Tôi cung cấp mã dưới đây.
Các ví dụ duy nhất mà tôi có thể tìm thấy cho thấy cách thay đổi phạm vi liên quan đến việc tạo MapCanvas. ... Nhưng tôi không chắc chắn rằng đây là điều tôi muốn làm vì tôi chỉ tạo ra những bản đồ rất đơn giản ... và nó dường như giới thiệu một loạt các biến chứng mới. Chắc chắn có một cách dễ dàng để xác định phạm vi thông qua kỹ thuật 'kết xuất đơn giản'?
Becky
from qgis.core import *
from qgis.utils import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtCore import QFileInfo, QSettings
QgsApplication.setPrefixPath('/Applications/QGIS-1.9.app/Contents/MacOS', True)
QgsApplication.initQgis()
province = QgsVectorLayer('/filepath/Province_studyUTM36S.shp' , 'layer', 'ogr')
town = QgsVectorLayer('/filepath/TownPolygons_UTM36S.shp' , 'layer', 'ogr')
road = QgsVectorLayer('/filepath/Roads_UTM36S.shp' , 'layer', 'ogr')
QgsMapLayerRegistry.instance().addMapLayer(province)
QgsMapLayerRegistry.instance().addMapLayer(road)
QgsMapLayerRegistry.instance().addMapLayer(town)
rasterFile = '/filepath/Landsat.tif'
fileInfo = QFileInfo(rasterFile)
baseName = fileInfo.baseName()
rlayer = QgsRasterLayer(rasterFile, baseName)
QgsMapLayerRegistry.instance().addMapLayer(rlayer)
img = QImage(QSize(800,600), QImage.Format_ARGB32_Premultiplied)
color = QColor(255,255,255)
img.fill(color.rgb())
p = QPainter()
p.begin(img)
p.setRenderHint(QPainter.Antialiasing)
render = QgsMapRenderer()
ID = [ rlayer.getLayerID(), town.getLayerID(), road.getLayerID(), province.getLayerID()]
render.setLayerSet(ID)
rect = QgsRectangle(render.fullExtent())
rect.scale(1.1)
render.setExtent(rect)
render.setOutputSize(img.size(), img.logicalDpiX())
render.render(p)
p.end()
img.save("/filepath/first_render.png","png")