QGISでPythonを使用して線の長さを計算する


9

行の長さを計算するための「QGIS GUIの方法」について説明しているこの記事を見つけました。http://www.qgistutorials.com/en/docs/calculating_line_lengths.html

Pythonコードを使用してベクターレイヤーの1行(フィーチャ)の長さを計算するにはどうすればよいですか?

例として、黄色の線の長さを知りたい。

ここに画像の説明を入力してください

回答:


15

QGISドキュメント:ジオメトリ処理は、あなたが任意の選択した行(複数可)の長さを取得するには、次のコードを使用することができます。

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

お役に立てれば!


1
秒単位でビート... :-)
Alexandre Neto

@AlexandreNeto-ハハ申し訳ありません!ちょうど偶然だったのは、ほんの少し前のレイヤーにもこの正確なコードを使用していたからです:)
Joseph

@gustavgans-大歓迎の相棒:)
ジョセフ

@ジョセフ、どのようにそれを微調整して、選択されたものだけでなく、プロジェクトのすべてのレイヤーのすべての属性について計算することができますか?私は少し実験しましたが、私のコードはトリックを実行していません。 )print "Length:"、geom.length()
Hannes Ledegen

1
@HannesLedegen-あなたは近いです!試してみてくださいfor layer in QgsMapLayerRegistry.instance().mapLayers().values(): features = layer.getFeatures() for f in features:...
ジョセフ・

2

すばらしいコードですが、これは選択したレイヤーでのみ機能し、印刷するだけです。他の投稿とジョセフの助けを借りて、プロジェクトのすべてのレイヤーに長さの属性を追加するコードに変換しました。

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 )
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.