QGISクラスor関数説明: QgsVecterLayer

前回の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()

他にもいろいろあるのですが、長くなるのでまた次回に。
次回は、レイヤの地物や属性の操作の関数を紹介します。

コメントを残す

メールアドレスが公開されることはありません。