QGISは一度に単一のレイヤーに複数のスタイルをロードします


10

複数のプロジェクトの同様のレイヤーに適用する一連のqmlスタイルファイルを保存しました。例としては、約12の異なるスタイルを持つ線種シェープファイルレイヤーがあります。現在、新しいスタイルを追加し、異なるスタイルごとにqmlファイルをロードするプロセスを繰り返す必要があります。その後、そのプロジェクトでさらに数回実行し、次のプロジェクトですべてを繰り返す必要があります。

同じレイヤーに複数のスタイルファイルを一度に読み込む方法があるかどうかを確認しようとしていますか?単一のqmlを参照する代わりに、複数のqmlファイルを複数選択して一度に読み込むことができますか?

レイヤーごとの複数のスタイルの例


1
同じレイヤーに一度に複数のスタイルを読み込むとはどういう意味ですか?最後に読み込まれたスタイルは、以前に読み込まれたすべてのスタイルを上書きしませんか?または、同じレイヤーの複数のコピーに多くのスタイルをロードしたいですか?
アートワーク21

現在のワークフローは、レイヤープロパティを開くことです。スタイルボタン(左下)を使用して新しいスタイルを追加し、名前を割り当ててから、保存された.qmlファイルをロードし、レイヤーが使用するスタイル(10〜20)を繰り返します。現在、25以上のプロジェクトで、7〜8層ほど、これを1つずつ実行する必要があります。(反復的なデータ、レイヤー、マップ、ただし自治体によって地理的に分離されたプロジェクトファイル-各自治体は個別のクライアント)
CEL-ma

Pythonを使用したいのですが、まだ回答がありません。gis.stackexchange.com
questions / 294016 /

回答:


3

pyqgisスクリプトを使用して複数のスタイルをロードできます(コメントの説明):

import os
from qgis.core import QgsMapLayerStyle
from qgis.utils import iface

# set path to your styles here
qml_path = '/home/user/qml'

layer = iface.activeLayer()
style_manager = layer.styleManager()

# read valid style from layer
style = QgsMapLayerStyle()
style.readFromLayer(layer)

for qml_file in [f for f in os.listdir(qml_path)
                 if os.path.isfile(os.path.join(qml_path, f)) and
                 f.endswith('.qml')]:
    # get style name from file
    style_name = os.path.basename(qml_file).strip('.qml')
    # add style with new name
    style_manager.addStyle(style_name, style)
    # set new style as current
    style_manager.setCurrentStyle(style_name)
    # load qml to current style
    (message, success) = layer.loadNamedStyle(os.path.join(qml_path, qml_file))
    print message
    if not success:  # if style not loaded remove it
        style_manager.removeStyle(style_name)

QGIS pythonコンソールで実行するか、処理スクリプトに適合させることができます。

(現在のLTRバージョンQGIS 2.18でテスト済み)


1
どうもありがとうございました!複数のスタイルを正常にロードできました-アルゴリズムの実行中に「[Errno 9] Bad file descriptor」エラーメッセージが表示されましたが、それでも正常に完了しました!これは私に多くの仕事を節約します!
CEL-ma

将来この投稿を読んでいる他の人に。上記の「不良ファイル」エラーメッセージは、ラインとノードの両方のベクターレイヤーを含むqmlパスが原因でした。分離すると、エラーは発生しなくなります。
CEL-ma

QGIS 3で動作するようにそのコードをpython 3に変換する手助けができる人はいますか?
CEL-ma

0

私があなたを正しく理解している場合、開いているプロジェクトでジオメトリスタイルを適用でき、必ずしもルールや式をレイヤーにすばやく簡単に適用できないようにしたいですか?

その場合は、スタイルマネージャーを使用して、シンボルライブラリにスタイルを保存できますか?レイヤースタイルパネルを開き、[ライブラリを開く]ボタンをクリックします。


申し訳ありませんが、バッチロードしたいスタイルはルールベースです。
CEL-ma
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.