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

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

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,16 @@
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 *
27+
2828
from qgis.core import *
29+
2930
from sextante.core.GeoAlgorithm import GeoAlgorithm
3031
from sextante.core.QGisLayers import QGisLayers
32+
3133
from sextante.parameters.ParameterVector import ParameterVector
3234
from sextante.parameters.ParameterBoolean import ParameterBoolean
35+
3336
from sextante.outputs.OutputVector import OutputVector
3437

3538
class ExtentFromLayer(GeoAlgorithm):
@@ -102,27 +105,26 @@ def layerExtent(self, layer, writer, progress):
102105
feat = QgsFeature()
103106
feat.setGeometry(geometry)
104107
attrs = [QVariant(minx),
105-
QVariant(miny),
106-
QVariant(maxx),
107-
QVariant(maxy),
108-
QVariant(cntx),
109-
QVariant(cnty),
110-
QVariant(area),
111-
QVariant(perim),
112-
QVariant(height),
113-
QVariant(width) ]
108+
QVariant(miny),
109+
QVariant(maxx),
110+
QVariant(maxy),
111+
QVariant(cntx),
112+
QVariant(cnty),
113+
QVariant(area),
114+
QVariant(perim),
115+
QVariant(height),
116+
QVariant(width)
117+
]
114118
feat.setAttributes(attrs)
115119
writer.addFeature(feat)
116120

117121
def featureExtent(self, layer, writer, progress):
118122
current = 0
119-
feat = QgsFeature()
120-
121-
provider = layer.dataProvider()
122123
features = QGisLayers.features(layer)
123124
total = 100.0 / float(len(features))
124-
for inFeat in features:
125-
rect = inFeat.geometry().boundingBox()
125+
feat = QgsFeature()
126+
for f in features:
127+
rect = f.geometry().boundingBox()
126128
minx = rect.xMinimum()
127129
miny = rect.yMinimum()
128130
maxx = rect.xMaximum()
@@ -143,15 +145,16 @@ def featureExtent(self, layer, writer, progress):
143145
geometry = QgsGeometry().fromPolygon([rect])
144146
feat.setGeometry(geometry)
145147
attrs = [QVariant(minx),
146-
QVariant(miny),
147-
QVariant(maxx),
148-
QVariant(maxy),
149-
QVariant(cntx),
150-
QVariant(cnty),
151-
QVariant(area),
152-
QVariant(perim),
153-
QVariant(height),
154-
QVariant(width) ]
148+
QVariant(miny),
149+
QVariant(maxx),
150+
QVariant(maxy),
151+
QVariant(cntx),
152+
QVariant(cnty),
153+
QVariant(area),
154+
QVariant(perim),
155+
QVariant(height),
156+
QVariant(width)
157+
]
155158
feat.setAttributes(attrs)
156159

157160
writer.addFeature(feat)

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

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,14 @@
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
from qgis.core import *
28+
2929
from sextante.core.GeoAlgorithm import GeoAlgorithm
3030
from sextante.core.QGisLayers import QGisLayers
3131
from sextante.parameters.ParameterVector import ParameterVector
3232
from sextante.outputs.OutputVector import OutputVector
33+
3334
from sextante.algs.ftools import FToolsUtils as utils
3435

3536
class ExtractNodes(GeoAlgorithm):
@@ -53,9 +54,7 @@ def defineCharacteristics(self):
5354
def processAlgorithm(self, progress):
5455
layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT))
5556

56-
provider = layer.dataProvider()
57-
58-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields(),
57+
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields().toList(),
5958
QGis.WKBPoint, layer.crs())
6059

6160
outFeat = QgsFeature()
@@ -65,12 +64,12 @@ def processAlgorithm(self, progress):
6564
current = 0
6665
features = QGisLayers.features(layer)
6766
total = 100.0 / float(len(features))
68-
for inFeat in features:
69-
inGeom = inFeat.geometry()
70-
atMap = inFeat.attributes()
67+
for f in features:
68+
inGeom = f.geometry()
69+
attrs = f.attributes()
7170

7271
points = utils.extractPoints(inGeom)
73-
outFeat.setAttributes(atMap)
72+
outFeat.setAttributes(attrs)
7473

7574
for i in points:
7675
outFeat.setGeometry(outGeom.fromPoint(i))

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

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ def createUniqueFieldName(fieldName, fieldList):
3939
if len(fieldList) == 0:
4040
return shortName
4141

42-
if shortName not in fieldList:
42+
fieldNames = [f.name() for f in fieldList]
43+
44+
if shortName not in fieldNames:
4345
return shortName
4446

4547
shortName = fieldName[:8] + "_1"
@@ -63,13 +65,13 @@ def findOrCreateField(layer, fieldList, fieldName, fieldLen=24, fieldPrec=15):
6365
idx = layer.fieldNameIndex(fieldName)
6466
if idx == -1:
6567
fn = createUniqueFieldName(fieldName, fieldList)
66-
field = QgsField(fn, QVariant.Double, "", fieldLen, fieldPrec)
68+
field = QgsField(fn, QVariant.Double, "", fieldLen, fieldPrec)
6769
idx = len(fieldList)
6870
fieldList.append(field)
6971

