Calculer des longueurs de ligne avec Python dans QGIS


Réponses:


15

À partir des documents QGIS: gestion de la géométrie , vous pouvez utiliser le code suivant pour obtenir la longueur de toute ligne sélectionnée:

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

J'espère que cela t'aides!


1
Battu par secondes ... :-)
Alexandre Neto

@AlexandreNeto - Haha désolé! Était-ce une pure coïncidence parce que j'utilisais également ce code exact pour mes couches il y a quelques instants :)
Joseph

@gustavgans - Copain le plus bienvenu :)
Joseph

@Joseph, comment puis-je le modifier pour qu'il le calcule pour tous les attributs de tous les calques d'un projet plutôt que seulement ceux sélectionnés? J'ai un peu expérimenté mais mon code ne fait pas l'affaire: couche = couche dans QgsMapLayerRegistry.instance (). MapLayers (). Values ​​() features = layer.allFeatures () for f in features: geom = f.geometry ( ) imprimer "Longueur:", geom.length ()
Hannes Ledegen

1
@HannesLedegen - Vous êtes proche! Essayez for layer in QgsMapLayerRegistry.instance().mapLayers().values(): features = layer.getFeatures() for f in features:...
Joseph

2

Excellent code, mais cela ne fonctionne que pour le calque sélectionné et l'imprime uniquement. Avec l'aide d'autres publications et de Joseph, je l'ai transformé en un code qui ajoute un attribut à toutes les couches de votre projet avec la longueur.

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 )
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.