A part of my skript uses the shortestpathpointtopoint algorithm, but it does only work in the second run (Python Console within QGIS). The discussed part of the script looks like
points_lyr = QgsProject.instance().mapLayersByName(u'cabinets')[0]
network_lyr = QgsProject.instance().mapLayersByName(u'pipes')[0]
for f in points_lyr.getFeatures():
if f.attribute('Art') == 2:
pStart = QgsPointXY(f.geometry().asPoint().x(),f.geometry().asPoint().y())
elif f.attribute('Art') == 4:
pStop = QgsPointXY(f.geometry().asPoint().x(),f.geometry().asPoint().y())
print('Start: ', pStart)
print('Stop: ', pStop)
parameters = {'INPUT': network_lyr,
'STRATEGY': 0,
'DIRECTION_FIELD': '',
'VALUE_FORWARD': '',
'VALUE_BACKWARD': '',
'VALUE_BOTH': '',
'DEFAULT_DIRECTION': 2,
'SPEED_FIELD': '',
'DEFAULT_SPEED': 1,
'TOLERANCE': 0,
'START_POINT': pStart,
'END_POINT': pStop,
'OUTPUT': 'memory:'}
my_line = processing.run('qgis:shortestpathpointtopoint', parameters)
This works perfectly, but only in the second run. In the first run I get the following error:
Traceback (most recent call last): File "C:\PROGRA~1\QGIS3~1.4\apps\Python37\lib\code.py", line 90, in runcode exec(code, self.locals) File "", line 1, in File "", line 37, in File "C:/PROGRA~1/QGIS3~1.4/apps/qgis/./python/plugins\processing\tools\general.py", line 96, in run return Processing.runAlgorithm(algOrName, parameters, onFinish, feedback, context) File "C:/PROGRA~1/QGIS3~1.4/apps/qgis/./python/plugins\processing\core\Processing.py", line 139, in runAlgorithm raise QgsProcessingException(msg) _core.QgsProcessingException: Unable to execute algorithm Incorrect parameter value for START_POINT
The prints of start&stop work in the first run. I don't get what I am doing wrong here.
-
are start and stop actually the same in each run?bugmenot123– bugmenot1232018年11月12日 16:42:49 +00:00Commented Nov 12, 2018 at 16:42
-
Yes, I reduced the layer to two points.AndreasK– AndreasK2018年11月12日 16:46:14 +00:00Commented Nov 12, 2018 at 16:46
1 Answer 1
After trying another input-type, it worked
for f in points_lyr.getFeatures():
if f.attribute('Art') == 2:
#pStart = QgsPointXY(f.geometry().asPoint().x(), f.geometry().asPoint().y())
pStart = str(f.geometry().asPoint().x()) + ',' + str(f.geometry().asPoint().y())
else:
continue
for f in points_lyr.getFeatures():
if f.attribute('Art') == 4:
#pStop = QgsPointXY(f.geometry().asPoint().x(), f.geometry().asPoint().y())
pStop = str(f.geometry().asPoint().x()) + ',' + str(f.geometry().asPoint().y())
parameters = {'INPUT': network_lyr,
'STRATEGY': 0,
'DIRECTION_FIELD': '',
'VALUE_FORWARD': '',
'VALUE_BACKWARD': '',
'VALUE_BOTH': '',
'DEFAULT_DIRECTION': 2,
'SPEED_FIELD': '',
'DEFAULT_SPEED': 1,
'TOLERANCE': 0,
'START_POINT': pStart,
'END_POINT': pStop,
'OUTPUT': 'memory:'}
So it does not work in the first run, when I use QgsPointXY, but it works when the input is a string. Don't know why, but I can work with strings as well.