Trước hết, tôi muốn nói rằng tôi biết rằng vấn đề tương tự đã được nêu ra trước đây, nhưng nó không cung cấp giải pháp thỏa mãn.
Tôi cần lấy số đỉnh của mọi đối tượng trên lớp vectơ. Dựa trên bài viết này: https://joseguerreroa.wordpress.com/2014/07/28/contar-y-extraer-nodos-vertices-para-vectoriales-de-linea-o-poligono-mediante-pyqgis/
Tôi đã làm mã này:
layer = qgis.utils.iface.activeLayer()
feat = layer.getFeatures()
for feature in feat:
geom = feature.geometry()
n = 1
ver = geom.vertexAt(0)
points=[]
while(ver != QgsPoint(0,0)):
n +=1
points.append(ver)
ver = geom.vertexAt(n)
print n
Và kết quả là tôi nhận được số đỉnh, nhưng chỉ của đối tượng cuối cùng. Tôi đoán tôi đang thiếu một vòng lặp while trên lớp (để lấy số cho mọi đối tượng), phải không? Nhưng tôi không biết nó trông như thế nào.
Tôi biết rằng có plugin 'Vertices counter ", nhưng nó không hoạt động (thậm chí không bắt đầu) trong trường hợp của tôi (QGIS 2.12, Win 8.1). Và tôi cần nó được thực hiện bằng Python.
Nhân tiện, bạn không nghĩ rằng các chàng trai, thật khó để có được số đỉnh trong khi rất dễ để có được tọa độ của mọi đỉnh?
EDIT: @nwduncan (@ArMoraer cũng vậy) đề nghị sửa chữa một vết lõm, và đó là đầu mối tốt. Tôi nhận thấy rằng bảng điều khiển Python cần được làm mới, bởi vì đôi khi nó không thể xử lý các vết lõm. Hy vọng nó sẽ giúp những người mới bắt đầu. Mã cuối cùng là:
layer = qgis.utils.iface.activeLayer()
feat = layer.getFeatures()
for feature in feat:
geom = feature.geometry()
n = 1
ver = geom.vertexAt(0)
points=[]
while(ver != QgsPoint(0,0)):
n +=1
points.append(ver)
ver=geom.vertexAt(n)
print n
QgsPoint(0,0)
là một điểm hợp lệ trong một số dự đoán.