Skip to content

Commit 93dbfd7

Browse files
committed
started adapting sextante to new vector api
1 parent 28829dd commit 93dbfd7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1153
-1116
lines changed

python/plugins/sextante/algs/AddTableField.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -63,23 +63,21 @@ def processAlgorithm(self, progress):
6363
output = self.getOutputFromName(self.OUTPUT_LAYER)
6464
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT_LAYER))
6565
vprovider = vlayer.dataProvider()
66-
allAttrs = vprovider.attributeIndexes()
67-
vprovider.select( allAttrs )
6866
fields = vprovider.fields()
6967
fields[len(fields)] = QgsField(fieldname, self.TYPES[fieldtype])
7068
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
7169
outFeat = QgsFeature()
72-
inGeom = QgsGeometry()
73-
nFeat = vprovider.featureCount()
70+
inGeom = QgsGeometry()
7471
nElement = 0
7572
features = QGisLayers.features(vlayer)
73+
nFeat = len(features)
7674
for inFeat in features:
7775
progress.setPercentage(int((100 * nElement)/nFeat))
7876
nElement += 1
7977
inGeom = inFeat.geometry()
8078
outFeat.setGeometry( inGeom )
8179
atMap = inFeat.attributeMap()
82-
outFeat.setAttributeMap( atMap )
80+
atMap.append(QVariant())
8381
outFeat.addAttribute( len(vprovider.fields()), QVariant() )
8482
writer.addFeature( outFeat )
8583
del writer

python/plugins/sextante/algs/AutoincrementalField.py

+11-12
Original file line numberDiff line numberDiff line change
@@ -44,25 +44,24 @@ def processAlgorithm(self, progress):
4444
output = self.getOutputFromName(self.OUTPUT)
4545
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT))
4646
vprovider = vlayer.dataProvider()
47-
allAttrs = vprovider.attributeIndexes()
48-
vprovider.select( allAttrs )
4947
fields = vprovider.fields()
5048
fields[len(fields)] = QgsField("AUTO", QVariant.Int)
5149
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
5250
inFeat = QgsFeature()
5351
outFeat = QgsFeature()
5452
inGeom = QgsGeometry()
55-
nFeat = vprovider.featureCount()
5653
nElement = 0
57-
while vprovider.nextFeature(inFeat):
58-
progress.setPercentage(int((100 * nElement)/nFeat))
59-
nElement += 1
60-
inGeom = inFeat.geometry()
61-
outFeat.setGeometry( inGeom )
62-
atMap = inFeat.attributeMap()
63-
outFeat.setAttributeMap( atMap )
64-
outFeat.addAttribute( len(vprovider.fields()), QVariant(nElement) )
65-
writer.addFeature( outFeat )
54+
features = QGisLayers.features(vlayer)
55+
nFeat = len(features)
56+
for inFeat in features:
57+
progress.setPercentage(int((100 * nElement)/nFeat))
58+
nElement += 1
59+
inGeom = inFeat.geometry()
60+
outFeat.setGeometry( inGeom )
61+
atMap = inFeat.attributeMap()
62+
atMap.append(QVariant(nElement))
63+
outFeat.setAttributeMap( atMap )
64+
writer.addFeature( outFeat )
6665
del writer
6766

6867
def defineCharacteristics(self):

python/plugins/sextante/algs/EquivalentNumField.py

+17-27
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
from sextante.parameters.ParameterVector import ParameterVector
3030
from sextante.core.QGisLayers import QGisLayers
3131
from sextante.outputs.OutputVector import OutputVector
32-
from PyQt4 import QtGui
3332
from sextante.parameters.ParameterTableField import ParameterTableField
3433

