Skip to content

Commit 9c91d31

Browse files
committed
fixed #6918
1 parent be31574 commit 9c91d31

File tree

1 file changed

+46
-112
lines changed

1 file changed

+46
-112
lines changed

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

Lines changed: 46 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -41,157 +41,91 @@ class Dissolve(GeoAlgorithm):
4141
INPUT = "INPUT"
4242
OUTPUT = "OUTPUT"
4343
FIELD = "FIELD"
44-
USE_SELECTED = "USE_SELECTED"
4544
DISSOLVE_ALL = "DISSOLVE_ALL"
4645

4746
#===========================================================================
4847
# def getIcon(self):
4948
# return QtGui.QIcon(os.path.dirname(__file__) + "/icons/dissolve.png")
5049
#===========================================================================
5150

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)
5553
fieldname = self.getParameterValue(Dissolve.FIELD)
5654
vlayerA = QGisLayers.getObjectFromUri(self.getParameterValue(Dissolve.INPUT))
5755
field = vlayerA.dataProvider().fieldNameIndex(fieldname)
5856
GEOS_EXCEPT = True
59-
FEATURE_EXCEPT = True
6057
vproviderA = vlayerA.dataProvider()
6158
allAttrsA = vproviderA.attributeIndexes()
6259
fields = vproviderA.fields()
6360
writer = self.getOutputFromName(Dissolve.OUTPUT).getVectorWriter(fields, vproviderA.geometryType(), vproviderA.crs() )
64-
inFeat = QgsFeature()
61+
#inFeat = QgsFeature()
6562
outFeat = QgsFeature()
6663
vproviderA.rewind()
6764
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:
7367
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:
10270
nElement += 1
10371
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()
11074
tmpInGeom = QgsGeometry( inFeat.geometry() )
11175
outFeat.setGeometry( tmpInGeom )
11276
first = False
113-
attrs = inFeat.attributeMap()
114-
else:
77+
else:
11578
tmpInGeom = QgsGeometry( inFeat.geometry() )
11679
tmpOutGeom = QgsGeometry( outFeat.geometry() )
11780
try:
118-
tmpOutGeom = QgsGeometry( tmpOutGeom.combine( tmpInGeom ) )
119-
outFeat.setGeometry( tmpOutGeom )
81+
tmpOutGeom = QgsGeometry( tmpOutGeom.combine( tmpInGeom ) )
82+
outFeat.setGeometry( tmpOutGeom )
12083
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 )
12788
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:
15189
unique = vproviderA.uniqueValues( int( field ) )
15290
nFeat = nFeat * len( unique )
15391
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 )
182121
del writer
183122
if not GEOS_EXCEPT:
184123
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-
189124

190125
def defineCharacteristics(self):
191126
self.name = "Dissolve"
192127
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))
195129
self.addParameter(ParameterBoolean(Dissolve.DISSOLVE_ALL, "Dissolve all (do not use field)", True))
196130
self.addParameter(ParameterTableField(Dissolve.FIELD, "Unique ID field",Dissolve.INPUT ))
197131
self.addOutput(OutputVector(Dissolve.OUTPUT, "Dissolved"))

0 commit comments

Comments
 (0)