Skip to content

Commit 9afe76d

Browse files
committedMar 21, 2013
housekeeping: remove obsolete code, completely switch to new vector API
1 parent 6df3540 commit 9afe76d

33 files changed

+235
-259
lines changed
 

‎python/plugins/sextante/algs/ftools/BasicStatisticsNumbers.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,17 @@
2424
__revision__ = '$Format:%H$'
2525

2626
import math
27+
2728
from PyQt4.QtCore import *
29+
2830
from qgis.core import *
31+
2932
from sextante.core.GeoAlgorithm import GeoAlgorithm
3033
from sextante.core.QGisLayers import QGisLayers
34+
3135
from sextante.parameters.ParameterVector import ParameterVector
3236
from sextante.parameters.ParameterTableField import ParameterTableField
37+
3338
from sextante.outputs.OutputHTML import OutputHTML
3439
from sextante.outputs.OutputNumber import OutputNumber
3540

@@ -86,7 +91,6 @@ def processAlgorithm(self, progress):
8691
outputFile = self.getOutputValue(self.OUTPUT_HTML_FILE)
8792

8893
index = layer.fieldNameIndex(fieldName)
89-
#layer.select([index], QgsRectangle(), False)
9094

9195
cvValue = 0
9296
minValue = 0

‎python/plugins/sextante/algs/ftools/BasicStatisticsStrings.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
# This will get replaced with a git SHA1 when you do a git archive
2424
__revision__ = '$Format:%H$'
2525

26+
import codecs
2627

27-
from PyQt4 import QtGui
2828
from PyQt4.QtCore import *
2929

3030
from qgis.core import *
@@ -84,7 +84,6 @@ def processAlgorithm(self, progress):
8484
outputFile = self.getOutputValue(self.OUTPUT_HTML_FILE)
8585

8686
index = layer.fieldNameIndex(fieldName)
87-
layer.select([index], QgsRectangle(), False)
8887

8988
sumValue = 0
9089
minValue = 0
@@ -150,7 +149,10 @@ def processAlgorithm(self, progress):
150149
self.setOutputValue(self.UNIQUE, uniqueValues)
151150

152151
def createHTML(self, outputFile, algData):
153-
f = open(outputFile, "w")
152+
f = codecs.open(outputFile, "w", encoding="utf-8")
153+
f.write('<html><head>')
154+
f.write('<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body>')
154155
for s in algData:
155156
f.write("<p>" + str(s) + "</p>")
157+
f.write("</body></html>")
156158
f.close()

