Skip to content

Commit 158dadb

Browse files
committed
minor edits to SEXTANTE algorithms and scripts
1 parent b231795 commit 158dadb

18 files changed

+88
-225
lines changed

python/plugins/sextante/SextantePlugin.py

-15
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,9 @@
2525

2626
import os, sys
2727
import inspect
28-
2928
from PyQt4.QtCore import *
3029
from PyQt4.QtGui import *
31-
3230
from qgis.core import *
33-
3431
from sextante.core.Sextante import Sextante
3532
from sextante.core.QGisLayers import QGisLayers
3633
from sextante.core.SextanteUtils import SextanteUtils
@@ -94,14 +91,6 @@ def initGui(self):
9491
self.resultsAction.triggered.connect(self.openResults)
9592
self.menu.addAction(self.resultsAction)
9693

97-
#=======================================================================
98-
# self.helpAction = QAction(QIcon(":/sextante/images/help.png"),
99-
# QCoreApplication.translate("SEXTANTE", "&SEXTANTE help"),
100-
# self.iface.mainWindow())
101-
# self.helpAction.triggered.connect(self.openHelp)
102-
# self.menu.addAction(self.helpAction)
103-
#=======================================================================
104-
10594
menuBar = self.iface.mainWindow().menuBar()
10695
menuBar.insertMenu(menuBar.actions()[-1], self.menu)
10796

@@ -143,7 +132,3 @@ def openConfig(self):
143132
dlg = ConfigDialog(self.toolbox)
144133
dlg.exec_()
145134

146-
#===========================================================================
147-
# def openHelp(self):
148-
# QDesktopServices.openUrl(QUrl(os.path.dirname(__file__) + "/help/index.html"))
149-
#===========================================================================

