Bài 11: Quản lý các lớp dự án (đổi tên và loại bỏ)

Trong các bài trước, chúng tôi đã đề cập đến việc thêm các lớp từ các tệp cũng như tạo các lớp mới từ đầu. Trong bài này, chúng tôi khám phá cách đổi tên và xóa các lớp.

Trước tiên, tải một lớp vectơ:

import processing
uri = "E:/Geodata/NaturalEarthData/natural_earth_vector.gpkg|layername=ne_110m_populated_places"
vlayer = iface.addVectorLayer(uri, "", "ogr") 

Theo mặc định, tên lớp được đặt thành tên tệp, tức là natural_earth_vector ne_110m_populated_places. Đổi tên lớp này là đơn giản:

vlayer.setName('Places')

Để thêm một lớp thứ hai khác vào dự án của chúng tôi, thêm lớp ở bộ đệm Point:

processing.runAndLoadResults("native:buffer", {'INPUT':uri,'DISTANCE':10,'SEGMENTS':5,'END_CAP_STYLE':0,'JOIN_STYLE':0,'MITER_LIMIT':2,'DISSOLVE':False,'OUTPUT':'memory:'}) 

Dự án bây giờ có hai lớp. Để có được danh sách tất cả các lớp trong dự án, có thể gọi hàm mapLayers():

project = QgsProject.instance()
print(project.mapLayers()) 

Hàm mapLayers() trả về một từ điển của id lớp và các đối tượng lớp tương ứng:

{'natural_earth_vector_1a8c3d3c_223d_4bcf_880c_2ce4feebe231': <qgis._core.QgsVectorLayer object at 0x000001DA84D2FEE8>, 
'output_551f6269_c5ea_4730_aa72_42a3fa86cb77': <qgis._core.QgsVectorLayer object at 0x0000013B944B3828>} 

Để in tên lớp, chúng ta thực hiện việc lặp qua các mục từ điển:

for id, layer inproject.mapLayers().items():
print(layer.name())

Places
Buffered

Để đổi tên lớp có tên là Buffered, trước tiên chúng ta cần tìm đối tượng lớp. Các lớp có thể được xác định bằng id hoặc theo tên. Vì chúng tôi không biết lớp đệm Id id, nên chúng tôi cần sử dụng tên. Có một thách thức mặc dù: tên không nhất thiết phải là duy nhất! Điều đó có nghĩa là nhiều lớp có thể có cùng tên. Do đó, hàm project.mapLayersByName() trả về một danh sách các lớp. Nếu chúng ta biết rằng chỉ có một lớp với tên đã cho, chúng ta có thể truy cập mục đầu tiên trong danh sách này bằng cách nối thêm [0]:

to_be_renamed = project.mapLayersByName('Buffered')[0]
to_be_renamed.setName('Renamed!') 

Cuối cùng, để xóa một lớp khỏi dự án của chúng ta, chúng ta có thể sử dụng hàm project.removeMapLayer(). Hàm này yêu cầu id lớp:

to_be_deleted =project.mapLayersByName('Places')[0]project.removeMapLayer(to_be_deleted.id())# equivalent to: project.removeMapLayer(vlayer.id())

Trên đây là những điều cơ bản của việc quản lý các lớp trong QssProject.

Bình luận bằng Facebook Comments