累積値列
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'))