python/plugins/sextante/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
***************************************************************************
1818
"""
1919

20-
from sextante.core.Sextante import runalg, runandload, alghelp, alglist, algoptions, load, loadFromAlg, extent, getObjectFromName, getObjectFromUri
20+
from sextante.core.Sextante import runalg, runandload, alghelp, alglist, algoptions, load, loadFromAlg, extent, getObjectFromName, getObjectFromUri, features
2121

2222
__author__ = 'Victor Olaya'
2323
__date__ = 'August 2012'

python/plugins/sextante/algs/SaveSelectedFeatures.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def defineCharacteristics(self):
5454
with some other properties'''
5555

5656
#the name that the user will see in the toolbox
57-
self.name = "Create new layer with selected features"
57+
self.name = "Save selected features"
5858

5959
#the branch of the toolbox under which the algorithm will appear
6060
self.group = "Vector general tools"

python/plugins/sextante/algs/ftools/RandomSelection.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def processAlgorithm(self, progress):
7878
raise GeoAlgorithmExecutionException("Selected number is greater than feature count. Choose a lower value and try again.")
7979
else:
8080
if value > 100:
81-
raise GeoAlgorithmExecutionException("Persentage can't be greater than 100. Set a different value and try again.")
81+
raise GeoAlgorithmExecutionException("Percentage can't be greater than 100. Set a different value and try again.")
8282
value = int(round((value / 100.0000), 4) * featureCount)
8383

8484
selran = random.sample(xrange(0, featureCount), value)

python/plugins/sextante/algs/ftools/ReprojectLayer.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ def defineCharacteristics(self):
4949
self.group = "Vector general tools"
5050

5151
self.addParameter(ParameterVector(self.INPUT, "Input layer", ParameterVector.VECTOR_TYPE_ANY))
52-
self.addParameter(ParameterCrs(self.TARGET_CRS, "Target CRS", "4326"))
52+
self.addParameter(ParameterCrs(self.TARGET_CRS, "Target CRS", "EPSG:4326"))
5353

5454
self.addOutput(OutputVector(self.OUTPUT, "Reprojected layer"))
5555

python/plugins/sextante/algs/ftools/SelectByLocation.py

+23-48
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,6 @@
2323
# This will get replaced with a git SHA1 when you do a git archive
2424
__revision__ = '$Format:%H$'
2525

26-
import os.path
27-
28-
from PyQt4 import QtGui
2926
from PyQt4.QtCore import *
3027

3128
from qgis.core import *
@@ -39,14 +36,11 @@
3936

4037
from sextante.outputs.OutputVector import OutputVector
4138

42-
from sextante.algs.ftools import FToolsUtils as utils
43-
4439
class SelectByLocation(GeoAlgorithm):
4540

4641
INPUT = "INPUT"
4742
INTERSECT = "INTERSECT"
48-
METHOD = "METHOD"
49-
USE_SELECTED = "USE_SELECTED"
43+
METHOD = "METHOD"
5044
OUTPUT = "OUTPUT"
5145

5246
METHODS = ["creating new selection",
@@ -61,63 +55,44 @@ class SelectByLocation(GeoAlgorithm):
6155
def defineCharacteristics(self):
6256
self.name = "Select by location"
6357
self.group = "Vector selection tools"
64-
6558
self.addParameter(ParameterVector(self.INPUT, "Layer to select from", ParameterVector.VECTOR_TYPE_ANY))
6659
self.addParameter(ParameterVector(self.INTERSECT, "Additional layer (intersection layer)", ParameterVector.VECTOR_TYPE_ANY))
67-
self.addParameter(ParameterSelection(self.METHOD, "Modify current selection by", self.METHODS, 0))
68-
self.addParameter(ParameterBoolean(self.USE_SELECTED, "Use only selected features", False))
69-
60+
self.addParameter(ParameterSelection(self.METHOD, "Modify current selection by", self.METHODS, 0))
7061
self.addOutput(OutputVector(self.OUTPUT, "Selection", True))
7162

7263
def processAlgorithm(self, progress):
7364
filename = self.getParameterValue(self.INPUT)
7465
inputLayer = QGisLayers.getObjectFromUri(filename)
7566
method = self.getParameterValue(self.METHOD)
76-
selection = self.getParameterValue(self.USE_SELECTED)
77-
7867
filename = self.getParameterValue(self.INTERSECT)
7968
selectLayer = QGisLayers.getObjectFromUri(filename)
80-
8169
inputProvider = inputLayer.dataProvider()
8270
selectProvider = selectLayer.dataProvider()
83-
84-
index = utils.createSpatialIndex(inputLayer)
85-
71+
72+
index = QgsSpatialIndex()
73+
inputProvider.rewind()
8674
inputProvider.select()
87-
selectProvider.select()
88-
8975
feat = QgsFeature()
76+
while inputProvider.nextFeature(feat):
77+
index.insertFeature(feat)
78+
79+
selectProvider.select()
9080
infeat = QgsFeature()
9181
geom = QgsGeometry()
92-
selectedSet = []
93-
94-
if selection:
95-
features = selectLayer.selectedFeatures()
96-
total = 100.0 / float(len(features))
97-
current = 0
98-
for feat in features:
99-
geom = QgsGeometry(feat.geometry())
100-
intersects = index.intersects(geom.boundingBox())
101-
for i in intersects:
102-
inputProvider.featureAtId(i, infeat, True)
103-
tmpGeom = QgsGeometry(infeat.geometry())
104-
if geom.intersects(tmpGeom):
105-
selectedSet.append(infeat.id())
106-
current += 1
107-
progress.setPercentage(int(current * total))
108-
else:
109-
total = 100.0 / float(selectProvider.featureCount())
110-
current = 0
111-
while selectProvider.nextFeature(feat):
112-
geom = QgsGeometry(feat.geometry())
113-
intersects = index.intersects(geom.boundingBox())
114-
for i in intersects:
115-
inputProvider.featureAtId(i, infeat, True)
116-
tmpGeom = QgsGeometry( infeat.geometry() )
117-
if geom.intersects(tmpGeom):
118-
selectedSet.append(infeat.id())
119-
current += 1
120-
progress.setPercentage(int(current * total))
82+
selectedSet = []
83+
current = 0
84+
features = QGisLayers.features(selectLayer)
85+
total = 100.0 / float(len(features))
86+
for feat in features:
87+
geom = QgsGeometry(feat.geometry())
88+
intersects = index.intersects(geom.boundingBox())
89+
for i in intersects:
90+
inputProvider.featureAtId(i, infeat, True)
91+
tmpGeom = QgsGeometry( infeat.geometry() )
92+
if geom.intersects(tmpGeom):
93+
selectedSet.append(infeat.id())
94+
current += 1
95+
progress.setPercentage(int(current * total))
12196

12297
if method == 1:
12398
selectedSet = list(set(inputLayer.selectedFeaturesIds()).union(selectedSet))

python/plugins/sextante/algs/ftools/UniqueValues.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
* *
1717
***************************************************************************
1818
"""
19+
from sextante.outputs.OutputString import OutputString
1920

2021
__author__ = 'Victor Olaya'
2122
__date__ = 'August 2012'
@@ -37,6 +38,7 @@ class UniqueValues(GeoAlgorithm):
3738
INPUT_LAYER = "INPUT_LAYER"
3839
FIELD_NAME = "FIELD_NAME"
3940
TOTAL_VALUES = "TOTAL_VALUES"
41+
UNIQUE_VALUES = "UNIQUE_VALUES"
4042
OUTPUT = "OUTPUT"
4143

