Tải QGIS Nhiều kiểu trên một lớp cùng một lúc


10

Tôi có một tập hợp các tệp kiểu qml được lưu mà tôi áp dụng cho các lớp tương tự trên nhiều dự án. Một ví dụ sẽ là một lớp shapefile linetype với khoảng một chục kiểu khác nhau; hiện tại tôi phải lặp lại quá trình thêm một kiểu mới và tải tệp qml cho mỗi kiểu khác nhau. Sau đó, tôi phải làm điều đó một vài lần nữa trong dự án đó và lặp lại toàn bộ điều đó một lần nữa trong dự án tiếp theo.

Chỉ cần thử xem có cách nào để tải nhiều tệp kiểu trên cùng một lớp không? Một cái gì đó giống như thay vì duyệt đến một qml, tôi có thể chọn nhiều tệp qml và tải chúng cùng một lúc không?

Ví dụ về nhiều kiểu trên mỗi lớp


1
Bạn có ý nghĩa gì khi tải nhiều kiểu cùng một lúc trên cùng một lớp? Không phải kiểu cuối cùng được tải sẽ ghi đè tất cả các kiểu đã tải trước đó sao? Hay bạn muốn tải nhiều kiểu cho nhiều bản sao của cùng một lớp?
nghệ thuật21

Quy trình công việc hiện tại của tôi là mở các thuộc tính lớp; sử dụng nút kiểu (dưới cùng bên trái) để thêm kiểu mới, gán tên và sau đó tải tệp .qml đã lưu, sau đó lặp lại cho nhiều kiểu (10-20) mà lớp đó sử dụng. Hiện tại, tôi phải thực hiện từng bước một, trong khoảng 7-8 lớp, trong> 25 dự án. (dữ liệu lặp đi lặp lại, các lớp và bản đồ, nhưng các tệp dự án được phân tách theo địa lý theo thành phố - mỗi đô thị là một khách hàng riêng biệt)
CEL-ma

Có một câu hỏi tương tự ở đây muốn sử dụng python nhưng chưa có câu trả lời nào, gis.stackexchange.com/questions/294016/ trộm
nghệ thuật21

Câu trả lời:


3

Bạn có thể tải nhiều kiểu bằng cách sử dụng tập lệnh pyqgis (giải thích trong nhận xét):

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)

Bạn có thể chạy nó trong bảng điều khiển python của QGIS hoặc thích ứng với tập lệnh xử lý.

(Đã thử nghiệm trên phiên bản LTR hiện tại QGIS 2.18)


1
Cảm ơn rât nhiều! Tôi đã có thể tải thành công nhiều kiểu - Tôi đã nhận được thông báo lỗi "[Errno 9] Trình mô tả tệp xấu" trong khi nó đang chạy thuật toán, nhưng nó vẫn hoàn thành thành công! Điều này sẽ giúp tôi tiết kiệm rất nhiều công việc!
CEL-ma

Để bất cứ ai khác đọc bài viết này trong tương lai; thông báo lỗi "Tệp xấu" được đề cập ở trên là do đường dẫn qml có cả hai lớp vectơ dòng và nút. Sau khi tách ra, không còn lỗi nữa.
CEL-ma

Bất cứ ai cũng có thể giúp chuyển đổi mã đó thành python 3 để nó hoạt động trong QGIS 3?
CEL-ma

0

Nếu tôi hiểu bạn một cách chính xác, bạn chỉ muốn có thể áp dụng các kiểu hình học và không nhất thiết phải là các quy tắc hoặc biểu thức cho các lớp một cách nhanh chóng và dễ dàng trong bất kỳ dự án nào bạn đã mở?

Nếu đó là trường hợp bạn chỉ có thể lưu kiểu của mình trong thư viện ký hiệu bằng trình quản lý kiểu? Mở bảng kiểu lớp và nhấp vào nút "thư viện mở".


xin lỗi, có - các kiểu tôi muốn tải hàng loạt dựa trên quy tắc.
CEL-ma
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.