Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
added mmqgis and ftools algorithms
several more changes in qgis interface

git-svn-id: http://sextante.googlecode.com/svn/trunk/soft/bindings/qgis-plugin@28 881b9c09-3ef8-f3c2-ec3d-21d735c97f4d
  • Loading branch information
volayaf@gmail.com committed Mar 4, 2012
1 parent 906d67a commit 562ca20
Show file tree
Hide file tree
Showing 126 changed files with 2,240 additions and 203 deletions.
10 changes: 9 additions & 1 deletion src/sextante/core/AlgorithmProvider.py
@@ -1,4 +1,6 @@
from sextante.core.SextanteConfig import Setting, SextanteConfig
import os
from PyQt4 import QtGui
class AlgorithmProvider():

def __init__(self):
Expand All @@ -18,10 +20,16 @@ def loadAlgorithms(self):
else:
self._loadAlgorithms()

#method to be overriden. Algorithm loading should take place here
#methods to be overriden.
#==============================

#Algorithm loading should take place here
def _loadAlgorithms(self):
pass

def getIcon(self):
return QtGui.QIcon(os.path.dirname(__file__) + "/../images/alg.png")

def getSupportedOutputRasterLayerExtensions(self):
return ["tif"]

Expand Down
2 changes: 1 addition & 1 deletion src/sextante/core/GeoAlgorithm.py
Expand Up @@ -111,7 +111,7 @@ def getParameterValue(self, name):
if isinstance(param, ParameterNumber):
return float(param.value)
elif isinstance(param, ParameterBoolean):
return param.value == True
return param.value == str(True)
else:
return param.value
return None
Expand Down
22 changes: 18 additions & 4 deletions src/sextante/core/Sextante.py
Expand Up @@ -12,13 +12,15 @@
from sextante.modeler.ModelerAlgorithmProvider import ModelerAlgorithmProvider
from sextante.mmqgis.MMQGISAlgorithmProvider import MMQGISAlgorithmProvider
from sextante.ftools.FToolsAlgorithmProvider import FToolsAlgorithmProvider
from sextante.core.SextanteResults import SextanteResults
from sextante.gui.SextantePostprocessing import SextantePostprocessing
from sextante.modeler.ProviderIcons import ProviderIcons
from sextante.r.RAlgorithmProvider import RAlgorithmProvider

class Sextante:

iface = None
providers = [SagaAlgorithmProvider(), ScriptAlgorithmProvider(),
MMQGISAlgorithmProvider(), FToolsAlgorithmProvider()]
MMQGISAlgorithmProvider(), FToolsAlgorithmProvider(), RAlgorithmProvider()]
algs = {}
actions = {}
contextMenuActions = []
Expand All @@ -28,6 +30,13 @@ class Sextante:
def setInterface(iface):
Sextante.iface = iface

@staticmethod
def getProviderFromName(name):
for provider in Sextante.providers:
if provider.getName() == name:
return provider
return Sextante.modeler

@staticmethod
def getInterface():
return Sextante.iface
Expand All @@ -40,7 +49,7 @@ def initialize():
Sextante.loadAlgorithms()
Sextante.loadActions()
Sextante.loadContextMenuActions()
SextanteConfig.loadSettings()
#SextanteConfig.loadSettings()


@staticmethod
Expand Down Expand Up @@ -79,6 +88,11 @@ def loadAlgorithms():
for alg in providerAlgs:
algs[alg.commandLineName()] = alg
Sextante.algs[provider.getName()] = algs
icons = {}
for provider in Sextante.providers:
icons[provider.getName()] = provider.getIcon()
icons[Sextante.modeler.getName()] = Sextante.modeler.getIcon()
ProviderIcons.providerIcons = icons



Expand Down Expand Up @@ -214,7 +228,7 @@ def runandload(name, *args):
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
AlgorithmExecutor.runalg(alg, SilentProgress())
QApplication.restoreOverrideCursor()
SextanteResults.handleAlgorithmResults(alg)
SextantePostprocessing.handleAlgorithmResults(alg)
except GeoAlgorithmExecutionException, e:
QMessageBox.critical(None, "Error", e.msg)

Expand Down
1 change: 0 additions & 1 deletion src/sextante/core/SextanteConfig.py
Expand Up @@ -66,7 +66,6 @@ def getSetting(name):
return None



class Setting():

