@@ -41,157 +41,91 @@ class Dissolve(GeoAlgorithm):
41
41
INPUT = "INPUT"
42
42
OUTPUT = "OUTPUT"
43
43
FIELD = "FIELD"
44
- USE_SELECTED = "USE_SELECTED"
45
44
DISSOLVE_ALL = "DISSOLVE_ALL"
46
45
47
46
#===========================================================================
48
47
# def getIcon(self):
49
48
# return QtGui.QIcon(os.path.dirname(__file__) + "/icons/dissolve.png")
50
49
#===========================================================================
51
50
52
- def processAlgorithm (self , progress ):
53
- useSelection = self .getParameterValue (Dissolve .USE_SELECTED )
54
- useField = not self .getParameterValue (Dissolve .USE_SELECTED )
51
+ def processAlgorithm (self , progress ):
52
+ useField = not self .getParameterValue (Dissolve .DISSOLVE_ALL )
55
53
fieldname = self .getParameterValue (Dissolve .FIELD )
56
54
vlayerA = QGisLayers .getObjectFromUri (self .getParameterValue (Dissolve .INPUT ))
57
55
field = vlayerA .dataProvider ().fieldNameIndex (fieldname )
58
56
GEOS_EXCEPT = True
59
- FEATURE_EXCEPT = True
60
57
vproviderA = vlayerA .dataProvider ()
61
58
allAttrsA = vproviderA .attributeIndexes ()
62
59
fields = vproviderA .fields ()
63
60
writer = self .getOutputFromName (Dissolve .OUTPUT ).getVectorWriter (fields , vproviderA .geometryType (), vproviderA .crs () )
64
- inFeat = QgsFeature ()
61
+ # inFeat = QgsFeature()
65
62
outFeat = QgsFeature ()
66
63
vproviderA .rewind ()
67
64
nElement = 0
68
- # there is selection in input layer
69
- if useSelection :
70
- nFeat = vlayerA .selectedFeatureCount ()
71
- selectionA = vlayerA .selectedFeatures ()
72
- if not useField :
65
+ nFeat = vproviderA .featureCount ()
66
+ if not useField :
73
67
first = True
74
- for inFeat in selectionA :
75
- nElement += 1
76
- progress .setPercentage (int (nElement / nFeat * 100 ))
77
- if first :
78
- attrs = inFeat .attributeMap ()
79
- tmpInGeom = QgsGeometry ( inFeat .geometry () )
80
- outFeat .setGeometry ( tmpInGeom )
81
- first = False
82
- else :
83
- tmpInGeom = QgsGeometry ( inFeat .geometry () )
84
- tmpOutGeom = QgsGeometry ( outFeat .geometry () )
85
- try :
86
- tmpOutGeom = QgsGeometry ( tmpOutGeom .combine ( tmpInGeom ) )
87
- outFeat .setGeometry ( tmpOutGeom )
88
- except :
89
- GEOS_EXCEPT = False
90
- continue
91
- outFeat .setAttributeMap ( attrs )
92
- writer .addFeature ( outFeat )
93
- else :
94
- unique = vproviderA .uniqueValues ( int ( field ) )
95
- nFeat = nFeat * len ( unique )
96
- for item in unique :
97
- first = True
98
- add = False
99
- vproviderA .select ( allAttrsA )
100
- vproviderA .rewind ()
101
- for inFeat in selectionA :
68
+ features = QGisLayers .features (vlayerA )
69
+ for inFeat in features :
102
70
nElement += 1
103
71
progress .setPercentage (int (nElement / nFeat * 100 ))
104
- atMap = inFeat .attributeMap ()
105
- tempItem = atMap [ field ]
106
- if tempItem .toString ().trimmed () == item .toString ().trimmed ():
107
- add = True
108
- if first :
109
- QgsGeometry ( inFeat .geometry () )
72
+ if first :
73
+ attrs = inFeat .attributeMap ()
110
74
tmpInGeom = QgsGeometry ( inFeat .geometry () )
111
75
outFeat .setGeometry ( tmpInGeom )
112
76
first = False
113
- attrs = inFeat .attributeMap ()
114
- else :
77
+ else :
115
78
tmpInGeom = QgsGeometry ( inFeat .geometry () )
116
79
tmpOutGeom = QgsGeometry ( outFeat .geometry () )
117
80
try :
118
- tmpOutGeom = QgsGeometry ( tmpOutGeom .combine ( tmpInGeom ) )
119
- outFeat .setGeometry ( tmpOutGeom )
81
+ tmpOutGeom = QgsGeometry ( tmpOutGeom .combine ( tmpInGeom ) )
82
+ outFeat .setGeometry ( tmpOutGeom )
120
83
except :
121
- GEOS_EXCEPT = False
122
- add = False
123
- if add :
124
- outFeat .setAttributeMap ( attrs )
125
- writer .addFeature ( outFeat )
126
- # there is no selection in input layer
84
+ GEOS_EXCEPT = False
85
+ continue
86
+ outFeat .setAttributeMap ( attrs )
87
+ writer .addFeature ( outFeat )
127
88
else :
128
- nFeat = vproviderA .featureCount ()
129
- if not useField :
130
- first = True
131
- while vproviderA .nextFeature ( inFeat ):
132
- nElement += 1
133
- progress .setPercentage (int (nElement / nFeat * 100 ))
134
- if first :
135
- attrs = inFeat .attributeMap ()
136
- tmpInGeom = QgsGeometry ( inFeat .geometry () )
137
- outFeat .setGeometry ( tmpInGeom )
138
- first = False
139
- else :
140
- tmpInGeom = QgsGeometry ( inFeat .geometry () )
141
- tmpOutGeom = QgsGeometry ( outFeat .geometry () )
142
- try :
143
- tmpOutGeom = QgsGeometry ( tmpOutGeom .combine ( tmpInGeom ) )
144
- outFeat .setGeometry ( tmpOutGeom )
145
- except :
146
- GEOS_EXCEPT = False
147
- continue
148
- outFeat .setAttributeMap ( attrs )
149
- writer .addFeature ( outFeat )
150
- else :
151
89
unique = vproviderA .uniqueValues ( int ( field ) )
152
90
nFeat = nFeat * len ( unique )
153
91
for item in unique :
154
- first = True
155
- add = True
156
- vproviderA .select ( allAttrsA )
157
- vproviderA .rewind ()
158
- while vproviderA .nextFeature ( inFeat ):
159
- nElement += 1
160
- progress .setPercentage (int (nElement / nFeat * 100 ))
161
- atMap = inFeat .attributeMap ()
162
- tempItem = atMap [ field ]
163
- if tempItem .toString ().trimmed () == item .toString ().trimmed ():
164
- if first :
165
- QgsGeometry ( inFeat .geometry () )
166
- tmpInGeom = QgsGeometry ( inFeat .geometry () )
167
- outFeat .setGeometry ( tmpInGeom )
168
- first = False
169
- attrs = inFeat .attributeMap ()
170
- else :
171
- tmpInGeom = QgsGeometry ( inFeat .geometry () )
172
- tmpOutGeom = QgsGeometry ( outFeat .geometry () )
173
- try :
174
- tmpOutGeom = QgsGeometry ( tmpOutGeom .combine ( tmpInGeom ) )
175
- outFeat .setGeometry ( tmpOutGeom )
176
- except :
177
- GEOS_EXCEPT = False
178
- add = False
179
- if add :
180
- outFeat .setAttributeMap ( attrs )
181
- writer .addFeature ( outFeat )
92
+ first = True
93
+ add = True
94
+ vproviderA .select ( allAttrsA )
95
+ vproviderA .rewind ()
96
+ features = QGisLayers .features (vlayerA )
97
+ for inFeat in features :
98
+ nElement += 1
99
+ progress .setPercentage (int (nElement / nFeat * 100 ))
100
+ atMap = inFeat .attributeMap ()
101
+ tempItem = atMap [ field ]
102
+ if tempItem .toString ().trimmed () == item .toString ().trimmed ():
103
+ if first :
104
+ QgsGeometry ( inFeat .geometry () )
105
+ tmpInGeom = QgsGeometry ( inFeat .geometry () )
106
+ outFeat .setGeometry ( tmpInGeom )
107
+ first = False
108
+ attrs = inFeat .attributeMap ()
109
+ else :
110
+ tmpInGeom = QgsGeometry ( inFeat .geometry () )
111
+ tmpOutGeom = QgsGeometry ( outFeat .geometry () )
112
+ try :
113
+ tmpOutGeom = QgsGeometry ( tmpOutGeom .combine ( tmpInGeom ) )
114
+ outFeat .setGeometry ( tmpOutGeom )
115
+ except :
116
+ GEOS_EXCEPT = False
117
+ add = False
118
+ if add :
119
+ outFeat .setAttributeMap ( attrs )
120
+ writer .addFeature ( outFeat )
182
121
del writer
183
122
if not GEOS_EXCEPT :
184
123
SextanteLog .addToLog (SextanteLog .LOG_WARNING , "Geometry exception while dissolving" )
185
- if not FEATURE_EXCEPT :
186
- SextanteLog .addToLog (SextanteLog .LOG_WARNING , "Feature exception while dissolving" )
187
-
188
-
189
124
190
125
def defineCharacteristics (self ):
191
126
self .name = "Dissolve"
192
127
self .group = "Vector geometry tools"
193
- self .addParameter (ParameterVector (Dissolve .INPUT , "Input layer" , ParameterVector .VECTOR_TYPE_POLYGON ))
194
- self .addParameter (ParameterBoolean (Dissolve .USE_SELECTED , "Use selected features" , False ))
128
+ self .addParameter (ParameterVector (Dissolve .INPUT , "Input layer" , ParameterVector .VECTOR_TYPE_POLYGON ))
195
129
self .addParameter (ParameterBoolean (Dissolve .DISSOLVE_ALL , "Dissolve all (do not use field)" , True ))
196
130
self .addParameter (ParameterTableField (Dissolve .FIELD , "Unique ID field" ,Dissolve .INPUT ))
197
131
self .addOutput (OutputVector (Dissolve .OUTPUT , "Dissolved" ))
0 commit comments