‎python/plugins/sextante/algs/ftools/Buffer.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ def buffering(progress, writer, distance, field, useField, layer, dissolve, segm
3434
GEOS_EXCEPT = True
3535
FEATURE_EXCEPT = True
3636

37-
layer.select(layer.pendingAllAttributesList())
38-
3937
if useField:
4038
field = layer.fieldNameIndex(field)
4139

@@ -52,9 +50,9 @@ def buffering(progress, writer, distance, field, useField, layer, dissolve, segm
5250
if dissolve:
5351
first = True
5452
for inFeat in features:
55-
atMap = inFeat.attributes()
53+
attrs = inFeat.attributes()
5654
if useField:
57-
value = atMap[field].toDouble()[0]
55+
value = attrs[field].toDouble()[0]
5856
else:
5957
value = distance
6058

@@ -78,15 +76,16 @@ def buffering(progress, writer, distance, field, useField, layer, dissolve, segm
7876
progress.setPercentage(int(current * total))
7977
try:
8078
outFeat.setGeometry(tempGeom)
79+
outFeat.setAttributes(attrs)
8180
writer.addFeature(outFeat)
8281
except:
8382
FEATURE_EXCEPT = False
8483
# without dissolve
8584
else:
8685
for inFeat in features:
87-
atMap = inFeat.attributes()
86+
attrs = inFeat.attributes()
8887
if useField:
89-
value = atMap[field].toDouble()[0]
88+
value = attrs[field].toDouble()[0]
9089
else:
9190
value = distance
9291

@@ -95,7 +94,7 @@ def buffering(progress, writer, distance, field, useField, layer, dissolve, segm
9594
outGeom = inGeom.buffer(float(value), segments)
9695
try:
9796
outFeat.setGeometry(outGeom)
98-
outFeat.setAttributes(atMap)
97+
outFeat.setAttributes(attrs)
9998
writer.addFeature(outFeat)
10099
except:
101100
FEATURE_EXCEPT = False

‎python/plugins/sextante/algs/ftools/Centroids.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,9 @@ def defineCharacteristics(self):
5555
def processAlgorithm(self, progress):
5656
layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT_LAYER))
5757

58-
writer = self.getOutputFromName(self.OUTPUT_LAYER).getVectorWriter(layer.pendingFields(),
58+
writer = self.getOutputFromName(self.OUTPUT_LAYER).getVectorWriter(layer.pendingFields().toList(),
5959
QGis.WKBPoint, layer.crs())
6060

61-
#layer.select(layer.pendingAllAttributesList())
62-
6361
outFeat = QgsFeature()
6462

6563
features = QGisLayers.features(layer)

‎python/plugins/sextante/algs/ftools/ConvexHull.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ def processAlgorithm(self, progress):
113113
first = True
114114
features = QGisLayers.features(layer)
115115
for f in features:
116-
idVar = f.attribute(fieldName)
116+
idVar = f[fieldName]
117117
if idVar.toString().trimmed() == i.toString().trimmed():
118118
if first:
119119
val = idVar
@@ -135,10 +135,6 @@ def processAlgorithm(self, progress):
135135
QVariant(area),
136136
QVariant(perim)
137137
])
138-
#~ outFeat.setAttribute("id", QVariant(fid))
139-
#~ outFeat.setAttribute("value", QVariant(val))
140-
#~ outFeat.setAttribute("area", QVariant(area))
141-
#~ outFeat.setAttribute("perim", QVariant(perim))
142138
writer.addFeature(outFeat)
143139
except:
144140
GEOS_EXCEPT = False
@@ -165,10 +161,6 @@ def processAlgorithm(self, progress):
165161
QVariant(area),
166162
QVariant(perim)
167163
])
168-
#print outFeat.setAttribute("id", QVariant(0))
169-
#print outFeat.setAttribute("value", QVariant("all"))
170-
#print outFeat.setAttribute("area", QVariant(area))
171-
#print outFeat.setAttribute("perim", QVariant(perim))
172164
writer.addFeature(outFeat)
173165
except:
174166
GEOS_EXCEPT = False

‎python/plugins/sextante/algs/ftools/Delaunay.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,22 @@
2323
# This will get replaced with a git SHA1 when you do a git archive
2424
__revision__ = '$Format:%H$'
2525

26+
from sets import Set
27+
2628
from PyQt4.QtCore import *
29+
2730
from qgis.core import *
28-
from sets import Set
29-
from sextante.algs.ftools import voronoi
31+
3032
from sextante.core.GeoAlgorithm import GeoAlgorithm
31-
from sextante.core.GeoAlgorithmExecutionException import \
32-
GeoAlgorithmExecutionException
33+
from sextante.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
3334
from sextante.core.QGisLayers import QGisLayers
34-
from sextante.outputs.OutputVector import OutputVector
35+
3536
from sextante.parameters.ParameterVector import ParameterVector
3637

38+
from sextante.outputs.OutputVector import OutputVector
39+
40+
from sextante.algs.ftools import voronoi
41+
3742

3843
class Delaunay(GeoAlgorithm):
3944

@@ -57,9 +62,9 @@ def processAlgorithm(self, progress):
5762
layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT))
5863

5964