def __init__(self, group, name, description, default):
Expand Down
5 changes: 4 additions & 1 deletion src/sextante/core/SextanteLog.py
Expand Up @@ -10,7 +10,10 @@ class SextanteLog():

@staticmethod
def startLogging():
logfile = open(SextanteLog.logFilename(), "w")
if os.path.isfile(SextanteLog.logFilename()):
logfile = open(SextanteLog.logFilename(), "a")
else:
logfile = open(SextanteLog.logFilename(), "w")
logfile.write("Started logging at " + datetime.datetime.now().strftime("%a %b %d %Y %H:%M:%S") + "\n")
logfile.close()

Expand Down
17 changes: 2 additions & 15 deletions src/sextante/core/SextanteResults.py
@@ -1,7 +1,3 @@
from sextante.core.QGisLayers import QGisLayers
from sextante.outputs.OutputRaster import OutputRaster
from sextante.outputs.OutputVector import OutputVector
from sextante.outputs.OutputTable import OutputTable
class SextanteResults():

results = []
Expand All @@ -14,21 +10,12 @@ def addResult(name, result):
def getResults():
return SextanteResults.results

@staticmethod
def handleAlgorithmResults(alg):
for out in alg.outputs:
if isinstance(out, (OutputRaster, OutputVector)):
QGisLayers.load(out.value, out.description, alg.crs)
elif isinstance(out, OutputTable):
pass #TODO*****
else:
SextanteResults.addResult(out.description, out.value)

class Result():

def __init__(self, name, value):
def __init__(self, name, filename):
self.name = name
self.value = value
self.filename = filename



Expand Down
2 changes: 0 additions & 2 deletions src/sextante/core/SextanteUtils.py
Expand Up @@ -32,8 +32,6 @@ def setTempOutput(out, alg):
SextanteUtils.NUM_EXPORTED += 1




def mkdir(newdir):
if os.path.isdir(newdir):
pass
Expand Down
Expand Up @@ -7,28 +7,39 @@
from sextante.parameters.ParameterVector import ParameterVector
from sextante.core.QGisLayers import QGisLayers
from sextante.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
from sextante.outputs.OutputVector import OutputVector
from sextante.ftools import ftools_utils
import math
from sextante.outputs.OutputHTML import OutputHTML
from sextante.parameters.ParameterTableField import ParameterTableField
from sextante.parameters.ParameterBoolean import ParameterBoolean

class BasicStatisticsAlgorithm(GeoAlgorithm):
class BasicStatistics(GeoAlgorithm):

INPUT = "INPUT"
OUTPUT = "OUTPUT"
FIELD = "FIELD"
USE_SELECTION = "USE_SELECTION"

def getIcon(self):
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/centroids.png")
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/basic_Statistics.png")


def createHTML(self, outputFile, lstStats):
f = open(outputFile, "w")
for s in lstStats:
f.write("<p>" + str(s) + "</p>")
f.close()


