[Qgis-developer] [Processing][Rscript] Use Extent Parameter

René-Luc Dhont rldhont at gmail.com
Tue May 24 07:04:26 PDT 2016


Hi Alexander,

I have created a pull request https://github.com/qgis/QGIS/pull/3097

Regards,

Le 24/05/2016 15:53, Alexander Bruy a écrit :
> Hi René-Luc,
>
> extent and some other parameters/outputs currently are not available
> in modeler and scripts. I plan to add support for missed params/outputs
> at hackfest.
>
> 2016-05-24 16:40 GMT+03:00 René-Luc Dhont <rldhont at gmail.com>:
>> Hi devs,
>>
>> Has someone already created a Rscript for processing which use an extent in
>> input parameters ?
>>
>> By reading the code, I understand that extent parameter is not set in the
>> RScript.
>> In the method 'getImportCommands' of the 'RAlgorithm' class, ParameterExtent
>> is never transform to an R command.
>> Can someone confirm it ?
>>
>> How to pass translate ParameterExtent to RScript ?
>>
>> The getImportCommands code:
>> ```
>>      def getImportCommands(self):
>>          commands = []
>>
>>          # Just use main mirror
>> commands.append('options("repos"="http://cran.at.r-project.org/")')
>>
>>          # Try to install packages if needed
>>          if isWindows():
>>              commands.append('.libPaths(\"' +
>> unicode(RUtils.RLibs()).replace('\\', '/') + '\")')
>>          packages = RUtils.getRequiredPackages(self.script)
>>          packages.extend(['rgdal', 'raster'])
>>          for p in packages:
>>              commands.append('tryCatch(find.package("' + p
>>                              + '"), error=function(e) install.packages("' + p
>>                              + '", dependencies=TRUE))')
>>          commands.append('library("raster")')
>>          commands.append('library("rgdal")')
>>
>>          for param in self.parameters:
>>              if isinstance(param, ParameterRaster):
>>                  value = param.value
>>                  value = value.replace('\\', '/')
>>                  if self.passFileNames:
>>                      commands.append(param.name + ' = "' + value + '"')
>>                  elif self.useRasterPackage:
>>                      commands.append(param.name + ' = ' + 'brick("' + value
>>                                      + '")')
>>                  else:
>>                      commands.append(param.name + ' = ' + 'readGDAL("' +
>> value
>>                                      + '")')
>>              if isinstance(param, ParameterVector):
>>                  value = param.getSafeExportedLayer()
>>                  value = value.replace('\\', '/')
>>                  filename = os.path.basename(value)
>>                  filename = filename[:-4]
>>                  folder = os.path.dirname(value)
>>                  if self.passFileNames:
>>                      commands.append(param.name + ' = "' + value + '"')
>>                  else:
>>                      commands.append(param.name + ' = readOGR("' + folder
>>                                      + '",layer="' + filename + '")')
>>              if isinstance(param, ParameterTable):
>>                  value = param.value
>>                  if not value.lower().endswith('csv'):
>>                      raise GeoAlgorithmExecutionException(
>>                          'Unsupported input file format.\n' + value)
>>                  if self.passFileNames:
>>                      commands.append(param.name + ' = "' + value + '"')
>>                  else:
>>                      commands.append(param.name + ' <- read.csv("' + value
>>                                      + '", head=TRUE, sep=",")')
>>              elif isinstance(param, (ParameterTableField, ParameterString,
>>                                      ParameterFile)):
>>                  commands.append(param.name + '="' + param.value + '"')
>>              elif isinstance(param, (ParameterNumber, ParameterSelection)):
>>                  commands.append(param.name + '=' + unicode(param.value))
>>              elif isinstance(param, ParameterBoolean):
>>                  if param.value:
>>                      commands.append(param.name + '=TRUE')
>>                  else:
>>                      commands.append(param.name + '=FALSE')
>>              elif isinstance(param, ParameterMultipleInput):
>>                  iLayer = 0
>>                  if param.datatype == ParameterMultipleInput.TYPE_RASTER:
>>                      layers = param.value.split(';')
>>                      for layer in layers:
>>                          layer = layer.replace('\\', '/')
>>                          if self.passFileNames:
>>                              commands.append('tempvar' + unicode(iLayer) + '
>> <- "'
>>                                              + layer + '"')
>>                          elif self.useRasterPackage:
>>                              commands.append('tempvar' + unicode(iLayer) + '
>> <- '
>>                                              + 'brick("' + layer + '")')
>>                          else:
>>                              commands.append('tempvar' + unicode(iLayer) + '
>> <- '
>>                                              + 'readGDAL("' + layer + '")')
>>                          iLayer += 1
>>                  else:
>>                      exported = param.getSafeExportedLayers()
>>                      layers = exported.split(';')
>>                      for layer in layers:
>>                          if not layer.lower().endswith('shp') \
>>                             and not self.passFileNames:
>>                              raise GeoAlgorithmExecutionException(
>>                                  'Unsupported input file format.\n' + layer)
>>                          layer = layer.replace('\\', '/')
>>                          filename = os.path.basename(layer)
>>                          filename = filename[:-4]
>>                          if self.passFileNames:
>>                              commands.append('tempvar' + unicode(iLayer) + '
>> <- "'
>>                                              + layer + '"')
>>                          else:
>>                              commands.append('tempvar' + unicode(iLayer) + '
>> <- '
>>                                              + 'readOGR("' + layer +
>> '",layer="'
>>                                              + filename + '")')
>>                          iLayer += 1
>>                  s = ''
>>                  s += param.name
>>                  s += ' = c('
>>                  iLayer = 0
>>                  for layer in layers:
>>                      if iLayer != 0:
>>                          s += ','
>>                      s += 'tempvar' + unicode(iLayer)
>>                      iLayer += 1
>>                  s += ')\n'
>>                  commands.append(s)
>>
>>          if self.showPlots:
>>              htmlfilename = self.getOutputValue(RAlgorithm.RPLOTS)
>>              self.plotsFilename = htmlfilename + '.png'
>>              self.plotsFilename = self.plotsFilename.replace('\\', '/')
>>              commands.append('png("' + self.plotsFilename + '")')
>>
>>          return commands
>> ```
>>
>> René-Luc
>> _______________________________________________
>> Qgis-developer mailing list
>> Qgis-developer at lists.osgeo.org
>> List info: http://lists.osgeo.org/mailman/listinfo/qgis-developer
>> Unsubscribe: http://lists.osgeo.org/mailman/listinfo/qgis-developer
>
>



More information about the Qgis-developer mailing list