Após a atualização para o Qgis 3.0, tornou-se muito difícil encontrar informações sobre a gravação de scripts de processamento no Qgis 3.0.
@Underdark (veja aqui ) forneceu uma base para o esqueleto. Este código também parece ter sido adicionado no Qgis, ao escrever um novo script a partir do modelo (Qgis 3.0.2).
No entanto, não consegui encontrar nenhuma maneira de ajudar iniciantes em python como eu a entender como alterar esse código, especialmente para as camadas de entrada e saída.
Meu objetivo é escrever um script com duas camadas raster e um duplo como entrada, produzindo duas camadas.
Quais seriam as alterações necessárias no código de exemplo para permitir isso?
Para o Qgis 2.x, eu teria usado a seguinte sintaxe:
##Layer1=raster
##Layer2=raster
##myDouble=Double
##OutLayer1=output raster
##OutLayer2=output raster
Pelo que entendi, as alterações devem ser feitas no procedimento a seguir, mas não tenho certeza do que colocar em prática.
def initAlgorithm(self, config=None):
self.addParameter(QgsProcessingParameterFeatureSource(
self.INPUT,
self.tr("Input layer"),
[QgsProcessing.TypeVectorAnyGeometry]))
self.addParameter(QgsProcessingParameterFeatureSink(
self.OUTPUT,
self.tr("Output layer"),
QgsProcessing.TypeVectorAnyGeometry))
Em 16 de maio, a documentação da API pyg do Qgis foi lançada. No entanto, ainda não está claro para mim como usá-lo aqui. (O que pode muito bem ser uma falta de conhecimento de python)
Respostas:
Com a transição do QGIS2.x para o QGIS3.x, toda a estrutura de processamento foi reformulada e grande parte dela é executada agora como classes C ++ com as quais você pode interagir usando o Python. Infelizmente, a sintaxe simples dos parâmetros para IO de dados / conjunto de dados não é mais válida. A nova estrutura de parâmetros é muito mais orientada após os algoritmos de processamento interno (Python-) que você encontra pré-instalados na caixa de ferramentas.
A meu ver, você já seguiu a descrição da nova estrutura de algoritmos do @underdark. Mas, para ajustar essa estrutura aos seus requisitos (camadas raster, entrada dupla, etc.), é necessário alterar o código em vários locais do script. Eu codifiquei um exemplo aproximado com uma breve explicação para você (apenas um esqueleto de algoritmo baseado no exemplo @underdarks):
Quais etapas foram feitas?
QgsProcessingAlgorithm
.INPUT_RASTER_A = 'INPUT_RASTER_A'
) para fazer referência ao seu algoritmo com os parâmetros fornecidos pela estrutura de processamento.QgsProcessingParameterType
- no caso do seu algoritmo:QgsProcessingParameterRasterLayer
,QgsProcessingParameterNumber
e assim por diante. Você pode consultar as entradas da API (ou seja,QgsProcessingParameterRasterLayer
) para passar os argumentos corretos e construir os objetos de parâmetro.context
efeedback
objetos para oprocessAlgorithm()
método em que você obtém os conjuntos de dados de entrada dos parâmetros em tempo de execução (nesse caso, objetos QgsRasterLayer usando oparameterAsRasterLayer()
método etc.).processAlgorithm()
.Espero poder fornecer algumas idéias sobre como projetar seus algoritmos python no QGIS3. Sempre que você está parado, é sempre útil observar como os algoritmos existentes da estrutura de processamento lidam com os parâmetros. Você pode dar uma olhada neles aqui .
fonte