3534
class EquivalentNumField(GeoAlgorithm):
@@ -48,37 +47,28 @@ def processAlgorithm(self, progress):
4847
output = self.getOutputFromName(self.OUTPUT)
4948
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT))
5049
vprovider = vlayer.dataProvider()
51-
field_index = vprovider.fieldNameIndex(fieldname)
52-
allAttrs = vprovider.attributeIndexes()
53-
vprovider.select(allAttrs)
50+
fieldindex = vlayer.fieldNameIndex(fieldname)
5451
fields = vprovider.fields()
55-
fields[len(fields)] = QgsField("NUM_FIELD", QVariant.Int)
56-
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
57-
inFeat = QgsFeature()
52+
fields.append(QgsField("NUM_FIELD", QVariant.Int))
53+
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
5854
outFeat = QgsFeature()
59-
inGeom = QgsGeometry()
60-
nFeat = vprovider.featureCount()
55+
inGeom = QgsGeometry()
6156
nElement = 0
6257
classes = {}
63-
features = QGisLayers.features(layer)
58+
features = QGisLayers.features(vlayer)
59+
nFeat = len(features)
6460
for feature in features:
65-
progress.setPercentage(int((100 * nElement)/nFeat))
66-
nElement += 1
67-
atMap = feature.attributeMap()
68-
clazz = atMap[field_index].toString()
69-
if clazz not in classes:
70-
classes[clazz] = len(classes.keys())
71-
features = QGisLayers.features(layer)
72-
for feature in features:
73-
progress.setPercentage(int((100 * nElement)/nFeat))
74-
nElement += 1
75-
inGeom = features.geometry()
76-
outFeat.setGeometry( inGeom )
77-
atMap = inFeat.attributeMap()
78-
clazz = atMap[field_index].toString()
79-
outFeat.setAttributeMap( atMap )
80-
outFeat.addAttribute( len(vprovider.fields()), QVariant(classes[clazz]) )
81-
writer.addFeature( outFeat )
61+
progress.setPercentage(int((100 * nElement)/nFeat))
62+
nElement += 1
63+
inGeom = feature.geometry()
64+
outFeat.setGeometry( inGeom )
65+
atMap = feature.attributes()
66+
clazz = atMap[fieldindex].toString()
67+
if clazz not in classes:
68+
classes[clazz] = len(classes.keys())
69+
atMap.append(QVariant(classes[clazz]))
70+
outFeat.setAttributes(atMap)
71+
writer.addFeature( outFeat )
8272
del writer
8373

8474
def defineCharacteristics(self):

python/plugins/sextante/algs/Explode.py

+2-6
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
__revision__ = '$Format:%H$'
2525

2626
from sextante.core.GeoAlgorithm import GeoAlgorithm
27-
from PyQt4 import QtGui
2827
from PyQt4.QtCore import *
2928
from PyQt4.QtGui import *
3029
from qgis.core import *
@@ -46,11 +45,8 @@ def processAlgorithm(self, progress):
4645
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT))
4746
output = self.getOutputFromName(self.OUTPUT)
4847
vprovider = vlayer.dataProvider()
49-
allAttrs = vprovider.attributeIndexes()
50-
vprovider.select( allAttrs )
5148
fields = vprovider.fields()
5249
writer = output.getVectorWriter(fields, QGis.WKBLineString, vprovider.crs() )
53-
inFeat = QgsFeature()
5450
outFeat = QgsFeature()
5551
inGeom = QgsGeometry()
5652
nFeat = vprovider.featureCount()
@@ -60,9 +56,9 @@ def processAlgorithm(self, progress):
6056
nElement += 1
6157
progress.setPercentage((nElement*100)/nFeat)
6258
inGeom = feature.geometry()
63-
atMap = feature.attributeMap()
59+
atMap = feature.attributes()
6460
segments = self.extractAsSingleSegments( inGeom )
65-
outFeat.setAttributeMap( atMap )
61+
outFeat.setAttributes( atMap )
6662
for segment in segments:
6763
outFeat.setGeometry(segment)
6864
writer.addFeature(outFeat)

python/plugins/sextante/algs/FieldPyculator.py

+10-16
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def processAlgorithm(self, progress):
7070
allAttrs = vprovider.attributeIndexes()
7171
vprovider.select( allAttrs )
7272
fields = vprovider.fields()
73-
fields[len(fields)] = QgsField(fieldname, QVariant.Double)
73+
fields.append(QgsField(fieldname, QVariant.Double))
7474
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs() )
7575
outFeat = QgsFeature()
7676
new_ns = {}
@@ -86,11 +86,13 @@ def processAlgorithm(self, progress):
8686
(unicode(sys.exc_info()[0].__name__), unicode(sys.exc_info()[1])))
8787

8888
#replace all fields tags
89-
field_map = vprovider.fields()
90-
for num, field in field_map.iteritems():
89+
fields = vprovider.fields()
90+
num = 0
91+
for field in fields:
9192
field_name = unicode(field.name())
9293
replval = '__attr[' + str(num) + ']'
9394
code = code.replace("<"+field_name+">",replval)
95+
num += 1
9496

9597
#replace all special vars
9698
code = code.replace('$id','__id')
@@ -109,18 +111,12 @@ def processAlgorithm(self, progress):
109111
(unicode(sys.exc_info()[0].__name__), unicode(sys.exc_info()[1])))
110112

