Python / QGISで、マップを作成するだけのスタンドアロンアプリケーションを作成しています。
ベクター/ラスターレイヤーを読み込み、シンボルを設定し、範囲を設定したい
現時点ではそれだけです!
現在、私はここで概説されている単純なレンダリング手法を使用しています:http : //www.qgis.org/pyqgis-cookbook/composer.html#simple-rendering
しかし、私はこのコードを特定の範囲を定義するように適合させることに失敗しました。以下のコードを提供します。
範囲を変更する方法を示す唯一の例は、MapCanvasの作成です。...しかし、これが非常に単純なマップを作成しているだけであることを考慮して、これが私がしたいことであるかどうかはわかりません...そして、それはまったく新しい複雑なセットを導入するようです。「シンプルなレンダリング」技術を介して範囲を定義する簡単な方法は確かにありますか?
ベッキー
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")
ピクセル座標ではなくマップ座標でQgsRectangleを作成しようとしましたか?
—
Matthias Kuhn
データセットはWGS84 UTM36S ...にあり、私が入力した値はメートルですか?
—
ベッキー
あなたのプログラムから得られる出力は何ですか-それはすべての層の全範囲を示していますか?
—
til_b 2013
はい-全範囲。しかし、ラスターの詳細を示すために、「ズームイン」領域を示すマップを作成したいと思います
—
Becky
renderer.setDestinationCrs()を呼び出して、レンダラーに指定されているCRSの範囲を指定してください。
—
Matthias Kuhn