ベクタデータの読み込み・表示はマニュアルにあるコードのとおりです。
ラスタデータや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
派生クラスオブジェクトのリストを
そのままセットできます。