7072
return idx, fieldList
7173

72-
def extractPoints( geom ):
74+
def extractPoints(geom):
7375
points = []
7476
if geom.type() == QGis.Point:
7577
if geom.isMultipart():
@@ -121,13 +123,12 @@ def simpleMeasure(geom, method=0, ellips=None, crs=None):
121123
if geom.type() == QGis.Polygon:
122124
attr2 = measure.measurePerimeter(geom)
123125
else:
124-
attr2 = attr1
126+
attr2 = None
125127

126128
return (attr1, attr2)
127129

128130
def getUniqueValues(layer, fieldIndex):
129131
values = []
130-
layer.select([fieldIndex], QgsRectangle(), False)
131132
features = QGisLayers.features(layer)
132133
for feat in features:
133134
if feat.attributes()[fieldIndex] not in values:
@@ -138,7 +139,7 @@ def getUniqueValuesCount(layer, fieldIndex):
138139
return len(getUniqueValues(layer, fieldIndex))
139140

140141
# From two input field maps, create single field map
141-
def combineVectorFields( layerA, layerB ):
142+
def combineVectorFields(layerA, layerB):
142143
fields = []
143144
fieldsA = layerA.dataProvider().fields()
144145
fields.extend(fieldsA)
@@ -158,19 +159,19 @@ def combineVectorFields( layerA, layerB ):
158159
return fields
159160

160161
# Create a unique field name based on input field name
161-
def createUniqueFieldNameFromName( field ):
162-
check = field.name().right( 2 )
163-
shortName = field.name().left( 8 )
162+
def createUniqueFieldNameFromName(field):
163+
check = field.name().right(2)
164+
shortName = field.name().left(8)
164165
if check.startsWith("_"):
165-
( val, test ) = check.right( 1 ).toInt()
166+
(val, test) = check.right(1).toInt()
166167
if test:
167168
if val < 2:
168169
val = 2
169170
else:
170171
val = val + 1
171-
field.setName( shortName.left( len( shortName )-1 ) + unicode( val ) )
172+
field.setName(shortName.left(len(shortName) - 1) + unicode(val))
172173
else:
173-
field.setName( shortName + "_2" )
174+
field.setName(shortName + "_2")
174175
else:
175-
field.setName( shortName + "_2" )
176+
field.setName(shortName + "_2")
176177
return field

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@ def processAlgorithm(self, progress):
6868
dissolve = self.getParameterValue(self.DISSOLVE)
6969
segments = int(self.getParameterValue(self.SEGMENTS))
7070

71-
provider = layer.dataProvider()
72-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields(),
71+
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields().toList(),
7372
QGis.WKBPolygon, layer.crs())
7473

7574
buff.buffering(progress, writer, distance, None, False,

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

Lines changed: 10 additions & 12 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
from qgis.core import *
2928
from sextante.core.GeoAlgorithm import GeoAlgorithm
@@ -64,9 +63,6 @@ def processAlgorithm(self, progress):
6463
fieldA = self.getParameterValue(self.FIELD_A)
6564
fieldB = self.getParameterValue(self.FIELD_B)
6665

67-
providerA = layerA.dataProvider()
68-
providerB = layerB.dataProvider()
69-
7066
idxA = layerA.fieldNameIndex(fieldA)
7167
idxB = layerB.fieldNameIndex(fieldB)
7268

@@ -75,7 +71,7 @@ def processAlgorithm(self, progress):
7571
]
7672

7773
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList,
78-
QGis.WKBPoint, providerA.crs())
74+
QGis.WKBPoint, layerA.dataProvider().crs())
7975

8076
spatialIndex = utils.createSpatialIndex(layerB)
8177

@@ -85,11 +81,13 @@ def processAlgorithm(self, progress):
8581
inGeom = QgsGeometry()
8682
tmpGeom = QgsGeometry()
8783

84+
features = QGisLayers.features(layerA)
85+
8886
current = 0
89-
total = 100.0 / float(providerA.featureCount())
87+
total = 100.0 / float(len(features))
9088
hasIntersections = False
9189

92-
while layerA.nextFeature(inFeatA):
90+
for inFeatA in features:
9391
inGeom = inFeatA.geometry()
9492
hasIntersections = False
9593
lines = spatialIndex.intersects(inGeom.boundingBox())
@@ -98,14 +96,14 @@ def processAlgorithm(self, progress):
9896
hasIntersections = True
9997

10098
if hasIntersections:
101-
layerB.select([idxB])
10299
for i in lines:
103-
layerB.featureAtId(int(i), inFeatB)
100+
request = QgsFeatureRequest().setFilterFid(i)
101+
inFeatB = layerB.getFeatures(request).next()
104102
tmpGeom = QgsGeometry(inFeatB.geometry())
105103

106104
points = []
107-
atMapA = inFeatA.attributes()
108-
atMapB = inFeatB.attributes()
105+
attrsA = inFeatA.attributes()
106+
attrsB = inFeatB.attributes()
109107

110108
if inGeom.intersects(tmpGeom):
111109
tempGeom = inGeom.intersection(tmpGeom)
@@ -117,7 +115,7 @@ def processAlgorithm(self, progress):
117115

