访问上一个输出的列值



我开始使用PyQGIS。我在QGIS中使用了Modellbuilder,导出到Python,并更改了一些行以使其再次工作。一切都在运转,只有一条线。(我通过手动设置正确的值来测试它。(

我试着把一个图层过滤成我想要的对象。在那些对象(都在同一位置/坐标上(中,我想获取X和Y坐标(保存在列"X"(#10(和"X"中(;Y";(#11((,并将它们用作最短路径函数的START_POINT。

# NVT Objekt
alg_params = {
'EXPRESSION': '"Lokationstyp" = 'NVT'rnANDrnto_int("Lokationsnummer") = @NVtNummereinfachzB0011 ',
'INPUT': 'standortliste_4796c771_8b3f_4a47_9958_33aeb9d97c85',
'OUTPUT': QgsProcessing.TEMPORARY_OUTPUT
}
outputs['NvtObjekt'] = processing.run('native:extractbyexpression', alg_params, context=context, feedback=feedback, is_child_algorithm=True)
feedback.setCurrentStep(4)
if feedback.isCanceled():
return {}
...
# Kürzester Weg (Punkt zu Layer)
alg_params = {
'DEFAULT_DIRECTION': 2,  # Beide Richtungen
'DEFAULT_SPEED': 50,
'DIRECTION_FIELD': '',
'END_POINTS': outputs['StandortlisteNachRohrverbandFilternNachPositionExtrahieren']['OUTPUT'],
'INPUT': outputs['Rohr_rohrverbandNachNvtUndRohrverbandFilternNachAusdruckExtrahieren']['OUTPUT'],
'SPEED_FIELD': '',
'START_POINT': QgsExpression(' @NVT_Objekt_OUTPUT_maxx || ',' ||  @NVT_Objekt_OUTPUT_maxy rn||rn' [EPSG:25832]'').evaluate(),
'STRATEGY': 0,  # Kürzester
'TOLERANCE': 0.05,
'VALUE_BACKWARD': '',
'VALUE_BOTH': '',
'VALUE_FORWARD': '',
'OUTPUT': QgsProcessing.TEMPORARY_OUTPUT
}
outputs['KrzesterWegPunktZuLayer'] = processing.run('native:shortestpathpointtolayer', alg_params, context=context, feedback=feedback, is_child_algorithm=True)
...

一段时间以来,我一直在尝试为START_POINT找到一个有效的表达式,但我尝试的一切都失败了。大多数时候我都会得到";str对象没有属性&quot-尝试访问输出['NvtObjekt']['OUTPUT']['X']或输出['NvtObjekt']['OUTPUT']时出错。maximumValue(10(.

我发现您无法轻松访问函数的输出并将其作为一个层继续使用。您必须先将输出保存为图层。

我现在的解决方案是这样的:

alg_params = {
'EXPRESSION': '"Lokationstyp" = 'NVT'rnANDrnto_int("Lokationsnummer") = ' + str(nvt_loop_count) ,
'INPUT': parameters['standortliste'],
##'OUTPUT': parameters['Nvt']
'OUTPUT': QgsProcessing.TEMPORARY_OUTPUT
}
outputs['NvtObjekt'] = processing.run('native:extractbyexpression', alg_params, context=context, feedback=feedback, is_child_algorithm=True)
nvtobjektlayer= context.takeResultLayer(outputs['NvtObjekt']["OUTPUT"])
...
alg_params = {
'DEFAULT_DIRECTION': 2,  # Beide Richtungen
'DEFAULT_SPEED': 50,
'DIRECTION_FIELD': '',
'END_POINTS': outputs['StandortlisteNachRohrverbandFilternNachPositionExtrahieren']['OUTPUT'],
'INPUT': outputs['Rohr_rohrverbandNachNvtUndRohrverbandFilternNachAusdruckExtrahieren']['OUTPUT'],
'SPEED_FIELD': '',
##'START_POINT': '476813.633595,5524575.219635 [EPSG:25832]',
##'START_POINT': str(context.takeResultLayer(outputs['NvtObjekt']['OUTPUT']).maximumValue(10)) + ' || ',' || ' + str(context.takeResultLayer(outputs['NvtObjekt']['OUTPUT']).maximumValue(11)) + ' rn||rn' [EPSG:25832]'',
'START_POINT': str(nvtobjektlayer.maximumValue(10)) + ',' + str(nvtobjektlayer.maximumValue(11)) + ' [EPSG:25832]',
'STRATEGY': 0,  # Kürzester
'TOLERANCE': 0.05,
'VALUE_BACKWARD': '',
'VALUE_BOTH': '',
'VALUE_FORWARD': '',
'OUTPUT': QgsProcessing.TEMPORARY_OUTPUT
}
outputs['KrzesterWegPunktZuLayer'] = processing.run('native:shortestpathpointtolayer', alg_params, context=context, feedback=feedback, is_child_algorithm=True)

最新更新