16
16
* *
17
17
***************************************************************************
18
18
"""
19
- from sextante .core .SextanteVectorWriter import SextanteVectorWriter
20
- from sextante .parameters .ParameterTableField import ParameterTableField
21
19
22
20
__author__ = 'Victor Olaya'
23
21
__date__ = 'August 2012'
28
26
from sextante .core .GeoAlgorithm import GeoAlgorithm
29
27
from sextante .outputs .OutputVector import OutputVector
30
28
from sextante .parameters .ParameterVector import ParameterVector
29
+ from sextante .parameters .ParameterTableField import ParameterTableField
31
30
from qgis .core import *
32
31
from PyQt4 .QtCore import *
33
32
from PyQt4 .QtGui import *
@@ -61,22 +60,17 @@ def processAlgorithm(self, progress):
61
60
# Layer 1
62
61
layer = QGisLayers .getObjectFromUri (input )
63
62
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 )
67
64
# Layer 2
68
65
layer2 = QGisLayers .getObjectFromUri (input2 )
69
66
provider2 = layer2 .dataProvider ()
70
- allAttrs = provider2 .attributeIndexes ()
71
- provider2 .select (allAttrs )
72
67
fields2 = provider2 .fields ()
73
- join_field2_index = provider2 .fieldNameIndex (field2 )
68
+ join_field2_index = layer2 .fieldNameIndex (field2 )
74
69
75
70
# 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 )
80
74
81
75
writer = output .getVectorWriter (outFields , provider .geometryType (), provider .crs ())
82
76
@@ -85,22 +79,21 @@ def processAlgorithm(self, progress):
85
79
outFeat = QgsFeature ()
86
80
87
81
# Create output vector layer with additional attribute
88
- while provider .nextFeature (inFeat ):
82
+ features = QGisLayers .features (layer );
83
+ for inFeat in features :
89
84
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 ()
93
87
while provider2 .nextFeature (inFeat2 ):
88
+ ## Maybe it should cache this entries...
94
89
atMap2 = inFeat2 .attributeMap ()
95
90
join_value2 = atMap2 [join_field2_index ].toString ()
96
91
if join_value1 == join_value2 :
97
92
# 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 )
105
98
106
99
del writer
0 commit comments