118116
for j in points:
119117
outFeat.setGeometry(tempGeom.fromPoint(j))
120-
outFeat.setAttributes([atMapA[idxA], atMapB[idxB]])
118+
outFeat.setAttributes([attrsA[idxA], attrsB[idxB]])
121119
writer.addFeature(outFeat)
122120

123121
current += 1

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,12 @@
2525

2626
from PyQt4.QtCore import *
2727
from qgis.core import *
28+
2829
from sextante.core.GeoAlgorithm import GeoAlgorithm
2930
from sextante.core.QGisLayers import QGisLayers
3031
from sextante.parameters.ParameterVector import ParameterVector
3132
from sextante.outputs.OutputVector import OutputVector
33+
3234
class LinesToPolygons(GeoAlgorithm):
3335

3436
INPUT = "INPUT"
@@ -49,28 +51,26 @@ def defineCharacteristics(self):
4951
def processAlgorithm(self, progress):
5052
layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT))
5153

52-
provider = layer.dataProvider()
53-
54-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields(),
54+
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields().toList(),
5555
QGis.WKBPolygon, layer.crs())
5656

5757
outFeat = QgsFeature()
5858

5959
current = 0
6060
features = QGisLayers.features(layer)
6161
total = 100.0 / float(len(features))
62-
for inFeat in features:
62+
for f in features:
6363
outGeomList = []
64-
if inFeat.geometry().isMultipart():
65-
outGeomList = inFeat.geometry().asMultiPolyline()
64+
if f.geometry().isMultipart():
65+
outGeomList = f.geometry().asMultiPolyline()
6666
else:
67-
outGeomList.append(inFeat.geometry().asPolyline())
67+
outGeomList.append(f.geometry().asPolyline())
6868

6969
polyGeom = self.removeBadLines(outGeomList)
7070
if len(polyGeom) <> 0:
7171
outFeat.setGeometry(QgsGeometry.fromPolygon(polyGeom))
72-
atMap = inFeat.attributes()
73-
outFeat.setAttributes(atMap)
72+
attrs = f.attributes()
73+
outFeat.setAttributes(attrs)
7474
writer.addFeature(outFeat)
7575

7676
current += 1

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
from sextante.outputs.OutputVector import OutputVector
3333
from sextante.algs.ftools import FToolsUtils as utils
3434

35-
3635
class MeanCoords(GeoAlgorithm):
3736

3837
POINTS = "POINTS"
@@ -61,7 +60,6 @@ def processAlgorithm(self, progress):
6160
weightField = self.getParameterValue(self.WEIGHT)
6261
uniqueField = self.getParameterValue(self.UID)
6362

64-
provider = layer.dataProvider()
6563
weightIndex = layer.fieldNameIndex(weightField)
6664
uniqueIndex = layer.fieldNameIndex(uniqueField)
6765

@@ -81,7 +79,8 @@ def processAlgorithm(self, progress):
8179
QGis.WKBPoint, layer.crs())
8280

8381
current = 0
84-
total = 100.0 / float(provider.featureCount() * len(uniqueValues))
82+
features = QGisLayers.features(layer)
83+
total = 100.0 / float(len(features) * len(uniqueValues))
8584

8685
outFeat = QgsFeature()
8786

@@ -90,7 +89,6 @@ def processAlgorithm(self, progress):
9089
cy = 0.00
9190
points = []
9291
weights = []
93-
features = QGisLayers.features(layer)
9492
for feat in features:
9593
current += 1
9694
progress.setPercentage(current * total)

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

Lines changed: 12 additions & 15 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))
5757

58-
provider = layer.dataProvider()
58+
geomType = self.multiToSingleGeom(layer.dataProvider().geometryType())
5959

60-
geomType = self.multiToSingleGeom(provider.geometryType())
61-
62-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields(),
60+
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields().toList(),
6361
geomType, layer.crs())
6462

6563
outFeat = QgsFeature()
@@ -68,33 +66,32 @@ def processAlgorithm(self, progress):
6866
current = 0
6967
features = QGisLayers.features(layer)
7068
total = 100.0 / float(len(features))
71-
for inFeat in features:
72-
inGeom = inFeat.geometry()
73-
atMap = inFeat.attributes()
69+
for f in features:
70+
inGeom = f.geometry()
71+
attrs = f.attributes()
7472

75-
features = self.extractAsSingle(inGeom)
76-
outFeat.setAttributes(atMap)
73+
geometries = self.extractAsSingle(inGeom)
74+
outFeat.setAttributes(attrs)
7775

78-
for f in features:
79-
outFeat.setGeometry(f)
76+
for g in geometries:
77+
outFeat.setGeometry(g)
8078
writer.addFeature(outFeat)
8179

8280
current += 1
8381
progress.setPercentage(int(current * total))
8482

8583
del writer
8684