4244
#===========================================================================
@@ -48,19 +50,19 @@ def defineCharacteristics(self):
4850
self.name = "List unique values"
4951
self.group = "Vector table tools"
5052
self.addParameter(ParameterVector(self.INPUT_LAYER, "Input layer", ParameterVector.VECTOR_TYPE_ANY))
51-
self.addParameter(ParameterTableField(self.FIELD_NAME, "Targer field", self.INPUT_LAYER, ParameterTableField.DATA_TYPE_ANY))
53+
self.addParameter(ParameterTableField(self.FIELD_NAME, "Target field", self.INPUT_LAYER, ParameterTableField.DATA_TYPE_ANY))
5254
self.addOutput(OutputHTML(self.OUTPUT, "Unique values"))
5355
self.addOutput(OutputNumber(self.TOTAL_VALUES, "Total unique values"))
56+
self.addOutput(OutputString(self.UNIQUE_VALUES, "Unique values"))
5457

5558
def processAlgorithm(self, progress):
5659
layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT_LAYER))
5760
fieldName = self.getParameterValue(self.FIELD_NAME)
58-
5961
outputFile = self.getOutputValue(self.OUTPUT)
60-
6162
values = layer.uniqueValues(layer.fieldNameIndex(fieldName))
6263
self.createHTML(outputFile, values)
6364
self.setOutputValue(self.TOTAL_VALUES, len(values))
65+
self.setOutputValue(self.UNIQUE_VALUES, ";".join([unicode(v.toString()) for v in values]))
6466

6567
def createHTML(self, outputFile, algData):
6668
f = codecs.open(outputFile, "w", encoding="utf-8")

python/plugins/sextante/algs/mmqgisx/MMQGISXAlgorithms.py

+9-7
Original file line numberDiff line numberDiff line change
@@ -629,7 +629,7 @@ class mmqgisx_select_algorithm(GeoAlgorithm):
629629
ATTRIBUTE = "ATTRIBUTE"
630630
COMPARISONVALUE = "COMPARISONVALUE"
631631
COMPARISON = "COMPARISON"
632-
SAVENAME = "SAVENAME"
632+
RESULT = "RESULT"
633633

634634
def defineCharacteristics(self):
635635
self.name = "Select by attribute"
@@ -641,7 +641,7 @@ def defineCharacteristics(self):
641641
self.addParameter(ParameterSelection(self.COMPARISON, "Comparison", self.comparisons, default = 0))
642642
self.addParameter(ParameterString(self.COMPARISONVALUE, "Value", default = "0"))
643643

644-
self.addOutput(OutputVector(self.SAVENAME, "Output"))
644+
self.addOutput(OutputVector(self.RESULT, "Output", True))
645645

646646
#===========================================================================
647647
# def getIcon(self):
@@ -650,17 +650,19 @@ def defineCharacteristics(self):
650650

651651
def processAlgorithm(self, progress):
652652

653-
layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.LAYERNAME))
653+
filename = self.getParameterValue(self.LAYERNAME)
654+
layer = QGisLayers.getObjectFromUri(filename)
654655

655656
attribute = self.getParameterValue(self.ATTRIBUTE)
656-
comparison = self.comparisons [ self.getParameterValue(self.COMPARISON) ]
657-
comparisonvalue = self.getParameterValue(self.COMPARISONVALUE)
658-
savename = self.getOutputValue(self.SAVENAME)
657+
comparison = self.comparisons [self.getParameterValue(self.COMPARISON)]
658+
comparisonvalue = self.getParameterValue(self.COMPARISONVALUE)
659659

660-
message = mmqgisx_select(progress, layer, attribute, comparisonvalue, comparison, savename, False)
660+
message = mmqgisx_select(progress, layer, attribute, comparisonvalue, comparison)
661661

662662
if message:
663663
raise GeoAlgorithmExecutionException(message)
664+
665+
self.setOutputValue(self.RESULT, filename)
664666

665667
class mmqgisx_sort_algorithm(GeoAlgorithm):
666668

python/plugins/sextante/algs/mmqgisx/mmqgisx_library.py

+5-18
Original file line numberDiff line numberDiff line change
@@ -1694,7 +1694,7 @@ def mmqgisx_merge(progress, layers, savename, addlayer):
16941694
# mmqgisx_select - Select features by attribute
16951695
# ----------------------------------------------------------
16961696

1697-
def mmqgisx_select(progress, layer, selectattributename, comparisonvalue, comparisonname, savename, addlayer):
1697+
def mmqgisx_select(progress, layer, selectattributename, comparisonvalue, comparisonname):
16981698

