Làm cách nào tôi có thể sao chép một lớp trong QGIS?


9

Tôi muốn hiển thị cùng một dữ liệu vectơ theo các cách khác nhau như các lớp khác nhau. Mặc dù rất tiện lợi để có thể sao chép và dán kiểu lớp trong 1.8+, nhưng thật tuyệt khi có thể chọn một lớp và nhấp chuột phải để sao chép hoặc sao chép trực tiếp.

Bất kỳ cách dễ dàng để làm điều này, như một lệnh Python?


Cập nhật: đề xuất của @ dakcarto hoạt động hoàn hảo. Vì tôi cần thêm nhiều lớp trùng lặp, tôi đã điều chỉnh nó thành vòng lặp nhiều lần nếu cần:

for n in range(1,5): 
    iface = qgis.utils.iface; vl = iface.activeLayer(); iface.addVectorLayer(vl.source(), vl.name() + "_clone" + str(n), vl.providerType())

Vấn đề duy nhất là lớp mới trở thành activeLayer, do đó, nó thêm "_clone" và số vào tên trước đó, kết thúc bằng example_clone1, example_clone1_clone2, cho đến ví dụ khó sử dụng_clone1_clone2_clone3_clone4_clone Cần phải tìm ra cách nhân đôi từ lớp được chọn ban đầu.


Đây thực sự không phải là một câu trả lời, nhưng QGIS không bận tâm nếu bạn thêm cùng một lớp vectơ vào một dự án hai lần.
L_Holcombe

vâng, tôi đã thêm nhiều bản sao sau đó, nhưng chỉ bằng cách "thêm lớp" và duyệt để chọn lớp mỗi lần. Tối thiểu 4 lần nhấp và một số thao tác cuộn, sẽ gây mệt mỏi khi cần nhân đôi một lớp 20 lần.
Simbamangu

1
@Simbamangu Có nhiều quan điểm khác nhau về vấn đề này, tôi đã xem qua wiki wiki. Tôi chắc chắn đánh giá cao quan điểm của bạn, hãy để tôi chia sẻ của tôi. Tôi coi tiêu đề câu hỏi là một hướng dẫn về ý chính của câu hỏi. Vì tất cả chỉ là về câu hỏi, sau đó giới thiệu "Làm thế nào để tôi ...", "Tại sao lại là ..." không có gì mới vì rõ ràng đây là một câu hỏi. Nó có thể làm cho câu hỏi dễ đọc hơn, nhưng dù sao bạn cũng phải nhìn vào phần thân của câu hỏi để xem nó là gì. Để xem toàn bộ trang câu hỏi bắt đầu bằng "Làm thế nào để tôi ..." ít nhất là đối với tôi không hiệu quả.
TomazicM

1
Và lý do tôi thay đổi tiêu đề của câu hỏi cũ của bạn? Nó bị lỗi tại trang chủ của GIS vì hành động của somebodys và tôi thừa nhận có thói quen (xấu) khi loại bỏ các phần câu hỏi "Làm thế nào" và "Tại sao".
TomazicM

1
@Simbamangu Tôi cá nhân thích câu hỏi mà không có "Làm thế nào" và "Tại sao" vì những từ này không thêm gì vào nội dung. Họ có thể làm cho tiêu đề dễ đọc hơn, nhưng tôi không thấy có vấn đề gì nếu tiêu đề hơi mơ hồ, vì dù sao người ta cũng phải đọc nội dung câu hỏi để xem tất cả những gì về nó. Và tôi thừa nhận rằng tôi đã bắt đầu loại bỏ những từ đó sau khi tôi thấy PolyGeo thực hiện nó và sau đó đọc một số bài viết meta về thực tiễn tốt khi đăng / chỉnh sửa câu hỏi.
TomazicM

Câu trả lời:


10

Có hai yêu cầu tính năng liên quan đến điều này ( # 5899# 1483 ). Đây chắc chắn là một tính năng có thể thực hiện được và có thể có trong phiên bản 2.0, nếu nhà phát triển quan tâm đến việc thêm nó; hoặc, một nhà phát triển plugin Python đã xem xét nó.

Vấn đề # 5899 cũng bao gồm một số mã Python để sao chép một lớp (được gửi bởi nhà phát triển Giuseppe Sucameli):

Trong thời gian chờ đợi, chọn lớp vectơ sau đó mở giao diện điều khiển python của QGis và chạy:

iface = qgis.utils.iface; vl = iface.activeLayer(); iface.addVectorLayer(vl.source(), vl.name() + "_clone", vl.providerType())

Mã trước đó thêm vào bản đồ cùng một lớp con.

Thật khó để thực hiện bằng cách sử dụng tập lệnh python một dòng như tập lệnh trước đó, nhưng nếu bạn biết tên lớp con, bạn chỉ có thể thay thế vl.source()bằng vl.source().split("|")[0] + "|layername=my_sublayer_name"nơi my_sublayer_name là tên của lớp con của bạn.

Nó xuất hiện sau khi chạy mã trùng lặp, bạn sẽ phải sao chép / dán kiểu của lớp gốc.


Hoạt động hoàn hảo. Bằng cách thêm 'v' làm chìa khóa để dán kiểu lớp, việc sao chép lớp và kiểu chỉ mất vài giây.
Simbamangu

Tính năng này được triển khai trong phiên bản c11df1aa79. hub.qgis.org/projects/quantum-gis/reposeective/revutions/ mẹo
Vladimir

2
Liên kết Python cho nhánh cam kết với nhánh chính hoạt động như vậy: iface.setActiveLayer( my_layer );iface.actionDuplicateLayer().trigger()trong đó my_layer là QSSMapLayer được đặt thành lớp đang hoạt động, được chọn trong chú giải; sau đó, actionD repeatateLayer () được kích hoạt để hoạt động trên các lớp được chọn trong chú giải (mặc định của nó).
dakcarto

1

Các phiên bản gần đây của QGIS hiện có tùy chọn "Lớp trùng lặp". Nhấp chuột phải vào lớp bạn muốn nhân đôi và nó sẽ chèn một bản sao mới ngay bên dưới.

Lưu ý bên lề: Có vẻ như bạn cần nhấn vào View --> Refreshcác thay đổi được thực hiện trong một lớp để truyền sang lớp tiếp theo.

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.