87-
8885
def multiToSingleGeom(self, wkbType):
8986
try:
9087
if wkbType in (QGis.WKBPoint, QGis.WKBMultiPoint,
91-
QGis.WKBPoint25D, QGis.WKBMultiPoint25D):
88+
QGis.WKBPoint25D, QGis.WKBMultiPoint25D):
9289
return QGis.WKBPoint
9390
elif wkbType in (QGis.WKBLineString, QGis.WKBMultiLineString,
94-
QGis.WKBMultiLineString25D, QGis.WKBLineString25D):
91+
QGis.WKBMultiLineString25D, QGis.WKBLineString25D):
9592
return QGis.WKBLineString
9693
elif wkbType in (QGis.WKBPolygon, QGis.WKBMultiPolygon,
97-
QGis.WKBMultiPolygon25D, QGis.WKBPolygon25D):
94+
QGis.WKBMultiPolygon25D, QGis.WKBPolygon25D):
9895
return QGis.WKBPolygon
9996
else:
10097
return QGis.WKBUnknown

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ def defineCharacteristics(self):
6363
self.addOutput(OutputNumber(self.POINT_COUNT, "Number of points"))
6464
self.addOutput(OutputNumber(self.Z_SCORE, "Z-Score"))
6565

66-
6766
def processAlgorithm(self, progress):
6867
layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.POINTS))
6968
output = self.getOutputValue(self.OUTPUT)
@@ -83,7 +82,8 @@ def processAlgorithm(self, progress):
8382
total = 100.0 / float(len(features))
8483
for feat in features:
8584
neighbourID = spatialIndex.nearestNeighbor(feat.geometry().asPoint(), 2)[1]
86-
layer.featureAtId(neighbourID, neighbour, True)
85+
request = QgsFeatureRequest().setFilterFid(neighbourID)
86+
neighbour = layer.getFeatures(request).next()
8787
sumDist += distance.measureLine(neighbour.geometry().asPoint(), feat.geometry().asPoint())
8888

8989
current += 1

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

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,21 @@
2727
import math
2828
import codecs
2929
import cStringIO
30+
3031
from qgis.core import *
32+
3133
from sextante.core.GeoAlgorithm import GeoAlgorithm
3234
from sextante.core.QGisLayers import QGisLayers
33-
from sextante.algs.ftools import FToolsUtils as utils
35+
3436
from sextante.parameters.ParameterNumber import ParameterNumber
3537
from sextante.parameters.ParameterVector import ParameterVector
3638
from sextante.parameters.ParameterSelection import ParameterSelection
3739
from sextante.parameters.ParameterTableField import ParameterTableField
3840

3941
from sextante.outputs.OutputFile import OutputFile
4042

43+
from sextante.algs.ftools import FToolsUtils as utils
44+
4145
class PointDistance(GeoAlgorithm):
4246

4347
INPUT_LAYER = "INPUT_LAYER"
@@ -82,7 +86,7 @@ def processAlgorithm(self, progress):
8286
outputFile = self.getOutputValue(self.DISTANCE_MATRIX)
8387

8488
if nPoints < 1:
85-
nPoints = targetLayer.featureCount()
89+
nPoints = len(QGisLayers.features(targetLayer))
8690

