前回のUI作成の後は、ほしい機能を同時で実行することになります。
なので、今回はよく使うQgsVectorLayerの周りの関数を軽く紹介していきます。
QGISのバージョンは2.8です。
詳しくはQGIS API Documentationを参照してください。
QgsVectorLayerの取得方法
1.作成する
layer = QgsVectorLayer('vector.shp', 'layer_name', 'ogr')
2.選択しているレイヤの取得
layer = iface.activeLayer()
3.レイヤリストの取得
# キャンバスに表示されているレイヤリスト canvas = iface.mapCanvas() layer_list = canvas.layers() # レイヤツリーに表示されているレイヤリスト legend_iface = iface.legendInterface() layer_list = legend_iface.layers() # 内部的に存在するすべてのレイヤリスト layer_registry = QgsMapLayerRegistry.instance() layer_list = layer_registry.mapLayers()
4.レイヤIDからの取得
layer_registry = QgsMapLayerRegistry.instance() layer = layer_registry.mapLayer('layer_id') # レイヤIDの取得方法 layer_id = layer.id()
レイヤの作成方法
基本的にファイル名の指定のところはURLの記述と同様にオプションを指定できます。
ここでは、メモリでのレイヤ作成、ogrに対応しているファイル形式、csvあるいはtsvから作成するもののみになります。
PostGISからなど、データベースから作成もできますが、私があまり使っていないので書けません。
# memory QgsVectorLayer('geometry_type', 'layer_name', 'memory') 例: QgsVectorLayer('Point?crs=2447', 'test_layer', 'memory') # ogr QgsVectorLayer('file_path.shp', 'layer_name', 'ogr') # delimited text qgsVectorLayer('delimited_text.csv?delimiter=,&xFiled=x&yField=y&crs=srsid', 'layer_name', 'delimitedtext')
このあと地図上に追加したい場合は
layer_registry = QgsMapLayerRegistry.instance() layer_registry.addMapLayer(layer)
このまま実行すると、レイヤやグループを選択していない場合は、一番上に、選択している場合は、その下や中にレイヤが追加されます。
レイヤツリーの任意位置に入れたい場合は
# 自動でレイヤツリーに追加しないということで、第二引数にFalse layer_registry.addMapLayer(layer, False) # レイヤツリーのルートアイテムを取得 layer_tree = QgsProject.instance().layerTreeRoot() # 一番上に追加 layer_tree.insertChildNode(0, QgsLayerTreeLayer(layer))
編集モード系
# 編集モードか確認 layer.isEditable() # 編集開始 layer.startEditing() # 編集終了 layer.endEditCommand() # 編集前に戻す layer.rollBack(bool deletebuffer=True) # 編集を保存 layer.commitChanges() # 読み込み専用、編集禁止設定 layer.setReadOnly(bool=True)
その他
# レイヤタイプの確認 0:vector or 1:raster layer.type() # geometryタイプの確認 0: point 1: line 2: polygon layer.geometryType()
他にもいろいろあるのですが、長くなるのでまた次回に。
次回は、レイヤの地物や属性の操作の関数を紹介します。