16991699
selectindex = layer.dataProvider().fieldNameIndex(selectattributename)
17001700
if selectindex < 0:
@@ -1703,25 +1703,13 @@ def mmqgisx_select(progress, layer, selectattributename, comparisonvalue, compar
17031703
if (not comparisonvalue) or (len(comparisonvalue) <= 0):
17041704
return "No comparison value given"
17051705

1706-
if (not savename) or (len(savename) <= 0):
1707-
return "No output filename given"
1708-
1709-
if QFile(savename).exists():
1710-
if not QgsVectorFileWriter.deleteShapeFile(QString(savename)):
1711-
return "Failure deleting existing shapefile: " + savename
1712-
1713-
outfile = QgsVectorFileWriter(QString(savename), QString("System"), layer.dataProvider().fields(),
1714-
layer.dataProvider().geometryType(), layer.dataProvider().crs())
1715-
1716-
if (outfile.hasError() != QgsVectorFileWriter.NoError):
1717-
return "Failure creating output shapefile: " + unicode(outfile.errorMessage())
1718-
17191706
readcount = 0
17201707
writecount = 0
17211708
feature = QgsFeature()
17221709
layer.dataProvider().select(layer.dataProvider().attributeIndexes())
17231710
layer.dataProvider().rewind()
17241711

1712+
selected = []
17251713
totalcount = layer.featureCount()
17261714
features = QGisLayers.features(layer)
17271715
for feature in features:
@@ -1754,12 +1742,11 @@ def mmqgisx_select(progress, layer, selectattributename, comparisonvalue, compar
17541742

17551743
readcount += 1
17561744
if (match):
1757-
outfile.addFeature(feature)
1758-
writecount += 1
1745+
selected.append(feature.id())
17591746

17601747
progress.setPercentage(float(readcount) / totalcount * 100)
1761-
1762-
del outfile
1748+
1749+
layer.setSelectedFeatures(selected)
17631750

17641751
return None
17651752

python/plugins/sextante/core/GeoAlgorithm.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
* *
1717
***************************************************************************
1818
"""
19-
2019
__author__ = 'Victor Olaya'
2120
__date__ = 'August 2012'
2221
__copyright__ = '(C) 2012, Victor Olaya'
@@ -139,7 +138,7 @@ def execute(self, progress):
139138
Raises a GeoAlgorithmExecutionException in case anything goes wrong.'''
140139

141140
try:
142-
self.setOutputCRSFromInputLayers()
141+
self.setOutputCRS()
143142
self.resolveTemporaryOutputs()
144143
self.checkOutputFileExtensions()
145144
self.runPreExecutionScript(progress)
@@ -259,7 +258,7 @@ def resolveTemporaryOutputs(self):
259258
if (not out.hidden) and out.value == None:
260259
SextanteUtils.setTempOutput(out, self)
261260

262-
def setOutputCRSFromInputLayers(self):
261+
def setOutputCRS(self):
263262
layers = QGisLayers.getAllLayers()
264263
for param in self.parameters:
265264
if isinstance(param, (ParameterRaster, ParameterVector, ParameterMultipleInput)):
@@ -270,7 +269,8 @@ def setOutputCRSFromInputLayers(self):
270269
if layer.source() == inputlayer:
271270
self.crs = layer.crs()
272271
return
273-
272+
qgis = QGisLayers.iface
273+
self.crs = qgis.mapCanvas().mapRenderer().destinationCrs()
274274

275275
def addOutput(self, output):
276276
#TODO: check that name does not exist
@@ -320,8 +320,8 @@ def __str__(self):
320320
for param in self.parameters:
321321
s+=("\t" + str(param) + "\n")
322322
for out in self.outputs:
323-
if not out.hidden:
324-
s+=("\t" + str(out) + "\n")
323+
#if not out.hidden:
324+
s+=("\t" + str(out) + "\n")
325325
s+=("\n")
326326
return s
327327

python/plugins/sextante/core/Sextante.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -335,10 +335,10 @@ def cancel():
335335
return alg
336336

337337

338-
##==========================================================
339-
##This methods are here to be used from the python console,
340-
##making it easy to use SEXTANTE from there
341-
##==========================================================
338+
##==========================================================
339+
##This methods are here to be used from the python console,
340+
##making it easy to use SEXTANTE from there
341+
##==========================================================
342342

343343

344344
def alglist(text=None):
@@ -374,12 +374,12 @@ def alghelp(name):
374374

375375
def runalg(algOrName, *args):
376376
alg = Sextante.runAlgorithm(algOrName, None, *args)
377-
return alg.getOutputValuesAsDictionary()
377+
if alg is not None:
378+
return alg.getOutputValuesAsDictionary()
378379

379380
def runandload(name, *args):
380381
Sextante.runAlgorithm(name, SextantePostprocessing.handleAlgorithmResults, *args)
381382

382-
383383
def extent(layers):
384384
first = True
385385
for layer in layers:

0 commit comments

Comments
 (0)