mirror of
https://github.com/qgis/QGIS.git
synced 2025-11-09 00:17:27 -05:00
[sextante] added preprocessing of input params for saga algorithms
This commit is contained in:
parent
ab98569f44
commit
c7eb99bae1
@ -47,13 +47,9 @@ class FieldsCalculator(GeoAlgorithm):
|
||||
FORMULA = "FORMULA"
|
||||
OUTPUT_LAYER = "OUTPUT_LAYER"
|
||||
|
||||
TYPE_NAMES = ["Integer", "Float", "String"]
|
||||
TYPES = [QVariant.Int, QVariant.Double, QVariant.String]
|
||||
TYPE_NAMES = ["Float", "Integer", "String", "Boolean"]
|
||||
TYPES = [QVariant.Double, QVariant.Int, QVariant.String. QVariant.Bool]
|
||||
|
||||
#===========================================================================
|
||||
# def getIcon(self):
|
||||
# return QtGui.QIcon(os.path.dirname(__file__) + "/../images/qgis.png")
|
||||
#===========================================================================
|
||||
|
||||
def defineCharacteristics(self):
|
||||
self.name = "Field calculator"
|
||||
@ -62,7 +58,7 @@ class FieldsCalculator(GeoAlgorithm):
|
||||
self.addParameter(ParameterString(self.FIELD_NAME, "Result field name"))
|
||||
self.addParameter(ParameterSelection(self.FIELD_TYPE, "Field type", self.TYPE_NAMES))
|
||||
self.addParameter(ParameterNumber(self.FIELD_LENGTH, "Field length", 1, 255, 10))
|
||||
self.addParameter(ParameterNumber(self.FIELD_PRECISION, "Field precision", 0, 10, 0))
|
||||
self.addParameter(ParameterNumber(self.FIELD_PRECISION, "Field precision", 0, 10, 5))
|
||||
self.addParameter(ParameterString(self.FORMULA, "Formula"))
|
||||
self.addOutput(OutputVector(self.OUTPUT_LAYER, "Output layer"))
|
||||
|
||||
@ -85,14 +81,17 @@ class FieldsCalculator(GeoAlgorithm):
|
||||
nFeat = provider.featureCount()
|
||||
nElement = 0
|
||||
features = QGisLayers.features(layer)
|
||||
|
||||
fieldnames = [field.name() for field in provider.fields()]
|
||||
fieldnames.sort(key=len, reverse=False)
|
||||
fieldidx = [fieldnames.index(field.name()) for field in provider.fields()]
|
||||
print fieldidx
|
||||
for inFeat in features:
|
||||
progress.setPercentage(int((100 * nElement) / nFeat))
|
||||
attrs = inFeat.attributes()
|
||||
expression = formula
|
||||
k = 0
|
||||
for attr in attrs:
|
||||
expression = expression.replace(unicode(fields[k].name()), unicode(attr))
|
||||
k += 1
|
||||
for idx in fieldidx:
|
||||
expression = expression.replace(unicode(fields[idx].name()), unicode(attrs[idx]))
|
||||
try:
|
||||
result = eval(expression)
|
||||
except Exception:
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
FILE(GLOB PY_FILES *.py)
|
||||
FILE(GLOB DESCR_FILES description/*.txt)
|
||||
|
||||
ADD_SUBDIRECTORY(ext)
|
||||
|
||||
PLUGIN_INSTALL(sextante saga ${PY_FILES})
|
||||
PLUGIN_INSTALL(sextante saga/description ${DESCR_FILES})
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
* *
|
||||
***************************************************************************
|
||||
"""
|
||||
import importlib
|
||||
|
||||
__author__ = 'Victor Olaya'
|
||||
__date__ = 'August 2012'
|
||||
@ -181,6 +182,8 @@ class SagaAlgorithm(GeoAlgorithm):
|
||||
commands = list()
|
||||
self.exportedLayers = {}
|
||||
|
||||
self.preProcessInputs()
|
||||
|
||||
#1: Export rasters to sgrd and vectors to shp
|
||||
# Tables must be in dbf format. We check that.
|
||||
if self.resample:
|
||||
@ -308,6 +311,7 @@ class SagaAlgorithm(GeoAlgorithm):
|
||||
|
||||
|
||||
#4 Run SAGA
|
||||
commands = self.editCommands(commands)
|
||||
SagaUtils.createSagaBatchJobFileFromSagaCommands(commands)
|
||||
loglines = []
|
||||
loglines.append("SAGA execution commands")
|
||||
@ -319,6 +323,28 @@ class SagaAlgorithm(GeoAlgorithm):
|
||||
SagaUtils.executeSaga(progress);
|
||||
|
||||
|
||||
def preProcessInputs(self):
|
||||
name = self.commandLineName().replace('.','_')[len('saga:'):]
|
||||
try:
|
||||
module = importlib.import_module('sextante.grass.ext.' + name)
|
||||
except ImportError:
|
||||
return
|
||||
if hasattr(module, 'preProcessInputs'):
|
||||
func = getattr(module,'preProcessInputs')
|
||||
func(self)
|
||||
|
||||
def editCommands(self, commands):
|
||||
name = self.commandLineName()[len('saga:'):]
|
||||
try:
|
||||
module = importlib.import_module('sextante.grass.ext.' + name)
|
||||
except ImportError:
|
||||
return commands
|
||||
if hasattr(module, 'editCommands'):
|
||||
func = getattr(module,'editCommands')
|
||||
return func(commands)
|
||||
else:
|
||||
return commands
|
||||
|
||||
def getOutputCellsize(self):
|
||||
'''tries to guess the cellsize of the output, searching for a parameter with an appropriate name for it'''
|
||||
cellsize = 0;
|
||||
|
||||
3
python/plugins/sextante/saga/ext/CMakeLists.txt
Normal file
3
python/plugins/sextante/saga/ext/CMakeLists.txt
Normal file
@ -0,0 +1,3 @@
|
||||
FILE(GLOB PY_FILES *.py)
|
||||
|
||||
PLUGIN_INSTALL(sextante saga/ext ${PY_FILES})
|
||||
0
python/plugins/sextante/saga/ext/__init__.py
Normal file
0
python/plugins/sextante/saga/ext/__init__.py
Normal file
31
python/plugins/sextante/saga/ext/supervisedclassification.py
Normal file
31
python/plugins/sextante/saga/ext/supervisedclassification.py
Normal file
@ -0,0 +1,31 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
***************************************************************************
|
||||
supervisedclassification.py
|
||||
---------------------
|
||||
Date : July 2013
|
||||
Copyright : (C) 2013 by Victor Olaya
|
||||
Email : volayaf at gmail dot com
|
||||
***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************
|
||||
"""
|
||||
from sextante.tests.TestData import table
|
||||
__author__ = 'Victor Olaya'
|
||||
__date__ = 'July 2013'
|
||||
__copyright__ = '(C) 2013, Victor Olaya'
|
||||
# This will get replaced with a git SHA1 when you do a git archive
|
||||
__revision__ = '$Format:%H$'
|
||||
|
||||
|
||||
def editCommands(commands):
|
||||
commands[-1] = commands[-1] + " -STATS" + table()
|
||||
return commands
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user