无法解析 QGIS 中的函数
Cannot parse function in QGIS
我有点卡在这里,非常感谢任何帮助。
我有一个 QGIS 图层 (csv),其中包含三列(X、节点、攻丝)。 x是一个值,其他都是字符串。
我想 add/substract 来自 X 的值,基于两列中的字符串(值)。
为此,我创建了一个函数。此函数有两个字典,其中包括 node/tapping 个具有关联值的字符串。
我在 Jupyter notebook 中 运行 这个(通过解析节点的固定变量并点击),它通过定义和 returns 解析正确的值,然后我可以将其添加到X.
我在 QGIS(函数编辑器)中尝试过相同的方法,但是当我在表达式构建器中调用定义时,我得到:函数被调用时参数数量错误。预期为 0 但得到 2,这对我来说似乎很奇怪,因为它被定义为解析两个(在本例中)字符串。
函数
from qgis.core import *
from qgis.gui import *
from qgis.utils import *
@qgsfunction(args='auto', group='Custom')
def dbaddition(val1, val2):
Node_settings = {"Node1: Amp2-A (11a02)":6,
"Node2: Amp1-B (21B01)":5,
"Node1: Amp1-B (11b01)":5,
"Node2: Amp2-A (21A02)":6,
"Node2: Amp3-B (21B03)":10,
"Node2: Indoor Loop 23B (21B02)":5,
"Node2: Amp3-A (21A03)":9.5,
"Node2: Amp1-A (21A01)":7,
"Node2: Indoor Loop 20B (21B02)":5,
"Node1: Amp1-A (11a01)":0,
"Node3: Amp2-B (31B02)":5,
"Node3: Amp4-B (31B04)":0,
"Node3: Amp1-B (31B01)":0,
"Node3: Amp4-A (31A04)":2,
"Node1: Amp2-B (11b02)":5,
"Node1: Amp3-A (11A03)":0}
Tapping_settings = {"6W":7.8,
"3W":4.8,
"1.5W":1.8,
"1W":0,
"0.6W":-2.2,
"0.4W":-4}
Node_dB = Node_settings.get(val1,0)
Tap_dB = Tapping_settings.get(val2, 0)
speaker_change = float(Node_dB) + float(Tap_dB)
return speaker_change
表达式调用:
dbaddition(“节点”,“攻丝”)
解决方案是将定义重新定义为:
def dbaddition(val1, val2, feature, parent):
我有点卡在这里,非常感谢任何帮助。
我有一个 QGIS 图层 (csv),其中包含三列(X、节点、攻丝)。 x是一个值,其他都是字符串。
我想 add/substract 来自 X 的值,基于两列中的字符串(值)。 为此,我创建了一个函数。此函数有两个字典,其中包括 node/tapping 个具有关联值的字符串。
我在 Jupyter notebook 中 运行 这个(通过解析节点的固定变量并点击),它通过定义和 returns 解析正确的值,然后我可以将其添加到X.
我在 QGIS(函数编辑器)中尝试过相同的方法,但是当我在表达式构建器中调用定义时,我得到:函数被调用时参数数量错误。预期为 0 但得到 2,这对我来说似乎很奇怪,因为它被定义为解析两个(在本例中)字符串。
函数
from qgis.core import *
from qgis.gui import *
from qgis.utils import *
@qgsfunction(args='auto', group='Custom')
def dbaddition(val1, val2):
Node_settings = {"Node1: Amp2-A (11a02)":6,
"Node2: Amp1-B (21B01)":5,
"Node1: Amp1-B (11b01)":5,
"Node2: Amp2-A (21A02)":6,
"Node2: Amp3-B (21B03)":10,
"Node2: Indoor Loop 23B (21B02)":5,
"Node2: Amp3-A (21A03)":9.5,
"Node2: Amp1-A (21A01)":7,
"Node2: Indoor Loop 20B (21B02)":5,
"Node1: Amp1-A (11a01)":0,
"Node3: Amp2-B (31B02)":5,
"Node3: Amp4-B (31B04)":0,
"Node3: Amp1-B (31B01)":0,
"Node3: Amp4-A (31A04)":2,
"Node1: Amp2-B (11b02)":5,
"Node1: Amp3-A (11A03)":0}
Tapping_settings = {"6W":7.8,
"3W":4.8,
"1.5W":1.8,
"1W":0,
"0.6W":-2.2,
"0.4W":-4}
Node_dB = Node_settings.get(val1,0)
Tap_dB = Tapping_settings.get(val2, 0)
speaker_change = float(Node_dB) + float(Tap_dB)
return speaker_change
表达式调用: dbaddition(“节点”,“攻丝”)
解决方案是将定义重新定义为: def dbaddition(val1, val2, feature, parent):