8791
# prepare CSV file writer
8892
csvFile = open(outputFile, "wb")
@@ -125,7 +129,8 @@ def linearMatrix(self, inLayer, inField, targetLayer, targetField, matType, nPoi
125129
distList = []
126130
vari = 0.0
127131
for i in featList:
128-
targetLayer.featureAtId(i, outFeat)
132+
request = QgsFeatureRequest().setFilterFid(i)
133+
outFeat = targetLayer.getFeatures(request).next()
129134
outID = outFeat.attributes()[outIdx].toString()
130135
outGeom = outFeat.geometry()
131136
dist = distArea.measureLine(inGeom.asPoint(), outGeom.asPoint())
@@ -145,7 +150,6 @@ def linearMatrix(self, inLayer, inField, targetLayer, targetField, matType, nPoi
145150
progress.setPercentage(int(current * total))
146151

147152
def regularMatrix(self, inLayer, inField, targetLayer, targetField, nPoints, progress):
148-
149153
index = utils.createSpatialIndex(targetLayer)
150154

151155
inIdx = inLayer.fieldNameIndex(inField)
@@ -158,9 +162,9 @@ def regularMatrix(self, inLayer, inField, targetLayer, targetField, nPoints, pro
158162

159163
first = True
160164
current = 0
161-
total = 100.0 / float(inLayer.featureCount())
162-
163165
features = QGisLayers.features(inLayer)
166+
total = 100.0 / float(features)
167+
164168
for inFeat in features:
165169
inGeom = inFeat.geometry()
166170
inID = inFeat.attributes()[inIdx].toString()
@@ -169,13 +173,15 @@ def regularMatrix(self, inLayer, inField, targetLayer, targetField, nPoints, pro
169173
first = False
170174
data = ["ID"]
171175
for i in featList:
172-
targetLayer.featureAtId(i, outFeat)
173-
data.append(unicode(outFeat.attributeMap()[outIdx].toString()))
176+
request = QgsFeatureRequest().setFilterFid(i)
177+
outFeat = targetLayer.getFeatures(request).next()
178+
data.append(unicode(outFeat.attributes[outIdx].toString()))
174179
self.writer.writerow(data)
175180

176181
data = [unicode(inID)]
177182
for i in featList:
178-
targetLayer.featureAtId(i, outFeat)
183+
request = QgsFeatureRequest().setFilterFid(i)
184+
outFeat = targetLayer.getFeatures(request).next()
179185
outGeom = outFeat.geometry()
180186
dist = distArea.measureLine(inGeom.asPoint(), outGeom.asPoint())
181187
data.append(unicode(float(dist)))

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

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,13 @@
3030
from sextante.core.GeoAlgorithm import GeoAlgorithm
3131
from sextante.core.QGisLayers import QGisLayers
3232
from sextante.core.SextanteLog import SextanteLog
33+
3334
from sextante.parameters.ParameterVector import ParameterVector
3435
from sextante.parameters.ParameterString import ParameterString
36+
3537
from sextante.outputs.OutputVector import OutputVector
36-
from sextante.algs.ftools import FToolsUtils as utils
3738

39+
from sextante.algs.ftools import FToolsUtils as utils
3840

3941
class PointsInPolygon(GeoAlgorithm):
4042

@@ -63,14 +65,10 @@ def processAlgorithm(self, progress):
6365
fieldName = self.getParameterValue(self.FIELD)
6466

6567
polyProvider = polyLayer.dataProvider()
66-
pointProvider = pointLayer.dataProvider()
67-
if polyProvider.crs() != pointProvider.crs():
68-
SextanteLog.addToLog(SextanteLog.LOG_WARNING,
69-
"CRS warning: Input layers have non-matching CRS. This may cause unexpected results.")
7068

7169
idxCount, fieldList = utils.findOrCreateField(polyLayer, polyLayer.pendingFields(), fieldName)
7270

73-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList,
71+
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList.toList(),
7472
polyProvider.geometryType(), polyProvider.crs())
7573

7674
spatialIndex = utils.createSpatialIndex(pointLayer)
@@ -87,7 +85,7 @@ def processAlgorithm(self, progress):
8785
total = 100.0 / float(len(features))
8886
for ftPoly in features:
8987
geom = ftPoly.geometry()
90-
atMap = ftPoly.attributes()
88+
attrs = ftPoly.attributes()
9189

9290
count = 0
9391
hasIntersections = False
@@ -97,17 +95,18 @@ def processAlgorithm(self, progress):
9795

9896
if hasIntersections:
9997
for i in points:
100-
pointLayer.featureAtId(int(i), ftPoint, True, False)
98+
request = QgsFeatureRequest().setFilterFid(i)
99+
ftPoint = pointLayer.getFeatures(request).next()
101100
tmpGeom = QgsGeometry(ftPoint.geometry())
102101
if geom.contains(tmpGeom):
103102
count += 1
104103

105104
outFeat.setGeometry(geom)
106-
if idxCount == len(atMap):
107-
atMap.append(QVariant(count))
105+
if idxCount == len(attrs):
106+
attrs.append(QVariant(count))
108107
else:
109-
atMap[idxCount] = QVariant(count)
110-
outFeat.setAttributes(atMap)
108+
attrs[idxCount] = QVariant(count)
109+
outFeat.setAttributes(attrs)
111110
writer.addFeature(outFeat)
112111

113112
current += 1

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

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

27-
import os.path
28-
2927
from PyQt4 import QtGui
3028
from PyQt4.QtCore import *
3129

3230
from qgis.core import *
3331

3432
from sextante.core.GeoAlgorithm import GeoAlgorithm
3533
from sextante.core.QGisLayers import QGisLayers
36-
from sextante.core.SextanteLog import SextanteLog
3734

3835
from sextante.parameters.ParameterVector import ParameterVector
3936
from sextante.parameters.ParameterString import ParameterString
@@ -42,7 +39,6 @@
4239

4340
from sextante.algs.ftools import FToolsUtils as utils
4441

45-
4642
class PointsInPolygonUnique(GeoAlgorithm):
4743

4844
POLYGONS = "POLYGONS"
@@ -72,15 +68,11 @@ def processAlgorithm(self, progress):
7268
classFieldName = self.getParameterValue(self.CLASSFIELD)
7369

7470
polyProvider = polyLayer.dataProvider()
75-
pointProvider = pointLayer.dataProvider()
76-
if polyProvider.crs() != pointProvider.crs():
77-
SextanteLog.addToLog(SextanteLog.LOG_WARNING,
78-
"CRS warning: Input layers have non-matching CRS. This may cause unexpected results.")
7971

80-
classFieldIndex = pointProvider.fieldNameIndex(classFieldName)
72+
classFieldIndex = pointLayer.fieldNameIndex(classFieldName)
8173
idxCount, fieldList = utils.findOrCreateField(polyLayer, polyLayer.pendingFields(), fieldName)
8274

83-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList,
75+
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList.toList(),
8476
polyProvider.geometryType(), polyProvider.crs())
8577

8678
spatialIndex = utils.createSpatialIndex(pointLayer)
@@ -96,7 +88,7 @@ def processAlgorithm(self, progress):
9688
total = 100.0 / float(len(features))
9789
for ftPoly in features:
9890
geom = ftPoly.geometry()
99-
atMap = ftPoly.attributes()
91+
attrs = ftPoly.attributes()
10092

10193
classes = []
10294
hasIntersections = False
@@ -106,19 +98,20 @@ def processAlgorithm(self, progress):
10698

10799
if hasIntersections:
108100
for i in points:
109-
pointLayer.featureAtId(int(i), ftPoint, True, True)
101+
request = QgsFeatureRequest().setFilterFid(i)
102+
ftPoint = pointLayer.getFeatures(request).next()
110103
tmpGeom = QgsGeometry(ftPoint.geometry())
111104
if geom.contains(tmpGeom):
112105
clazz = ftPoint.attributes()[classFieldIndex].toString()
113106
if not clazz in classes:
114107
classes.append(clazz)
115108

116109
outFeat.setGeometry(geom)
117-
if idxCount == len(atMap):
118-
atMap.append(QVariant(len(classes)))
110+
if idxCount == len(attrs):
111+
attrs.append(QVariant(len(classes)))
119112
else:
120-
atMap[idxCount] = QVariant(len(classes))
121-
outFeat.setAttributes(atMap)
113+
attrs[idxCount] = QVariant(len(classes))
114+
outFeat.setAttributes(attrs)
122115
writer.addFeature(outFeat)
123116

124117
current += 1

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

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,13 @@
2424
# This will get replaced with a git SHA1 when you do a git archive
2525
__revision__ = '$Format:%H$'
2626

27-
import os.path
28-
2927
from PyQt4 import QtGui
3028
from PyQt4.QtCore import *
3129

3230
from qgis.core import *
3331

3432
from sextante.core.GeoAlgorithm import GeoAlgorithm
3533
from sextante.core.QGisLayers import QGisLayers
36-
from sextante.core.SextanteLog import SextanteLog
3734

3835
from sextante.parameters.ParameterVector import ParameterVector
3936
from sextante.parameters.ParameterString import ParameterString
@@ -42,7 +39,6 @@
4239

4340
from sextante.algs.ftools import FToolsUtils as utils
4441

45-
4642
class PointsInPolygonWeighted(GeoAlgorithm):
4743

4844
POLYGONS = "POLYGONS"
@@ -71,17 +67,13 @@ def processAlgorithm(self, progress):
7167
polyLayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.POLYGONS))
7268
pointLayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.POINTS))
7369
fieldName = self.getParameterValue(self.FIELD)
74-
fieldidx = pointLayer.dataProvider().fieldNameIndex(self.getParameterValue(self.WEIGHT))
70+
fieldIdx = pointLayer.fieldNameIndex(self.getParameterValue(self.WEIGHT))
7571

