ベクタデータの読み込み・表示はマニュアルにあるコードのとおりです。
ラスタデータやPostGISデータの読み込みも基本的には同じですが、
それぞれちょっとずつ違いがあります。
以下は典型的な読み込み方法の抜粋です。
ここではレイヤーセットをメンバ変数としています。
2.x
class MainWindow(QMainWindow, Ui_MainWindow):
layers = []
def __init__(self):
QMainWindow.__init__(self)
self.setupUi(self)
self.setWindowTitle("QGIS Application test")
# QgsMapCanvasの作成
self.canvas = QgsMapCanvas()
# QgsMapCanvasの設定
self.canvas.setCanvasColor(QColor(200,200,255))
self.canvas.enableAntiAliasing(True)
# 下の関数は1.0からは無い
# self.canvas.useQImageToRender(False)
self.canvas.show()
def addVectorLayer(self):
file = QFileDialog.getOpenFileName
(self, "Open Shapefile", ".", "Shapefiles(*.shp)")
fileInfo = QFileInfo(file)
# ベクタレイヤーの作成
layer = QgsVectorLayer(file, fileInfo.fileName(), "ogr")
if not layer.isValid():
return
# ベクタレイヤーの表示設定
symbols = layer.renderer().symbols()
symbol = symbols[0]
symbol.setFillColor(QColor.fromRgb(192,192,192))
symbol = layer.rendererV2().symbol()
symbol.setColor(QColor.fromRgb(192, 192, 192))
# レジストリへレイヤを登録
QgsMapLayerRegistry.instance().addMapLayer(layer);
# レイヤ全体を表示
self.canvas.setExtent(layer.extent())
# QgsMapCanvasにレイヤセットを登録
cl = QgsMapCanvasLayer(layer)
self.layers.append(cl)
self.canvas.setLayerSet(self.layers)
データの読み込みは大体上記のような手順になります。
まず、ファイル名からレイヤーを作成し、作成されたレイヤーを
QgsMapLayerRegistryに登録、
QgsMapCanvasLayerクラスにレイヤーをセットした後、
QgsMapCanvasLayerのセットに追加して、そのレイヤーセットを
QgsMapCanvasにセットという手順です。
表示順はQgsMapCanvasLayerセットの最初の要素が最前面に表示されるので、
セットの末尾に追加すると背面に追加されることになります。
セットの順番を入れ替えてQgsMapCanvas.setLayerSet()関数で再設定すれば
簡単に表示順を切り替えることができます。
QgsVectorLayer()関数の3番目の引数は”ogr”か”postgres”のどちらかを指定します。
普通のファイルならば”ogr”を指定すると、OGRがサポートするファイルであれば判別して読み込んでくれます。
3.x
fileInfo = QFileInfo(fname)
layer = QgsVectorLayer(fname, fileInfo.fileName(), "ogr")
if not layer.isValid():
return
# QgsMapLayerRegistry -> QgsProjectに変更
QgsProject.instance().addMapLayer(layer);
# ベクタレイヤーの表示設定
symbol = layer.renderer().symbol()
symbol.setColor(QColor.fromRgb(192, 192, 192))
# canvas.setLeyerSet -> canvas.setLayers
self.canvas.setExtent(layer.extent())
self.canvas.setLayers([layer])
大きな変更点としては、QgsMapCanvasLayerがなくなりました。
マップキャンバスへのレイヤ登録はQgsMapLayer派生クラスオブジェクトのリストを
そのままセットできます。