Cột giá trị tích lũy

Aug 28 2020

Tôi đã xem qua một số ví dụ và giải pháp được đăng ở đây để tính toán cha đẻ của một dòng hoặc các giá trị tích lũy. Tuy nhiên, tôi vẫn không thể đạt được kết quả mong muốn. Những gì tôi đang cố gắng làm là thêm các giá trị 'Độ dài' bằng 'số hàng'. Vì vậy, giá trị Chaced / Tích lũy của đoạn đường 1 = 7.69026,2 = 14.83986, 3 = 22.69265 ...... vv. Có biểu thức nào tôi có thể sử dụng trong máy tính thực địa để đạt được điều này không?

Trả lời

5 LouisCottereau Aug 28 2020 at 13:32

Trong máy tính trường của bạn, hãy vào trình soạn thảo hàm, tạo một tệp mới, chèn hàm này:

"""
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

Tải nó, trở lại tab biểu thức và chèn như sau: get_length_feature( @layer_id )

2 MBain Aug 28 2020 at 19:02

+1 cho chức năng tùy chỉnh, chúng là một mẹo hay để có tay áo của bạn.

Trong trường hợp này, bạn có thể làm điều đó với aggregatechức năng tích hợp:

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