def processAlgorithm(self, progress):
settings = QSettings()
systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
output = self.getOutputValue(CentroidsAlgorithm.OUTPUT)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(CentroidsAlgorithm.INPUT))
outputFile = self.getOutputValue(BasicStatistics.OUTPUT)
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(BasicStatistics.INPUT))
attfield = self.getParameterValue(BasicStatistics.FIELD)
useSelection = self.getParameterValue(BasicStatistics.USE_SELECTION)
vprovider = vlayer.dataProvider()
allAttrs = vprovider.attributeIndexes()
vprovider.select( allAttrs )
fields = vprovider.fields()
index = vprovider.fieldNameIndex( myField )
index = vprovider.fieldNameIndex(attfield)
feat = QgsFeature()
sumVal = 0.0
meanVal = 0.0
Expand All @@ -37,15 +48,12 @@ def processAlgorithm(self, progress):
first = True
nElement = 0
# determine selected field type
if ftools_utils.getFieldType( vlayer, myField ) in ('String', 'varchar', 'char', 'text'):
if ftools_utils.getFieldType( vlayer, attfield ) in ('String', 'varchar', 'char', 'text'):
fillVal = 0
emptyVal = 0
if self.mySelection: # only selected features
if useSelection: # only selected features
selection = vlayer.selectedFeatures()
nFeat = vlayer.selectedFeatureCount()
if nFeat > 0:
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), 0 )
self.emit( SIGNAL( "runRange(PyQt_PyObject)" ), ( 0, nFeat ) )
for f in selection:
atMap = f.attributeMap()
lenVal = float( len( atMap[ index ].toString() ) )
Expand All @@ -63,12 +71,10 @@ def processAlgorithm(self, progress):
values.append( lenVal )
sumVal = sumVal + lenVal
nElement += 1
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), nElement )
progress.setPercentage(int(nElement/nFeat * 100))
else: # there is no selection, process the whole layer
nFeat = vprovider.featureCount()
if nFeat > 0:
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), 0 )
self.emit( SIGNAL( "runRange(PyQt_PyObject)" ), ( 0, nFeat ) )
vprovider.select( allAttrs )
while vprovider.nextFeature( feat ):
atMap = feat.attributeMap()
Expand All @@ -87,7 +93,7 @@ def processAlgorithm(self, progress):
values.append( lenVal )
sumVal = sumVal + lenVal
nElement += 1
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), nElement )
progress.setPercentage(int(nElement/nFeat * 100))
nVal= float( len( values ) )
if nVal > 0:
meanVal = sumVal / nVal
Expand All @@ -98,23 +104,20 @@ def processAlgorithm(self, progress):
lstStats.append( "Filled:" + unicode( fillVal ) )
lstStats.append( "Empty:" + unicode( emptyVal ) )
lstStats.append( "N:" + unicode( nVal ) )
return ( lstStats, [] )
self.createHTML(outputFile, lstStats)
else:
return ( ["Error:No features selected!"], [] )
raise GeoAlgorithmExecutionException("Error:No features selected!")
else: # numeric field
stdVal = 0.00
cvVal = 0.00
rangeVal = 0.00
medianVal = 0.00
maxVal = 0.00
minVal = 0.00
if self.mySelection: # only selected features
if useSelection: # only selected features
selection = vlayer.selectedFeatures()
nFeat = vlayer.selectedFeatureCount()
uniqueVal = ftools_utils.getUniqueValuesCount( vlayer, index, True )
if nFeat > 0:
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), 0 )
self.emit( SIGNAL( "runRange(PyQt_PyObject)" ), ( 0, nFeat ) )
for f in selection:
atMap = f.attributeMap()
value = float( atMap[ index ].toDouble()[ 0 ] )
Expand All @@ -128,13 +131,11 @@ def processAlgorithm(self, progress):
values.append( value )
sumVal = sumVal + value
nElement += 1
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), nElement )
progress.setPercentage(int(nElement/nFeat * 100))
else: # there is no selection, process the whole layer
nFeat = vprovider.featureCount()
uniqueVal = ftools_utils.getUniqueValuesCount( vlayer, index, False )
if nFeat > 0:
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), 0 )
self.emit( SIGNAL( "runRange(PyQt_PyObject)" ), ( 0, nFeat ) )
vprovider.select( allAttrs )
while vprovider.nextFeature( feat ):
atMap = feat.attributeMap()
Expand All @@ -149,7 +150,6 @@ def processAlgorithm(self, progress):
values.append( value )
sumVal = sumVal + value
nElement += 1
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), nElement )
nVal= float( len( values ) )
if nVal > 0.00:
rangeVal = maxVal - minVal
Expand Down Expand Up @@ -177,12 +177,14 @@ def processAlgorithm(self, progress):
lstStats.append( "Number of unique values:" + unicode( uniqueVal ) )
lstStats.append( "Range:" + unicode( rangeVal ) )
lstStats.append( "Median:" + unicode( medianVal ) )
return ( lstStats, [] )
self.createHTML(outputFile, lstStats)
else:
return ( ["Error:No features selected!"], [] )
raise GeoAlgorithmExecutionException("Error:No features selected!")

def defineCharacteristics(self):
self.name = "Basic statistics"
self.group = "Analysis tools"
self.addParameter(ParameterVector(BasicStatisticsAlgorithm.INPUT, "Input layer", ParameterVector.VECTOR_TYPE_POLYGON))
self.addOutput(OutputVector(BasicStatisticsAlgorithm.OUTPUT, "Statistics"))
self.addParameter(ParameterVector(BasicStatistics.INPUT, "Input layer", ParameterVector.VECTOR_TYPE_ANY))
self.addParameter(ParameterTableField(BasicStatistics.FIELD, "Field", BasicStatistics.INPUT))
self.addParameter(ParameterBoolean(BasicStatistics.USE_SELECTION, "Use selection", False))
self.addOutput(OutputHTML(BasicStatistics.OUTPUT, "Statistics"))

0 comments on commit 562ca20

Please sign in to comment.