35
35
QgsMessageLog ,
36
36
QgsMapLayer ,
37
37
QgsApplication ,
38
- QgsProcessing ,
38
+ QgsProcessingException ,
39
39
QgsProcessingAlgorithm ,
40
40
QgsProcessingParameterMultipleLayers ,
41
41
QgsProcessingParameterDefinition ,
@@ -165,6 +165,7 @@ def defineCharacteristicsFromFile(self):
165
165
# reset list of options to 'self.pixelTypes'.
166
166
if name == 'outputpixeltype' :
167
167
param .setOptions (self .pixelTypes )
168
+ param .setDefaultValue (self .pixelTypes .index ('float' ))
168
169
169
170
self .addParameter (param )
170
171
#parameter is added now and we must move to next line
@@ -185,10 +186,6 @@ def preprocessParameters(self, parameters):
185
186
if param is None :
186
187
continue
187
188
188
- #if name of parameter is 'pixtype',
189
- #it is considered valid if it has value other than float
190
- if k == 'outputpixeltype' and self .pixelTypes [int (v )] == 'float' :
191
- continue
192
189
# Any other valid parameters have:
193
190
#- empty or no metadata
194
191
#- metadata without a 'group_key'
@@ -211,7 +208,8 @@ def processAlgorithm(self, parameters, context, feedback):
211
208
continue
212
209
# for 'outputpixeltype' parameter we find the pixeltype string from self.pixelTypes
213
210
if k == 'outputpixeltype' :
214
- outputPixelType = self .pixelTypes [int (parameters ['outputpixeltype' ])]
211
+ pixel_type = self .pixelTypes [int (parameters ['outputpixeltype' ])]
212
+ outputPixelType = None if pixel_type == 'float' else pixel_type
215
213
continue
216
214
217
215
param = self .parameterDefinition (k )
@@ -223,23 +221,30 @@ def processAlgorithm(self, parameters, context, feedback):
223
221
value = self .parameterAsBool (parameters , param .name (), context )
224
222
elif isinstance (param , QgsProcessingParameterCrs ):
225
223
crsValue = self .parameterAsCrs (parameters , param .name (), context )
226
- value = crsValue .authid ().split ('EPSG:' )[1 ]
224
+ authid = crsValue .authid ()
225
+ if authid .startswith ('EPSG:' ):
226
+ value = authid .split ('EPSG:' )[1 ]
227
+ else :
228
+ raise QgsProcessingException (
229
+ self .tr ("Incorrect value for parameter '{}'. No EPSG code found in '{}'" .format (
230
+ param .name (),
231
+ authid )))
227
232
elif isinstance (param , QgsProcessingParameterFile ):
228
233
value = self .parameterAsFile (parameters , param .name (), context )
229
234
elif isinstance (param , QgsProcessingParameterMultipleLayers ):
230
235
layers = self .parameterAsLayerList (parameters , param .name (), context )
231
236
if layers is None or len (layers ) == 0 :
232
237
continue
233
- value = ' ' .join (['"{}"' .format (layer . source ( )) for layer in layers ])
238
+ value = ' ' .join (['"{}"' .format (self . getLayerSource ( param . name (), layer )) for layer in layers ])
234
239
elif isinstance (param , QgsProcessingParameterNumber ):
235
240
if param .dataType () == QgsProcessingParameterNumber .Integer :
236
241
value = self .parameterAsInt (parameters , param .name (), context )
237
242
else :
238
243
value = self .parameterAsDouble (parameters , param .name (), context )
239
244
elif isinstance (param , (QgsProcessingParameterRasterLayer , QgsProcessingParameterVectorLayer )):
240
- value = '"{}"' .format (self .parameterAsLayer (parameters , param .name (), context ). source ( ))
245
+ value = '"{}"' .format (self .getLayerSource ( param . name (), self . parameterAsLayer (parameters , param .name (), context )))
241
246
elif isinstance (param , QgsProcessingParameterString ):
242
- value = '"{}"' .format (parameters [ param .name ()] )
247
+ value = '"{}"' .format (self . parameterAsString ( parameters , param .name (), context ) )
243
248
else :
244
249
# Use whatever is given
245
250
value = '"{}"' .format (parameters [param .name ()])
@@ -270,3 +275,12 @@ def processAlgorithm(self, parameters, context, feedback):
270
275
if o .name () in output_files :
271
276
result [o .name ()] = output_files [o .name ()]
272
277
return result
278
+
279
+ def getLayerSource (self , name , layer ):
280
+ providerName = layer .dataProvider ().name ()
281
+ #TODO: add other provider support in OTB, eg: memory
282
+ if providerName in ['ogr' , 'gdal' ]:
283
+ return layer .source ()
284
+ else :
285
+ raise QgsProcessingException (
286
+ self .tr ("OTB currently support only gdal and ogr provider. Parameter '{}' uses '{}' provider" .format (name , providerName )))
0 commit comments