-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
added addfield and fieldcalculator algorithms
git-svn-id: http://sextante.googlecode.com/svn/trunk/soft/bindings/qgis-plugin@150 881b9c09-3ef8-f3c2-ec3d-21d735c97f4d
- Loading branch information
volayaf
committed
Apr 25, 2012
1 parent
36db53a
commit 0928180
Showing
8 changed files
with
157 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
from sextante.core.GeoAlgorithm import GeoAlgorithm | ||
from sextante.outputs.OutputVector import OutputVector | ||
from sextante.parameters.ParameterVector import ParameterVector | ||
from qgis.core import * | ||
from PyQt4.QtCore import * | ||
from PyQt4.QtGui import * | ||
from sextante.parameters.ParameterString import ParameterString | ||
from sextante.parameters.ParameterSelection import ParameterSelection | ||
from sextante.core.QGisLayers import QGisLayers | ||
import os | ||
from PyQt4 import QtGui | ||
|
||
|
||
class AddTableField(GeoAlgorithm): | ||
|
||
OUTPUT_LAYER = "OUTPUT_LAYER" | ||
INPUT_LAYER = "INPUT_LAYER" | ||
FIELD_NAME = "FIELD_NAME" | ||
FIELD_TYPE = "FIELD_TYPE" | ||
TYPE_NAMES = ["Integer", "Float", "String"] | ||
TYPES = [QVariant.Int, QVariant.Double, QVariant.String] | ||
|
||
def getIcon(self): | ||
return QtGui.QIcon(os.path.dirname(__file__) + "/../images/toolbox.png") | ||
|
||
def defineCharacteristics(self): | ||
self.name = "Add field to attributes table" | ||
self.group = "Algorithms for vector layers" | ||
self.addParameter(ParameterVector(self.INPUT_LAYER, "Input layer", ParameterVector.VECTOR_TYPE_ANY, False)) | ||
self.addParameter(ParameterString(self.FIELD_NAME, "Field name")) | ||
self.addParameter(ParameterSelection(self.FIELD_TYPE, "Field type", self.TYPE_NAMES)) | ||
self.addOutput(OutputVector(self.OUTPUT_LAYER, "Output layer", True)) | ||
|
||
def processAlgorithm(self, progress): | ||
inputFilename = self.getParameterValue(self.INPUT_LAYER) | ||
layer = QGisLayers.getObjectFromUri(inputFilename) | ||
caps = layer.dataProvider().capabilities() | ||
if caps & QgsVectorDataProvider.AddAttributes: | ||
fieldName = self.getParameterValue(self.FIELD_NAME) | ||
fieldType = self.TYPES[self.getParameterValue(self.FIELD_TYPE)] | ||
layer.dataProvider().addAttributes([QgsField(fieldName, fieldType)]) | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
from sextante.core.GeoAlgorithm import GeoAlgorithm | ||
from sextante.outputs.OutputVector import OutputVector | ||
from sextante.parameters.ParameterVector import ParameterVector | ||
from qgis.core import * | ||
from PyQt4.QtCore import * | ||
from PyQt4.QtGui import * | ||
from sextante.parameters.ParameterString import ParameterString | ||
from sextante.parameters.ParameterSelection import ParameterSelection | ||
from sextante.core.QGisLayers import QGisLayers | ||
import os | ||
from PyQt4 import QtGui | ||
from sextante.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException | ||
|
||
|
||
class FieldsCalculator(GeoAlgorithm): | ||
|
||
INPUT_LAYER = "INPUT_LAYER" | ||
FIELD_NAME = "FIELD_NAME" | ||
FORMULA = "FORMULA" | ||
OUTPUT_LAYER ="OUTPUT_LAYER" | ||
|
||
def getIcon(self): | ||
return QtGui.QIcon(os.path.dirname(__file__) + "/../images/toolbox.png") | ||
|
||
def defineCharacteristics(self): | ||
self.name = "Field calculator" | ||
self.group = "Algorithms for vector layers" | ||
self.addParameter(ParameterVector(self.INPUT_LAYER, "Input layer", ParameterVector.VECTOR_TYPE_ANY, False)) | ||
self.addParameter(ParameterString(self.FIELD_NAME, "Result field name")) | ||
self.addParameter(ParameterString(self.FORMULA, "Formula")) | ||
self.addOutput(OutputVector(self.OUTPUT_LAYER, "Output layer", True)) | ||
|
||
def processAlgorithm(self, progress): | ||
inputFilename = self.getParameterValue(self.INPUT_LAYER) | ||
formula = self.getParameterValue(self.FORMULA) | ||
layer = QGisLayers.getObjectFromUri(inputFilename) | ||
provider = layer.dataProvider() | ||
caps = provider.capabilities() | ||
if caps & QgsVectorDataProvider.AddAttributes: | ||
fieldName = self.getParameterValue(self.FIELD_NAME) | ||
layer.dataProvider().addAttributes([QgsField(fieldName, QVariant.Double)]) | ||
feat = QgsFeature() | ||
allAttrs = provider.attributeIndexes() | ||
provider.select(allAttrs) | ||
fields = provider.fields() | ||
while provider.nextFeature(feat): | ||
attrs = feat.attributeMap() | ||
expression = formula | ||
for (k,attr) in attrs.iteritems(): | ||
expression = expression.replace(str(fields[k].name()), str(attr.toString())) | ||
try: | ||
result = eval(expression) | ||
except Exception: | ||
raise GeoAlgorithmExecutionException("Problem evaluation formula: Wrong field values or formula") | ||
attrs[len(attrs) - 1] = QVariant(result) | ||
provider.changeAttributeValues({feat.id() : attrs}) | ||
|
||
|
||
def checkParameterValuesBeforeExecuting(self): | ||
##TODO check that formula is correct and fields exist | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
from sextante.core.AlgorithmProvider import AlgorithmProvider | ||
from sextante.algs.AddTableField import AddTableField | ||
from PyQt4 import QtGui | ||
import os | ||
from sextante.algs.FieldsCalculator import FieldsCalculator | ||
|
||
class SextanteAlgorithmProvider(AlgorithmProvider): | ||
|
||
def __init__(self): | ||
AlgorithmProvider.__init__(self) | ||
self.alglist = [AddTableField(), FieldsCalculator()] | ||
|
||
def initializeSettings(self): | ||
AlgorithmProvider.initializeSettings(self) | ||
|
||
|
||
def unload(self): | ||
AlgorithmProvider.unload(self) | ||
|
||
|
||
def getName(self): | ||
return "sextante" | ||
|
||
def getDescription(self): | ||
return "SEXTANTE geoalgorithms" | ||
|
||
def getIcon(self): | ||
return QtGui.QIcon(os.path.dirname(__file__) + "/../images/toolbox.png") | ||
|
||
def _loadAlgorithms(self): | ||
self.algs = self.alglist |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters