QGIS Memuat Banyak gaya pada satu lapisan sekaligus

10

Saya memiliki satu set file gaya qml yang disimpan yang saya terapkan ke lapisan serupa di beberapa proyek. Contohnya akan menjadi lapisan linetype shapefile dengan sekitar selusin gaya yang berbeda; Saat ini saya harus mengulangi proses menambahkan gaya baru dan memuat file qml untuk masing-masing gaya yang berbeda. Maka saya harus melakukannya beberapa kali lagi dalam proyek itu dan mengulangi semuanya lagi di proyek berikutnya.

Hanya mencoba melihat apakah ada cara untuk memuat banyak file gaya pada layer yang sama sekaligus? Sesuatu seperti daripada meramban ke satu qml tunggal, saya dapat memilih beberapa file qml dan memuatnya sekaligus?

Contoh beberapa gaya per lapisan

CEL-ma
sumber
1
Apa yang Anda maksud dengan memuat banyak gaya sekaligus pada lapisan yang sama? Bukankah gaya terakhir dimuat akan menimpa semua gaya dimuat sebelumnya? Atau Anda ingin memuat banyak gaya ke banyak salinan dari lapisan yang sama?
artwork21
Alur kerja saya saat ini adalah membuka properti layer; gunakan tombol gaya (kiri bawah) untuk menambahkan gaya baru, menetapkan nama, dan kemudian memuat file .qml disimpan, kemudian ulangi untuk berapa banyak (10-20) gaya yang digunakan lapisan. Saat ini, saya harus melakukan ini satu per satu, untuk sekitar 7-8 lapisan, dalam> 25 proyek. (data berulang-ulang, layer & peta, tetapi file proyek dipisahkan secara geografis oleh kota - setiap kota adalah klien terpisah)
CEL-ma
Ada pertanyaan serupa di sini yang ingin menggunakan python tetapi belum ada jawaban, gis.stackexchange.com/questions/294016/…
artwork21

Jawaban:

3

Anda dapat memuat banyak gaya menggunakan skrip pyqgis (penjelasan dalam komentar):

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)

Anda dapat menjalankannya di konsol python QGIS atau beradaptasi dengan skrip pemrosesan.

(Diuji pada versi LTR saat ini QGIS 2.18)

Barteksch
sumber
1
Terima kasih banyak! Saya berhasil memuat banyak gaya - saya memang mendapatkan pesan kesalahan "[Errno 9] Bad file descriptor" ketika sedang menjalankan algoritme, tetapi masih berhasil diselesaikan! Ini akan menyelamatkan saya BANYAK pekerjaan!
CEL-ma
Kepada siapa pun yang membaca posting ini di masa depan; pesan kesalahan "Bad file" yang disebutkan di atas adalah karena jalur qml memiliki kedua layer vektor garis dan simpul. Setelah dipisahkan, tidak ada lagi kesalahan.
CEL-ma
Adakah yang bisa membantu mengonversi kode itu ke python 3 agar berfungsi di QGIS 3?
CEL-ma
0

Jika saya memahami Anda dengan benar, Anda hanya ingin dapat menerapkan gaya geometri dan belum tentu aturan atau ekspresi ke lapisan dengan cepat dan mudah di setiap proyek yang Anda buka?

Jika itu yang terjadi Anda bisa menyimpan gaya Anda di perpustakaan simbol menggunakan manajer gaya? Buka panel layer style dan klik tombol "open library".

Phil Barlow
sumber
maaf, ya - gaya yang ingin saya muatkan berdasarkan aturan.
CEL-ma