Pertama-tama, saya ingin mengatakan bahwa saya tahu bahwa masalah serupa telah diangkat sebelumnya, tetapi tidak memberikan solusi yang memuaskan.
Saya perlu mendapatkan jumlah simpul dari setiap objek pada layer garis vektor. Mendasarkan pada artikel ini: https://joseguerreroa.wordpress.com/2014/07/28/contar-y-extraer-nodos-vertices-para-vectoriales-de-linea-o-poligono-mediante-pyqgis/
Saya melakukan kode ini:
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
Dan sebagai hasilnya saya mendapatkan jumlah simpul, tetapi hanya dari objek terakhir. Saya kira saya kehilangan satu loop sementara pada layer (untuk mendapatkan nomor untuk setiap objek), apakah saya benar? Tapi saya tidak tahu bagaimana tampilannya.
Saya tahu bahwa ada plugin 'Vertices counter ", tetapi tidak berfungsi (bahkan tidak memulai) dalam kasus saya (QGIS 2.12, Win 8.1). Dan saya perlu melakukannya dengan Python.
Ngomong-ngomong, bukankah menurut kalian, sangat sulit untuk mendapatkan jumlah simpul sementara sangat mudah untuk mendapatkan koordinat dari setiap simpul?
EDIT: @nwduncan (@ArMoraer juga) menyarankan untuk memperbaiki lekukan, dan itu adalah petunjuk yang bagus. Saya perhatikan bahwa konsol Python perlu penyegaran, karena terkadang tidak dapat menangani lekukan. Semoga ini akan membantu pemula lainnya. Kode terakhir adalah:
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)
merupakan poin yang valid dalam beberapa proyeksi.Jawaban:
Lekukan.
Bagian pertama dari kode Anda sudah benar, tetapi sisanya dapat sangat disederhanakan jika Anda hanya ingin jumlah simpul:
Jika Anda juga ingin koordinat titik, maka Anda dapat menulis (hanya polyline):
sumber
vertices = feature.geometry().asPolyline()
untukvertices = feature.geometry().asMultiPolyline()
Itu tidak menghitung jumlah simpul tetapi mencetak jenis angka acak (saya tidak dapat menghubungkannya dengan data yang saya miliki)Di QGIS 2.14, fungsi baru untuk menghitung simpul tersedia di
field calculator
:sumber
Pendekatan lain adalah dengan menggunakan ekspresi yang ditentukan pengguna. Mesin ekspresi akan membuat lingkaran untuk Anda. Blog Nathans memiliki demo bagus tentang itu:
http://nathanw.net/2012/11/10/user-defined-expression-functions-for-qgis/
sumber