累積値列

Aug 28 2020

線の連鎖または累積値を計算するために、ここに投稿されたいくつかの例とソリューションを確認しました。しかし、私はまだ望ましい結果を達成することができません。私がやろうとしているのは、「長さ」の値を「行番号」で追加することです。したがって、ラインセクション1の連鎖/累積値= 7.69026,2 = 14.83986、3 = 22.69265 ......など。これを実現するためにフィールド計算機で使用できる式はありますか?

回答

5 LouisCottereau Aug 28 2020 at 13:32

フィールド計算機で、関数エディターに移動し、新しいファイルを作成して、次の関数を挿入します。

"""
Define new functions using @qgsfunction. feature and parent must always be the
last args. Use args=-1 to pass a list of values as arguments
"""

from qgis.core import *
from qgis.gui import *
import sys
if sys.version_info.major == 3:
    layer_registry = QgsProject
else:
    layer_registry = QgsMapLayerRegistry

@qgsfunction(args="auto", group='Custom')
def get_length_feature(layer_id, feature, parent):
    id = feature.id()
    len_tot = 0.
    for feat in layer_registry.instance().mapLayer(layer_id).getFeatures():
        if feat["id"] <= feature["id"]:
            len_tot += feat.geometry().length()
    return len_tot

それをロードし、式タブに戻り、以下を挿入します。 get_length_feature( @layer_id )

2 MBain Aug 28 2020 at 19:02

カスタム関数の+1は、袖を上げるのに良いトリックです。

この場合、組み込みaggregate関数を使用してそれを行うことができます。

aggregate( 'Line_CHain','sum', "Length" ,"id"<=  attribute( @parent,'id'))