[QGIS]別ファイルからの複数レイヤの読み込み
起動時にプロジェクトファイルを読み込む形ですと、レイヤ数・ラスタレイヤが多い場合にQGISの起動が遅くなってしまうための対応策として、別タイミングでの複数レイヤでの読み込みを試していきます。
- 環境
- QGIS 3.16
別ファイル
QGISが定義するファイルで複数レイヤが定義されているのは下記のファイルになります。
pythonを使用しての下記のファイルでの追加方法について記載していきます。
- project.qgz, project.qgs
- プロジェクトファイル
- layers.qlr
- レイヤ定義ファイル
プロジェクトファイルからのレイヤ追加
QgsProject.createEmbeddedGroup
でプロジェクトファイル内のグループ名とプロジェクトファイル・非表示にするレイヤリストを指定することで、GroupNodeを作成します。
その後、追加したいGroupに対して.addChildNode
で追加することが可能です。
オプションでプロジェクトの読み込み(QgsProject.ReadFlags)を制限できます。
path = r'C:\Users\ikura\work\temp\tiles.qgz'
project = QgsProject.instance()
root = project.layerTreeRoot()
invisible_layer_ids = []
group = project.createEmbeddedGroup('Tiles', path, invisible_layer_ids)
root.addChildNode(group)
レイヤ定義ファイルからのレイヤ追加
レイヤ定義ファイル用クラスのQgsLayerDefinitionから読み込みます
レイヤのみの読み込み
QgsLayerDefinition.loadLayerDefinitionLayers
に.qlr
を指定することでLayerのみの配列を取得することができます。
取得したレイヤ配列をprojectに追加することでレイヤのみを追加することが可能です。
project = QgsProject.instance()
path = r'C:\Users\ikura\work\temp\tiles.qlr'
layer_list = QgsLayerDefinition.loadLayerDefinitionLayers(path)
project.addMapLayers(layer_list)
フォルダを含めた読み込み
QgsLayerDefinition.loadLayerDefinition
に.qlr
ファイルとプロジェクト・グループノードを指定することでグループノードに.qlrファイルに定義されたグループ・ファイルを追加することが可能です。
project = QgsProject.instance()
group = project.layerTreeRoot()
path = r'C:\Users\ikura\work\temp\tiles.qlr'
QgsLayerDefinition.loadLayerDefinition(path, project, group)
参考