Hitung panjang garis dengan Python di QGIS

Jawaban:

15

Dari Dokumen QGIS: Penanganan Geometri , Anda dapat menggunakan kode berikut untuk mendapatkan panjang dari setiap baris yang dipilih:

layer = qgis.utils.iface.activeLayer()
features = layer.selectedFeatures()
for f in features:
    geom = f.geometry()
    print "Length:", geom.length()

Semoga ini membantu!

Yusuf
sumber
1
Terkalahkan oleh detik ... :-)
Alexandre Neto
@AlexandreNeto - Haha maaf! Apakah kebetulan semata-mata karena saya juga menggunakan kode persis ini untuk lapisan saya beberapa saat yang lalu :)
Joseph
@gustavgans - Selamat datang, sobat :)
Joseph
@ Joseph, bagaimana saya bisa men-tweak itu sehingga menghitungnya untuk semua atrribut di semua lapisan dalam proyek daripada hanya yang dipilih? Saya telah bereksperimen sedikit tetapi kode saya tidak melakukan trik: layer = layer di QgsMapLayerRegistry.instance (). MapLayers (). Values ​​() values ​​= layer.allFeatures () untuk f dalam fitur: geom = f.geometry ( ) cetak "Panjang:", geom.length ()
Hannes Ledegen
1
@HannesLedegen - Anda dekat! Coba for layer in QgsMapLayerRegistry.instance().mapLayers().values(): features = layer.getFeatures() for f in features:...
Joseph
2

Kode yang bagus, namun ini hanya berfungsi untuk lapisan yang dipilih dan hanya mencetaknya. Dengan bantuan dari posting lain dan Joseph saya mengubahnya menjadi kode yang menambahkan atribut ke semua lapisan dalam proyek Anda dengan panjangnya.

from PyQt4.QtCore import QVariant
for layer in QgsMapLayerRegistry.instance().mapLayers().values():
    features = layer.getFeatures()
    for f in features:
        geom = f.geometry()
        leng = geom.length()
        res = layer.dataProvider().addAttributes([QgsField("Length", QVariant.Int)])
        layer.updateFields()
        fieldIndex = layer.dataProvider().fieldNameIndex( "Length" )
        attrFeatMap = {}
        attrMap = { fieldIndex : leng }
        for feature in layer.getFeatures():
            attrFeatMap[ feature.id() ] = attrMap
        layer.dataProvider().changeAttributeValues( attrFeatMap )
Hannes Ledegen
sumber