111113
#run
112-
if need_attrs:
113-
attr_ind = vprovider.attributeIndexes()
114-
else:
115-
attr_ind = []
116-
vprovider.select(attr_ind, QgsRectangle(), True)
117-
118114
features = QGisLayers.features(layer)
119115
nFeatures = len(features)
120116
nElement = 1
121117
for feat in features:
122118
progress.setPercentage(int((100 * nElement)/nFeatures))
123-
attrMap = feat.attributeMap()
119+
attrMap = feat.attributes()
124120
feat_id = feat.id()
125121

126122
#add needed vars
@@ -132,10 +128,8 @@ def processAlgorithm(self, progress):
132128
new_ns['__geom'] = geom
133129

134130
if need_attrs:
135-
attr = []
136-
for num,a in attrMap.iteritems():
137-
attr.append(self.Qvar2py(a))
138-
new_ns['__attr'] = attr
131+
pyattrs = [self.Qvar2py(a) for a in attrMap]
132+
new_ns['__attr'] = pyattrs
139133

140134
#clear old result
141135
if new_ns.has_key(self.RESULT_VAR_NAME):
@@ -165,8 +159,8 @@ def processAlgorithm(self, progress):
165159
#write feature
166160
nElement += 1
167161
outFeat.setGeometry( feat.geometry() )
168-
outFeat.setAttributeMap( attrMap )
169-
outFeat.addAttribute(len(vprovider.fields()), QVariant(new_ns[self.RESULT_VAR_NAME]))
162+
attrMap.append(QVariant(new_ns[self.RESULT_VAR_NAME]))
163+
outFeat.setAttributeMap( attrMap )
170164
writer.addFeature(outFeat)
171165

172166
del writer

python/plugins/sextante/algs/FieldsCalculator.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,8 @@ def processAlgorithm(self, progress):
6060
output = self.getOutputFromName(self.OUTPUT_LAYER)
6161
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(self.INPUT_LAYER))
6262
vprovider = vlayer.dataProvider()
63-
allAttrs = vprovider.attributeIndexes()
64-
vprovider.select(allAttrs)
6563
fields = vprovider.fields()
66-
fields[len(fields)] = QgsField(fieldname, QVariant.Double)
64+
fields.append(QgsField(fieldname, QVariant.Double))
6765
writer = output.getVectorWriter(fields, vprovider.geometryType(), vprovider.crs())
6866
outFeat = QgsFeature()
6967
inGeom = QgsGeometry()
@@ -72,10 +70,12 @@ def processAlgorithm(self, progress):
7270
features = QGisLayers.features(vlayer)
7371
for inFeat in features:
7472
progress.setPercentage(int((100 * nElement) / nFeat))
75-
attrs = inFeat.attributeMap()
73+
attrs = inFeat.attributes()
7674
expression = formula
77-
for (k, attr) in attrs.iteritems():
75+
k = 0
76+
for attr in attrs:
7877
expression = expression.replace(str(fields[k].name()), str(attr.toString()))
78+
k += 1
7979
try:
8080
result = eval(expression)
8181
except Exception:
@@ -85,8 +85,8 @@ def processAlgorithm(self, progress):
8585
inGeom = inFeat.geometry()
8686
outFeat.setGeometry(inGeom)
8787
atMap = inFeat.attributeMap()
88-
outFeat.setAttributeMap(atMap)
89-
outFeat.addAttribute(len(vprovider.fields()), QVariant(result))
88+
atMap.append(QVariant(result))
89+
outFeat.setAttributeMap(atMap)
9090
writer.addFeature(outFeat)
9191
del writer
9292

python/plugins/sextante/algs/JoinAttributes.py

