[Qgis-developer] [Processing][Rscript] Use Extent Parameter
René-Luc Dhont
rldhont at gmail.com
Tue May 24 06:40:53 PDT 2016
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
More information about the Qgis-developer
mailing list