0
0

More than 3 years have passed since last update.

[QGIS]別ファイルからの複数レイヤの読み込み

Posted at

[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)

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0