คอลัมน์ค่าสะสม
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'))