60-
fields = [ QgsField("POINTA", QVariant.Double, "", 24, 15),
61-
QgsField("POINTB", QVariant.Double, "", 24, 15),
62-
QgsField("POINTC", QVariant.Double, "", 24, 15)
65+
fields = [QgsField("POINTA", QVariant.Double, "", 24, 15),
66+
QgsField("POINTB", QVariant.Double, "", 24, 15),
67+
QgsField("POINTC", QVariant.Double, "", 24, 15)
6368
]
6469

6570
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields,
@@ -100,7 +105,8 @@ def processAlgorithm(self, progress):
100105
attrs = []
101106
step = 0
102107
for index in indicies:
103-
layer.featureAtId(ptDict[ids[index]], inFeat, True)
108+
request = QgsFeatureRequest().setFilterFid(ptDict[ids[index]])
109+
inFeat = layer.getFeatures(request).next()
104110
geom = QgsGeometry(inFeat.geometry())
105111
point = QgsPoint(geom.asPoint())
106112
polygon.append(point)

‎python/plugins/sextante/algs/ftools/DensifyGeometries.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
# This will get replaced with a git SHA1 when you do a git archive
2424
__revision__ = '$Format:%H$'
2525

26-
2726
from PyQt4.QtCore import *
2827

2928
from qgis.core import *
@@ -42,9 +41,6 @@ class DensifyGeometries(GeoAlgorithm):
4241
VERTICES = "VERTICES"
4342
OUTPUT = "OUTPUT"
4443

45-
#def getIcon(self):
46-
# return QtGui.QIcon(os.path.dirname(__file__) + "/icons/de.png")
47-
4844
def defineCharacteristics(self):
4945
self.name = "Densify geometries"
5046
self.group = "Vector geometry tools"
@@ -60,19 +56,19 @@ def processAlgorithm(self, progress):
6056

6157
isPolygon = layer.geometryType() == QGis.Polygon
6258

63-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields(),
59+
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields().toList(),
6460
layer.wkbType(), layer.crs())
6561

6662
features = QGisLayers.features(layer)
6763
total = 100.0 / float(len(features))
6864
current = 0
6965
for f in features:
7066
featGeometry = QgsGeometry(f.geometry())
71-
attrMap = f.attributes()
67+
attrs = f.attributes()
7268
newGeometry = self.densifyGeometry(featGeometry, int(vertices), isPolygon)
7369
feature = QgsFeature()
7470
feature.setGeometry(newGeometry)
75-
feature.setAttributes(attrMap)
71+
feature.setAttributes(attrs)
7672
writer.addFeature(feature)
7773
current += 1
7874
progress.setPercentage(int(current * total))

