From 5306cd856695b45fe48546ffab8d797af3cb52f5 Mon Sep 17 00:00:00 2001 From: Alexander Bruy Date: Thu, 2 Oct 2014 19:02:09 +0300 Subject: [PATCH] refactor Text to float alg --- .../algs/qgis/QGISAlgorithmProvider.py | 2 + .../algs/qgis/mmqgisx/TextToFloat.py | 82 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 python/plugins/processing/algs/qgis/mmqgisx/TextToFloat.py diff --git a/python/plugins/processing/algs/qgis/QGISAlgorithmProvider.py b/python/plugins/processing/algs/qgis/QGISAlgorithmProvider.py index 398dc164729..dc5f955f10e 100644 --- a/python/plugins/processing/algs/qgis/QGISAlgorithmProvider.py +++ b/python/plugins/processing/algs/qgis/QGISAlgorithmProvider.py @@ -75,6 +75,7 @@ from ftools.SpatialJoin import SpatialJoin from mmqgisx.DeleteColumn import DeleteColumn from mmqgisx.DeleteDuplicateGeometries import DeleteDuplicateGeometries +from mmqgisx.TextToFloat import TextToFloat from ConcaveHull import ConcaveHull from Polygonize import Polygonize @@ -140,6 +141,7 @@ class QGISAlgorithmProvider(AlgorithmProvider): SpatialJoin(), # ------ mmqgisx ------ DeleteColumn(), DeleteDuplicateGeometries(), + TextToFloat(), #mmqgisx_delete_duplicate_geometries_algorithm(), #mmqgisx_geometry_convert_algorithm(), #mmqgisx_grid_algorithm(), diff --git a/python/plugins/processing/algs/qgis/mmqgisx/TextToFloat.py b/python/plugins/processing/algs/qgis/mmqgisx/TextToFloat.py new file mode 100644 index 00000000000..174354a59c2 --- /dev/null +++ b/python/plugins/processing/algs/qgis/mmqgisx/TextToFloat.py @@ -0,0 +1,82 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + DeleteColumn.py + --------------------- + Date : May 2010 + Copyright : (C) 2010 by Michael Minn + Email : pyqgis at michaelminn 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. * +* * +*************************************************************************** +""" + +__author__ = 'Michael Minn' +__date__ = 'May 2010' +__copyright__ = '(C) 2010, Michael Minn' + +# This will get replaced with a git SHA1 when you do a git archive + +__revision__ = '$Format:%H$' + +from PyQt4.QtCore import * +from qgis.core import * +from processing.core.GeoAlgorithm import GeoAlgorithm +from processing.core.parameters import ParameterVector +from processing.core.parameters import ParameterTableField +from processing.core.outputs import OutputVector +from processing.tools import dataobjects, vector + + +class TextToFloat(GeoAlgorithm): + INPUT = 'INPUT' + FIELD = 'FIELD' + OUTPUT = 'OUTPUT' + + def defineCharacteristics(self): + self.name = 'Text to float' + self.group = 'Vector table tools' + + self.addParameter(ParameterVector( + self.INPUT, 'Input Layer', [ParameterVector.VECTOR_TYPE_ANY])) + self.addParameter(ParameterTableField( + self.FIELD, 'Text attribute to convert to float', self.INPUT, + ParameterTableField.DATA_TYPE_STRING)) + self.addOutput(OutputVector(self.OUTPUT, 'Output')) + + def processAlgorithm(self, progress): + layer = dataobjects.getObjectFromUri( + self.getParameterValue(self.INPUT)) + fieldName = self.getParameterValue(self.FIELD) + idx = layer.fieldNameIndex(fieldName) + + fields = layer.pendingFields() + fields[idx] = QgsField(fieldName, QVariant.Double, '', 24, 15) + + writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields, + layer.wkbType(), layer.crs()) + + features = vector.features(layer) + + count = len(features) + total = 100.0 / float(count) + for count, f in enumerate(features): + value = f[idx] + try: + if '%' in value: + f[idx] = float(value.replace('%', '')) / 100.0 + else: + f[idx] = float(value) + except: + f[idx] = None + + writer.addFeature(f) + progress.setPercentage(int(count * total)) + + del writer