7672
polyProvider = polyLayer.dataProvider()
77-
pointProvider = pointLayer.dataProvider()
78-
if polyProvider.crs() != pointProvider.crs():
79-
SextanteLog.addToLog(SextanteLog.LOG_WARNING,
80-
"CRS warning: Input layers have non-matching CRS. This may cause unexpected results.")
8173

8274
idxCount, fieldList = utils.findOrCreateField(polyLayer, polyLayer.pendingFields(), fieldName)
8375

84-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList,
76+
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList.toList(),
8577
polyProvider.geometryType(), polyProvider.crs())
8678

8779
spatialIndex = utils.createSpatialIndex(pointLayer)
@@ -97,7 +89,7 @@ def processAlgorithm(self, progress):
9789
total = 100.0 / float(len(features))
9890
for ftPoly in features:
9991
geom = ftPoly.geometry()
100-
atMap = ftPoly.attributes()
92+
attrs = ftPoly.attributes()
10193

10294
count = 0
10395
hasIntersections = False
@@ -108,20 +100,20 @@ def processAlgorithm(self, progress):
108100
if hasIntersections:
109101
progress.setText(str(len(points)))
110102
for i in points:
111-
pointLayer.featureAtId(int(i), ftPoint, True, True)
103+
request = QgsFeatureRequest().setFilterFid(i)
104+
ftPoint = pointLayer.getFeatures(request).next()
112105
tmpGeom = QgsGeometry(ftPoint.geometry())
113106
if geom.contains(tmpGeom):
114-
#try:
115-
weight, ok = ftPoint.attributes()[fieldidx].toDouble()
107+
weight, ok = ftPoint.attributes()[fieldIdx].toDouble()
116108
if ok:
117109
count += weight
118110

119111
outFeat.setGeometry(geom)
120-
if idxCount == len(atMap):
121-
atMap.append(QVariant(count))
112+
if idxCount == len(attrs):
113+
attrs.append(QVariant(count))
122114
else:
123-
atMap[idxCount] = QVariant(count)
124-
outFeat.setAttributes(atMap)
115+
attrs[idxCount] = QVariant(count)
116+
outFeat.setAttributes(attrs)
125117
writer.addFeature(outFeat)
126118

127119
current += 1

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,22 +56,21 @@ def defineCharacteristics(self):
5656
def processAlgorithm(self, progress):
5757
layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT))
5858

59-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields(),
59+
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields().toList(),
6060
QGis.WKBLineString, layer.crs())
6161

62-
inFeat = QgsFeature()
6362
outFeat = QgsFeature()
6463
inGeom = QgsGeometry()
6564
outGeom = QgsGeometry()
6665