‎python/plugins/sextante/algs/ftools/DensifyGeometriesInterval.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
"""
44
***************************************************************************
55
DensifyGeometriesInterval.py by Anita Graser, Dec 2012
6-
based on
7-
DensifyGeometries.py
6+
based on DensifyGeometries.py
87
---------------------
98
Date : October 2012
109
Copyright : (C) 2012 by Victor Olaya
@@ -58,20 +57,19 @@ def processAlgorithm(self, progress):
5857

5958
isPolygon = layer.geometryType() == QGis.Polygon
6059

61-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields(),
60+
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields().toList(),
6261
layer.wkbType(), layer.crs())
6362

64-
6563
features = QGisLayers.features(layer)
6664
total = 100.0 / float(len(features))
6765
current = 0
6866
for f in features:
6967
featGeometry = QgsGeometry(f.geometry())
70-
attrMap = f.attributes()
68+
attrs = f.attributes()
7169
newGeometry = self.densifyGeometry(featGeometry, interval, isPolygon)
7270
feature = QgsFeature()
7371
feature.setGeometry(newGeometry)
74-
feature.setAttributes(attrMap)
72+
feature.setAttributes(attrs)
7573
writer.addFeature(feature)
7674

7775
current += 1

‎python/plugins/sextante/algs/ftools/ExportGeometryInfo.py

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -66,24 +66,26 @@ def processAlgorithm(self, progress):
6666
layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT))
6767
method = self.getParameterValue(self.METHOD)
6868

69-
provider = layer.dataProvider()
7069
geometryType = layer.geometryType()
7170

72-
layer.select(layer.pendingAllAttributesList())
73-
74-
fields = provider.fields()
71+
idx1 = -1
72+
idx2 = -1
73+
fields = layer.pendingFields()
7574

7675
if geometryType == QGis.Polygon:
77-
fields.append(QgsField(QString("area"), QVariant.Double))
78-
fields.append(QgsField(QString("perimeter"), QVariant.Double))
76+
idx1, fields = utils.findOrCreateField(layer, fields, "area", 21, 6)
77+
idx2, fields = utils.findOrCreateField(layer, fields, "perimeter", 21, 6)
7978
elif geometryType == QGis.Line:
80-
fields.append(QgsField(QString("length"), QVariant.Double))
79+
idx1, fields = utils.findOrCreateField(layer, fields, "length", 21, 6)
80+
idx2 = idx1
8181
else:
82-
fields.append(QgsField(QString("xcoords"), QVariant.Double))
83-
fields.append(QgsField(QString("ycoords"), QVariant.Double))
82+
idx1, fields = utils.findOrCreateField(layer, fields, "xcoord", 21, 6)
83+
idx2, fields = utils.findOrCreateField(layer, fields, "ycoord", 21, 6)
84+
85+
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields.toList(),
86+
layer.dataProvider().geometryType(), layer.crs())
8487

85-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fields,
86-
provider.geometryType(), layer.crs())
88+
print idx1, idx2
8789

8890
ellips = None
8991
crs = None
@@ -105,23 +107,26 @@ def processAlgorithm(self, progress):
105107
outFeat = QgsFeature()
106108
inGeom = QgsGeometry()
107109

110+
outFeat.initAttributes(len(fields))
111+
outFeat.setFields(fields)
112+
108113
current = 0
109114
features = QGisLayers.features(layer)
110115
total = 100.0 / float(len(features))
111-
for inFeat in features:
112-
inGeom = inFeat.geometry()
116+
for f in features:
117+
inGeom = f.geometry()
113118

114119
if method == 1:
115120
inGeom.transform(coordTransform)
116121

117122
(attr1, attr2) = utils.simpleMeasure(inGeom, method, ellips, crs)
118123

119124
outFeat.setGeometry(inGeom)
120-
atMap = inFeat.attributes()
121-
atMap.append(QVariant(attr1))
125+
attrs = f.attributes()
126+
attrs.insert(idx1, QVariant(attr1))
122127
if attr2 is not None:
123-
atMap.append(QVariant(attr2))
124-
outFeat.setAttributes(atMap)
128+
attrs.insert(idx2, QVariant(attr2))
129+
outFeat.setAttributes(attrs)
125130
writer.addFeature(outFeat)
126131

127132
current += 1

4 commit comments

Comments
 (4)

nirvn commented on Mar 22, 2013

@nirvn
Contributor

@alexbruy , this possibly fixes http://hub.qgis.org/issues/7360 ; let me have a look at confirming it.

nirvn commented on Mar 22, 2013

@nirvn
Contributor

@alexbruy issue still there; might not be entirely related to new vector API then. with a set of 655 points, QGIS chokes and dies around 50% of the process. With a >13,000 points set, it dies at 0%.

alexbruy commented on Mar 22, 2013

@alexbruy
ContributorAuthor

This commit only fixes issues introduced by further API cleanup. Don't know why you decide that this related to #7360

nirvn commented on Mar 22, 2013

@nirvn
Contributor

@alexbruy , my apologies then, I thought this commit was migrating some ftools functions to new vector API and would fix ftools' delaunay triangulation function, which is currently broken on QGIS master.

Please sign in to comment.