Trang chủ QGIS Lập trình Python QGIS - PyQGIS Bài 4: Làm việc với lớp Vector

Bài 4: Làm việc với lớp Vector

- Quảng cáo -

Bài 1: Bắt đầu với lập trình Python QGIS
Bài 2: Thêm lớp Vector
Bài 3: Thêm lớp Raster
Bài 4: Làm việc với lớp Vector
Bài 5: Cách thêm/xóa trường và cập nhật giá trị thuộc tính
Bài 6: Thêm dữ liệu CSV
Bài 7: Drawing Marker
Bài 8: Vẽ Polyline và Polygon
Bài 9: Animate GPS Track
Bài 10: Đặt và tải lại nguồn dữ liệu bản đồ cơ sở (Basemap)

Trong bài viết này, chúng ta sẽ khám phá thêm về cách làm việc với lớp vectơ như lấy tên trường, phạm vi lớp, nhận tính năng và nhiều hơn nữa. Để làm việc với lớp vectơ với Python, chúng tôi đang sử dụng lớp QssVectorLayer. Trong hướng dẫn này, chúng tôi sẽ sử dụng một số phương thức có sẵn trong lớp này.

Thêm lớp Vector

Hãy bắt đầu hướng dẫn này bằng cách thêm một lớp vector. (Bài 2: Thêm lớp Vector)

park_layer=iface.addVectorLayer("F:\park_polygons.shp","park","ogr")

Kiểm tra hệ tọa độ (Coordinate System)

Khi nhận được một lớp vectơ, thông thường chúng ta muốn biết hệ tọa độ của lớp. Chúng ta có thể làm điều này với phương thức crs.

#Check Layer's Coordinate System
crs=park_layer.crs()
print(crs.description())

Output: NAD83 / UTM zone 10N 

Nhận lớp mở rộng (Layer Extent)

Tiếp theo hãy kiểm tra phạm vi của lớp (extent of the layer). Đối với điều này, chúng tôi sử dụng phương thức mở rộng (extent method). Nó sẽ trả về một lớp QgsRectangle. Sau đó, để có được tọa độ phạm vi (extent coordinate), chúng tôi sử dụng phương thức tọa độ tối thiểu và tối đa:

#Check Layer's Extent
extent=park_layer.extent()
min_x=extent.xMinimum()
max_x=extent.xMaximum()
min_y=extent.yMinimum()
max_y=extent.yMaximum()
print (min_x,min_y,max_x,max_y)

Output:
483719.3637926 5449712.914727 498270.49187981 5462386.1670929

Đếm số tính năng (Feature Number)

Để đếm số featureCount được sử dụng. Nó sẽ trả về số lượng tính năng trong lớp.

#Counting Feature
n_feature=park_layer.featureCount()
print("number feature: ", n_feature)

Output: number feature:  264

Lấy thuộc tính cột (Attributes Column)

Tiếp theo, muốn biết thông tin nào có thể được tìm thấy trong lớp bằng cách kiểm tra tên cột thuộc tính của nó. Đối với điều này, chúng tôi sử dụng phương thức trường trong một vòng lặp và in tên cột và loại trường.

#Get Fields Name and Type
for field in park_layer.fields():
    print (field.name(),field.typeName())

Output:
PARK_NAME String
PARK_ID Integer64
PARK_URL String
AREA_HEC String

Layer Metadata

Metadata là thông tin về dữ liệu. Chúng ta có thể thấy Metadata bằng phương thức htmlMetada. Kết quả của metada ở định dạng html sẽ được hiển thị trong bảng điều khiển.

#Get HTML Metadata
metadata=park_layer.htmlMetadata()
print (metadata)

Output: (Dạng như sau)
<html>
<body>
<h1>Information from provider</h1>
<hr>
<table class=”list-view”>
<tr><td class=”highlight”>Original</td><td>park</td></tr>
<tr><td class=”highlight”>Name</td><td>park</td></tr>
<tr><td class=”highlight”>Source</td><td>F:\park_polygons.shp</td></tr>
<tr><td class=”highlight”>Storage</td><td>ESRI Shapefile</td></tr>
<tr><td class=”highlight”>Comment</td><td></td></tr>
<tr><td class=”highlight”>Encoding</td><td>UTF-8</td></tr>
<tr><td class=”highlight”>Geometry</td><td>Polygon (MultiPolygon)</td></tr>
<tr><td class=”highlight”>CRS</td><td>EPSG:26910 – NAD83 / UTM zone 10N – Projected</td></tr>
<tr><td class=”highlight”>Extent</td><td>483719.3637926569208503,5449712.9147277921438217 : 498270.4918798131402582,5462386.1670929444953799</td></tr>
<tr><td class=”highlight”>Unit</td><td>meters</td></tr>
<tr><td class=”highlight”>Feature count</td><td>264</td></tr>
</table>
<br><br><h1>Identification</h1>
<hr>
…………………………..
</body>
</html>

Lấy giá trị thuộc tính (Attribute Value)

Để có được các giá trị thuộc tính của lớp trước tiên chúng ta phải có tính năng này. Sau đó, trong một vòng lặp, chúng tôi sử dụng phương thức thuộc tính để có được từng thuộc tính của tính năng. Đầu ra sẽ trở lại dưới dạng một danh sách cho mỗi tính năng.

#Getting Attribute Value
features=park_layer.getFeatures()
for f in features:
    attr=f.attributes()
    print (attr)

Sample Output:
[‘Yaletown Park’, 237, ‘http://covapp.vancouver.ca/parkfinder/parkdetail.aspx?inparkid=237’, ‘0.17’]

Có nhiều phương thức vẫn có sẵn cho lớp QssVectorLayer.

Bình luận bằng Facebook Comments

MẠNG XÃ HỘI

1,010ThíchThích
432Đăng kýĐăng Ký

TOOL PXTmap.com

BÀI VIẾT LIÊN QUAN

Bài 14: Viết kịch bản xử lý

Trong các bài trước, chúng tôi đã đề cập đến cách chạy các công cụ Processing cũng như cách xâu chuỗi các...

Bài 13: Tạo các hàm để tải các lớp GeoPackage

Hiện tại chúng ta đã từng sử dụng GeoPackages. Ví dụ: trong Tải một lớp vectơ, chúng tôi đã giới thiệu cách...

Bài 12: Sử dụng biểu thức để tính giá trị

Trong các bài trước đây, chúng tôi đã đề cập đến cách tạo các lớp vectơ, cách thêm các trường vào bảng...

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...

Bài 10: Công cụ chuỗi xử lý (Chaining Processing)

Trong Bài 7: Chạy công cụ xử lý (Processing), chúng ta đã khám phá những điều cơ bản của việc chạy các...