6766
current = 0
6867
features = QGisLayers.features(layer)
6968
total = 100.0 / float(len(features))
70-
for inFeat in features:
71-
inGeom = inFeat.geometry()
72-
atMap = inFeat.attributes()
69+
for f in features:
70+
inGeom = f.geometry()
71+
attrs = f.attributes()
7372
lineList = self.extractAsLine(inGeom)
74-
outFeat.setAttributes(atMap)
73+
outFeat.setAttributes(attrs)
7574
for h in lineList:
7675
outFeat.setGeometry(outGeom.fromPolyline(h))
7776
writer.addFeature(outFeat)

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,10 @@ def processAlgorithm(self, progress):
7070
method = self.getParameterValue(self.METHOD)
7171

7272
featureCount = layer.featureCount()
73-
7473
value = int(self.getParameterValue(self.NUMBER))
7574

75+
layer.removeSelection(True)
76+
7677
if method == 0:
7778
if value > featureCount:
7879
raise GeoAlgorithmExecutionException("Selected number is greater than feature count. Choose a lower value and try again.")
@@ -85,4 +86,3 @@ def processAlgorithm(self, progress):
8586

8687
layer.setSelectedFeatures(selran)
8788
self.setOutputValue(self.OUTPUT, filename)
88-

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,13 +93,14 @@ def processAlgorithm(self, progress):
9393
current = 0
9494
total = 100.0 / float(featureCount * len(unique))
9595

96+
features = QGisLayers.features(layer)
97+
9698
if not len(unique) == featureCount:
9799
for i in unique:
98100
FIDs= []
99-
layer.select([index])
100-
while layer.nextFeature(inFeat):
101-
atMap = inFeat.attributes()
102-
if atMap[index] == QVariant(i):
101+
for inFeat in features:
102+
attrs = inFeat.attributes()
103+
if attrs[index] == QVariant(i):
103104
FIDs.append(inFeat.id())
104105
current += 1
105106
progress.setPercentage(int(current * total))

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def processAlgorithm(self, progress):
5858
crsId = self.getParameterValue(self.TARGET_CRS)
5959
targetCrs = QgsCoordinateReferenceSystem(crsId)
6060

61-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields(),
61+
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields().toList(),
6262
layer.wkbType(), targetCrs)
6363

6464
layerCrs = layer.crs()

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

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,10 @@
3030
from sextante.parameters.ParameterSelection import ParameterSelection
3131
from sextante.parameters.ParameterVector import ParameterVector
3232

33-
3433
from sextante.outputs.OutputVector import OutputVector
3534

35+
from sextante.algs.ftools import FToolsUtils as utils
36+
3637
class SelectByLocation(GeoAlgorithm):
3738

3839
INPUT = "INPUT"
@@ -63,28 +64,25 @@ def processAlgorithm(self, progress):
6364
method = self.getParameterValue(self.METHOD)
6465
filename = self.getParameterValue(self.INTERSECT)
6566
selectLayer = QGisLayers.getObjectFromUri(filename)
66-
inputProvider = inputLayer.dataProvider()
6767

6868
oldSelection = set(inputLayer.selectedFeaturesIds())
69-
index = QgsSpatialIndex()
70-
feat = QgsFeature()
71-
for feat in inputLayer.getFeatures():
72-
index.insertFeature(feat)
69+
index = spatialIndex = utils.createSpatialIndex(inputLayer)
7370

74-
infeat = QgsFeature()
71+
feat = QgsFeature()
7572
geom = QgsGeometry()
7673
selectedSet = []
7774
current = 0
7875
features = QGisLayers.features(selectLayer)
7976
total = 100.0 / float(len(features))
80-
for feat in features:
81-
geom = QgsGeometry(feat.geometry())
77+
for f in features:
78+
geom = QgsGeometry(f.geometry())
8279
intersects = index.intersects(geom.boundingBox())
8380
for i in intersects:
84-
inputLayer.featureAtId(i, infeat, True)
85-
tmpGeom = QgsGeometry( infeat.geometry() )
81+
request = QgsFeatureRequest().setFilterFid(i)
82+
feat = inputLayer.getFeatures(request).next()
83+
tmpGeom = QgsGeometry(feat.geometry())
8684
if geom.intersects(tmpGeom):
87-
selectedSet.append(infeat.id())
85+
selectedSet.append(feat.id())
8886
current += 1
8987
progress.setPercentage(int(current * total))
9088

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ class SimplifyGeometries(GeoAlgorithm):
3838

3939
INPUT = "INPUT"
4040
TOLERANCE = "TOLERANCE"
41-
USE_SELECTION = "USE_SELECTION"
4241
OUTPUT = "OUTPUT"
4342

4443
#===========================================================================
@@ -62,23 +61,21 @@ def processAlgorithm(self, progress):
6261
pointsBefore = 0
6362
pointsAfter = 0
6463

65-
provider = layer.dataProvider()
66-
67-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields(),
64+
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields().toList(),
6865
layer.wkbType(), layer.crs())
6966

