คอลัมน์ค่าสะสม

Aug 28 2020

ฉันเคยผ่านตัวอย่างและวิธีแก้ปัญหาบางส่วนที่โพสต์ไว้ที่นี่สำหรับการคำนวณ chainage ของเส้นหรือค่าสะสม อย่างไรก็ตามฉันยังไม่สามารถบรรลุผลลัพธ์ที่ต้องการได้ สิ่งที่ฉันพยายามทำคือเพิ่มค่า 'ความยาว' ด้วย 'หมายเลขแถว' ดังนั้น Chainage / มูลค่าสะสมของบรรทัดส่วนที่ 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'))