+16-23
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
* *
1717
***************************************************************************
1818
"""
19-
from sextante.core.SextanteVectorWriter import SextanteVectorWriter
20-
from sextante.parameters.ParameterTableField import ParameterTableField
2119

2220
__author__ = 'Victor Olaya'
2321
__date__ = 'August 2012'
@@ -28,6 +26,7 @@
2826
from sextante.core.GeoAlgorithm import GeoAlgorithm
2927
from sextante.outputs.OutputVector import OutputVector
3028
from sextante.parameters.ParameterVector import ParameterVector
29+
from sextante.parameters.ParameterTableField import ParameterTableField
3130
from qgis.core import *
3231
from PyQt4.QtCore import *
3332
from PyQt4.QtGui import *
@@ -61,22 +60,17 @@ def processAlgorithm(self, progress):
6160
# Layer 1
6261
layer = QGisLayers.getObjectFromUri(input)
6362
provider = layer.dataProvider()
64-
allAttrs = provider.attributeIndexes()
65-
provider.select(allAttrs)
66-
join_field1_index = provider.fieldNameIndex(field)
63+
join_field1_index = layer.fieldNameIndex(field)
6764
# Layer 2
6865
layer2 = QGisLayers.getObjectFromUri(input2)
6966
provider2 = layer2.dataProvider()
70-
allAttrs = provider2.attributeIndexes()
71-
provider2.select(allAttrs)
7267
fields2 = provider2.fields()
73-
join_field2_index = provider2.fieldNameIndex(field2)
68+
join_field2_index = layer2.fieldNameIndex(field2)
7469

7570
# Output
76-
outFields = provider.fields()
77-
for (i, f) in fields2.iteritems():
78-
f.setName("x_" + f.name())
79-
outFields[len(outFields)] = f
71+
outFields = input.fields()
72+
for f in fields2:
73+
outFields.append(f)
8074

8175
writer = output.getVectorWriter(outFields, provider.geometryType(), provider.crs())
8276

@@ -85,22 +79,21 @@ def processAlgorithm(self, progress):
8579
outFeat = QgsFeature()
8680

8781
# Create output vector layer with additional attribute
88-
while provider.nextFeature(inFeat):
82+
features = QGisLayers.features(layer);
83+
for inFeat in features:
8984
inGeom = inFeat.geometry()
90-
atMap = inFeat.attributeMap()
91-
join_value1 = atMap[join_field1_index].toString()
92-
provider2.rewind()
85+
atMap = inFeat.attributes()
86+
join_value1 = atMap[join_field1_index].toString()
9387
while provider2.nextFeature(inFeat2):
88+
## Maybe it should cache this entries...
9489
atMap2 = inFeat2.attributeMap()
9590
join_value2 = atMap2[join_field2_index].toString()
9691
if join_value1 == join_value2:
9792
# create the new feature
98-
outFeat.setGeometry(inGeom)
99-
outFeat.setAttributeMap(atMap)
100-
l = len(provider.fields())
101-
for (i, a) in atMap2.iteritems():
102-
outFeat.addAttribute(l + i, a)
103-
104-
writer.addFeature(outFeat)
93+
outFeat.setGeometry(inGeom)
94+
atMap.extend(atMap2)
95+
break;
96+
outFeat.setAttributes(atMap)
97+
writer.addFeature(outFeat)
10598

10699
del writer

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ def processAlgorithm(self, progress):
9292
outputFile = self.getOutputValue(self.OUTPUT_HTML_FILE)
9393

9494
index = layer.fieldNameIndex(fieldName)
95-
layer.select([index], QgsRectangle(), False)
95+
#layer.select([index], QgsRectangle(), False)
9696

9797
cvValue = 0
9898
minValue = 0
@@ -110,7 +110,7 @@ def processAlgorithm(self, progress):
110110
total = 100.0 / float(count)
111111
current = 0
112112
for ft in features:
113-
value = float(ft.attributeMap()[index].toDouble()[0])
113+
value = float(ft.attributes()[index].toDouble()[0])
114114

115115
if isFirst:
116116
minValue = value

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def processAlgorithm(self, progress):
101101
total = 100.0 / float(count)
102102
current = 0
103103
for ft in features:
104-
length = float(len(ft.attributeMap()[index].toString()))
104+
length = float(len(ft.attributes()[index].toString()))
105105

106106
if isFirst:
107107
minValue = length

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def buffering(progress, writer, distance, field, useField, layer, dissolve, segm
5252
if dissolve:
5353
first = True
5454
for inFeat in features:
55-
atMap = inFeat.attributeMap()
55+
atMap = inFeat.attributes()
5656
if useField:
5757
value = atMap[field].toDouble()[0]
5858
else:
@@ -84,7 +84,7 @@ def buffering(progress, writer, distance, field, useField, layer, dissolve, segm
8484
# without dissolve
8585
else:
8686
for inFeat in features:
87-
atMap = inFeat.attributeMap()
87+
atMap = inFeat.attributes()
8888
if useField:
8989
value = atMap[field].toDouble()[0]
9090
else:
@@ -95,7 +95,7 @@ def buffering(progress, writer, distance, field, useField, layer, dissolve, segm
9595
outGeom = inGeom.buffer(float(value), segments)
9696
try:
9797
outFeat.setGeometry(outGeom)
98-
outFeat.setAttributeMap(atMap)
98+
outFeat.setAttributes(atMap)
9999
writer.addFeature(outFeat)
100100
except:
101101
FEATURE_EXCEPT = False

0 commit comments

Comments
 (0)