7067
current = 0
7168
selection = QGisLayers.features(layer)
7269
total = 100.0 / float(len(selection))
7370
for f in selection:
7471
featGeometry = QgsGeometry(f.geometry())
75-
attrMap = f.attributes()
72+
attrs = f.attributes()
7673
pointsBefore += self.geomVertexCount(featGeometry)
7774
newGeometry = featGeometry.simplify(tolerance)
7875
pointsAfter += self.geomVertexCount(newGeometry)
7976
feature = QgsFeature()
8077
feature.setGeometry(newGeometry)
81-
feature.setAttributes(attrMap)
78+
feature.setAttributes(attrs)
8279
writer.addFeature(feature)
8380
current += 1
8481
progress.setPercentage(int(current * total))

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

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,9 @@ def processAlgorithm(self, progress):
5959
output = self.getOutputValue(self.OUTPUT)
6060
fieldName = self.getParameterValue(self.FIELD)
6161

62-
provider = layer.dataProvider()
63-
allAttrs = layer.pendingAllAttributesList()
64-
layer.select(allAttrs)
65-
geomType = self.singleToMultiGeom(provider.geometryType())
62+
geomType = self.singleToMultiGeom(layer.dataProvider().geometryType())
6663

67-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields(),
64+
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields().toList(),
6865
geomType, layer.crs())
6966

7067
inFeat = QgsFeature()
@@ -81,10 +78,8 @@ def processAlgorithm(self, progress):
8178

8279
if not len(unique) == layer.featureCount():
8380
for i in unique:
84-
#provider.rewind()
8581
multi_feature= []
8682
first = True
87-
layer.select(allAttrs)
8883
features = QGisLayers.features(layer)
8984
for inFeat in features:
9085
atMap = inFeat.attributes()

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

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,11 @@ def processAlgorithm(self, progress):
7272

7373
polyProvider = polyLayer.dataProvider()
7474
lineProvider = lineLayer.dataProvider()
75-
if polyProvider.crs() != lineProvider.crs():
76-
SextanteLog.addToLog(SextanteLog.LOG_WARNING,
77-
"CRS warning: Input layers have non-matching CRS. This may cause unexpected results.")
7875

7976
idxLength, fieldList = utils.findOrCreateField(polyLayer, polyLayer.pendingFields(), lengthFieldName)
8077
idxCount, fieldList = utils.findOrCreateField(polyLayer, fieldList, countFieldName)
8178

82-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList,
79+
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(fieldList.toList(),
8380
polyProvider.geometryType(), polyProvider.crs())
8481

8582
spatialIndex = utils.createSpatialIndex(lineLayer)
@@ -97,7 +94,7 @@ def processAlgorithm(self, progress):
9794
hasIntersections = False
9895
for ftPoly in features:
9996
inGeom = QgsGeometry(ftPoly.geometry())
100-
atMap = ftPoly.attributes()
97+
attrs = ftPoly.attributes()
10198
count = 0
10299
length = 0
103100
hasIntersections = False
@@ -115,15 +112,15 @@ def processAlgorithm(self, progress):
115112
count += 1
116113

117114
outFeat.setGeometry(inGeom)
118-
if idxLength == len(atMap):
119-
atMap.append(QVariant(length))
115+
if idxLength == len(attrs):
116+
attrs.append(QVariant(length))
120117
else:
121-
atMap[idxLength] = QVariant(length)
122-
if idxCount == len(atMap):
123-
atMap.append(QVariant(count))
118+
attrs[idxLength] = QVariant(length)
119+
if idxCount == len(attrs):
120+
attrs.append(QVariant(count))
124121
else:
125-
atMap[idxCount] = QVariant(count)
126-
outFeat.setAttributes(atMap)
122+
attrs[idxCount] = QVariant(count)
123+
outFeat.setAttributes(attrs)
127124
writer.addFeature(outFeat)
128125

129126
current += 1

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,13 @@
2828

2929
from sextante.core.GeoAlgorithm import GeoAlgorithm
3030
from sextante.core.QGisLayers import QGisLayers
31+
3132
from sextante.parameters.ParameterVector import ParameterVector
3233
from sextante.parameters.ParameterTableField import ParameterTableField
34+
3335
from sextante.outputs.OutputHTML import OutputHTML
3436
from sextante.outputs.OutputNumber import OutputNumber
37+
3538
from sextante.algs.ftools import FToolsUtils as utils
3639

3740
class UniqueValues(GeoAlgorithm):

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def processAlgorithm(self, progress):
6868
field = self.getParameterValue(self.FIELD)
6969
segments = int(self.getParameterValue(self.SEGMENTS))
7070

71-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields(),
71+
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields().toList(),
7272
QGis.WKBPolygon, layer.crs())
7373

7474
buff.buffering(progress, writer, 0, field, True,

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def defineCharacteristics(self):
5959
def processAlgorithm(self, progress):
6060
layer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT))
6161

62-
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields(),
62+
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.pendingFields().toList(),
6363
QGis.WKBPolygon, layer.crs())
6464

6565
inFeat = QgsFeature()
@@ -95,7 +95,8 @@ def processAlgorithm(self, progress):
9595
total = 100.0 / float(len(c.polygons))
9696

9797
for site, edges in c.polygons.iteritems():
98-
layer.featureAtId(ptDict[ids[site]], inFeat)
98+
request = QgsFeatureRequest().setFilterFid(ptDict[ids[site]])
99+
inFeat = layer.getFeatures(request).next()
99100
lines = self.clip_voronoi(edges, c, width, height, extent, 0, 0)
100101

101102
geom = QgsGeometry.fromMultiPoint(lines)

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.