python - 为什么我在 QGIS 上为 native:extractbyexpression 算法收到“无法加载 INPUT 的源层:无效值”?
问题描述
我需要转换这个:
from qgis.core import QgsProcessing
from qgis.core import QgsProcessingAlgorithm
from qgis.core import QgsProcessingMultiStepFeedback
from qgis.core import QgsProcessingParameterVectorLayer
from qgis.core import QgsProcessingParameterFeatureSink
import processing
class Modelo(QgsProcessingAlgorithm):
def initAlgorithm(self, config=None):
self.addParameter(QgsProcessingParameterVectorLayer('inpput', 'input_file.shp', defaultValue=None))
self.addParameter(QgsProcessingParameterFeatureSink('output', 'UF_extraido.shp', type=QgsProcessing.TypeVectorAnyGeometry, createByDefault=True, defaultValue=None))
def processAlgorithm(self, parameters, context, model_feedback):
# Use a multi-step feedback, so that individual child algorithm progress reports are adjusted for the
# overall progress through the model
feedback = QgsProcessingMultiStepFeedback(1, model_feedback)
results = {}
outputs = {}
# Extrair por expressão
alg_params = {
'EXPRESSION': '\"S_majority\" = 1',
'INPUT': parameters['input'],
'OUTPUT': parameters['output']
}
outputs['ExtrairPorExpresso'] = processing.run('native:extractbyexpression', alg_params, context=context, feedback=feedback, is_child_algorithm=True)
results['output'] = outputs['ExtrairPorExpresso']['OUTPUT']
return results
def name(self):
return 'modelo'
def displayName(self):
return 'modelo'
def group(self):
return ''
def groupId(self):
return ''
def createInstance(self):
return Modelo()
这是 QGIS 中使用的自定义脚本。
...到这样的事情:
def extract_by_expression(input_shape_file_path, output_shape_file_path):
parameters = {
'EXPRESSION': '\"S_majority\" = 1',
'INPUT': QgsProcessingParameterVectorLayer('input', input_shape_file_path, defaultValue=None),
'OUTPUT': QgsProcessingParameterFeatureSink('output', output_shape_file_path, type=QgsProcessing.TypeVectorAnyGeometry, createByDefault=True, defaultValue=None)
}
processing.run('native:extractbyexpression', parameters)
我为其他算法做了这个,一切正常。但是对于这种特定情况,我收到此错误:
Traceback (most recent call last):
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/code.py", line 90, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
File "<string>", line 467, in <module>
File "<string>", line 460, in extract_by_expression
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/plugins/processing/tools/general.py", line 108, in run
return Processing.runAlgorithm(algOrName, parameters, onFinish, feedback, context)
File "/Applications/QGIS.app/Contents/MacOS/../Resources/python/plugins/processing/core/Processing.py", line 168, in runAlgorithm
raise QgsProcessingException(msg)
_core.QgsProcessingException: Unable to execute algorithm
Could not load source layer for INPUT: invalid value
输入文件没问题,它正在用于其他算法。所以我想这不是文件本身的问题。
我正在使用QGIS 3.18.1-Zürich,我的想法是能够编写自己的脚本,而不是在 QGIS 界面中手动执行。
谢谢!
解决方案
推荐阅读
- android - Can I disable R8 just for some flavors without using command line?
- ruby-on-rails - How can I run two instances of a rails app from 2 different git branches?
- sql - sum 2 case functions while joining 3 tables sql sql server
- buck - 访问 Buck 中 genrule 给出的路径下的文件
- python - 将字典键/值添加到列表理解
- javascript - javascript 更改全局变量 setTimeout
- ios - 优化将 MTLTexture 渲染到 Display 的性能?
- python - 无法导入python模块pyo
- git - 从 GitLab 和 Bitbucket 移动存储库,如何测试这个过程是否正确完成?(包括历史、标签、提交等)
- r - 将数据帧拆分为多个然后应用一个函数,使用 for 循环