Tìm kiếm chức năng thanh lọc để loại bỏ các lớp khỏi tệp qss không có trong ngăn Lớp của QGIS?


8

Tôi có một số dự án QGIS mà tôi đã sử dụng trong thời gian dài, thêm và xóa các lớp, cập nhật tham chiếu đến các tệp bị xóa hoặc di chuyển, v.v.

Mở tệp qss bằng trình soạn thảo văn bản Tôi thấy rằng nó chứa nhiều tham chiếu đến các tệp khác nhau và tham chiếu này không được hiển thị trên ngăn cây Lớp.

Tôi có ba trường hợp khác nhau: tham chiếu đến tệp hiện có, tham chiếu đến các tệp bị thiếu, tham chiếu đến các kết nối cơ sở dữ liệu. Tôi đã nhận ra điều này khi tôi mở dự án của mình trên một máy khác và QGIS đã báo cáo một kết nối cơ sở dữ liệu bị thiếu với các bảng vectơ không có trong chế độ xem dạng cây lớp.

Xóa thủ công các tham chiếu từ tệp qss đã giải quyết được vấn đề, nhưng tôi đang quản lý các dự án lớn và gần như không thể kiểm tra tính nhất quán của dự án. Tôi đã thử plugin "Xóa các lớp trống", nhưng các plugin tôi đang cố xóa không phải là các lớp trống.

Có cách nào để 'thanh lọc' tập tin qgis không?


Bạn đã kiểm tra bằng cách lưu trữ các đường dẫn tương đối trong tệp .qss chưa? Đó là tại Setting--> Project Properties-->save paths-->relativeCheers N
Naresh

Điều gì về "Lưu dưới dạng ..." vào một tệp dự án mới?
AndreJ

1
Điều đó đã không làm việc! Tôi sẽ đăng lên danh sách gửi thư của người dùng QGIS một tệp dự án GQIS có chứa một lớp ảo, không có trong ngăn Lớp.
bradypus

1
Bạn có thể gửi tập tin qss ở đâu đó chúng tôi có thể nhận được không? Tôi không thể lặp lại tình huống của bạn. Có lẽ tất cả những gì bạn cần là một trình phân tích cú pháp đơn giản.
ike

1
@ike Vui lòng kiểm tra tại đây : lists.osgeo.org/pipermail/qgis-user/2012-September/019327.html . Bạn sẽ tìm thấy ở đó dự án thử nghiệm tôi đã gửi đến danh sách gửi thư. Để tái tạo nó, bạn nên đặt một tệp tif trong đường dẫn tương đối này: ./Planimetrie/2012/plan01_2012.tif. Xin vui lòng đọc các thông báo sau để biết thêm chi tiết.
bradypus

Câu trả lời:


7

Các lớp trong câu hỏi là trong sổ đăng ký lớp nhưng không có trong truyền thuyết .

Kịch bản python sau đây loại bỏ tất cả các lớp được tải, nhưng không được hiển thị trong chú giải.

Loại bỏ các lớp:

registryLayers = QgsMapLayerRegistry.instance().mapLayers().keys()
legendLayers = [ layer.id() for layer in iface.legendInterface().layers() ]
layersToRemove = set( registryLayers ) - set( legendLayers )
QgsMapLayerRegistry.instance().removeMapLayers( list( layersToRemove ) )

Nó nên được chạy từ bảng điều khiển python bên trong QGIS. Sau khi áp dụng nó, bạn có thể xác minh hoạt động bằng cách kiểm tra xem các lớp đã biến mất khỏi Tệp (Project in 2.0) => Thuộc tính dự án => Các lớp có thể nhận dạng . Thay đổi không được lưu tự động

Bằng cách thêm dòng sau vào cuối, các thay đổi cũng sẽ được lưu tự động.

iface.actionSaveProject().trigger()

Vui lòng tạo một bản sao lưu của tệp Dự án của bạn (.qss) trước khi ghi đè tệp dự án của bạn sau khi áp dụng tập lệnh này.

Đối với QGIS 1.8, dòng sau bắt buộc phải được chạy ban đầu:

iface = qgis.utils.iface

Ok tôi đang gặp lỗi khi tôi nhập nó. TracBack (cuộc gọi gần đây nhất): Tệp "<input>", dòng 1, trong <module> NameError: tên 'LegendLayerNames' không được xác định
Ger

1
QGIS 1.8 yêu cầu một cách khác để truy cập iface. Câu trả lời được cập nhật để phản ánh điều này.
Matthias Kuhn

1
Tôi nghĩ rằng bạn có nó ở đây. Vâng, nó đã làm việc trong trường hợp của tôi. Và kết quả là làm cho QGIS Cloud hoạt động tốt hơn vì nó có thể tải lên các lớp ngay bây giờ. Thông minh.
Ger

0

Ngoài nhiều chức năng hữu ích khác, plugin có tên " Layer Board " (có sẵn trong trình cài đặt Plugin) có nút tích hợp để "Loại bỏ các lớp ma" giải quyết vấn đề này.

Ngoài nút 1 lần nhấp để loại bỏ các lớp ma, nó cũng cho phép bạn xem và xóa các lớp riêng lẻ trong một GUI đẹp liệt kê từng lớp và thuộc tính của nó. Bạn có thể chọn bất kỳ lớp nào trong số các lớp riêng lẻ này từ bảng và nhấp vào nút "Xóa lớp" để giải quyết từng vấn đề riêng lẻ, nếu bạn chọn.

Trong trường hợp của tôi, khả năng loại bỏ các tham chiếu lớp riêng lẻ là rất quan trọng, bởi vì tôi có một số "lớp ma" có cùng tên nhưng được tham chiếu 2-3 lần trong sổ đăng ký. Tôi đã sử dụng bảng lớp để loại bỏ các mục chính xác riêng lẻ và quay lại tham chiếu lớp đơn chính xác.

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.