mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-25 00:58:06 -05:00
Improved dissolve per field-value
This commit is contained in:
parent
3fafe82dcf
commit
dceefca2a8
@ -639,40 +639,32 @@ class geoprocessingThread( QThread ):
|
||||
outFeat.setAttributeMap( attrs )
|
||||
writer.addFeature( outFeat )
|
||||
else:
|
||||
unique = vproviderA.uniqueValues( int( self.myParam ) )
|
||||
nFeat = nFeat * len( unique )
|
||||
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), 0)
|
||||
self.emit( SIGNAL( "runRange(PyQt_PyObject)" ), ( 0, nFeat ) )
|
||||
for item in unique:
|
||||
first = True
|
||||
add = False
|
||||
vproviderA.rewind()
|
||||
vproviderA.select( allAttrsA )
|
||||
|
||||
outFeats = {}
|
||||
attrs = {}
|
||||
|
||||
for inFeat in selectionA:
|
||||
nElement += 1
|
||||
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), nElement )
|
||||
atMap = inFeat.attributeMap()
|
||||
tempItem = atMap[ self.myParam ]
|
||||
if tempItem.toString().trimmed() == item.toString().trimmed():
|
||||
add = True
|
||||
if first:
|
||||
QgsGeometry( inFeat.geometry() )
|
||||
tmpInGeom = QgsGeometry( inFeat.geometry() )
|
||||
outFeat.setGeometry( tmpInGeom )
|
||||
first = False
|
||||
attrs = inFeat.attributeMap()
|
||||
tempItem = unicode(atMap[self.myParam].toString().trimmed())
|
||||
|
||||
if not (tempItem in outFeats):
|
||||
outFeats[tempItem] = QgsGeometry(inFeat.geometry())
|
||||
attrs[tempItem] = atMap
|
||||
else:
|
||||
tmpInGeom = QgsGeometry( inFeat.geometry() )
|
||||
tmpOutGeom = QgsGeometry( outFeat.geometry() )
|
||||
try:
|
||||
tmpOutGeom = QgsGeometry( tmpOutGeom.combine( tmpInGeom ) )
|
||||
outFeat.setGeometry( tmpOutGeom )
|
||||
outFeats[tempItem] = outFeats[tempItem].combine(inFeat.geometry())
|
||||
except:
|
||||
GEOS_EXCEPT = False
|
||||
add = False
|
||||
if add:
|
||||
outFeat.setAttributeMap( attrs )
|
||||
writer.addFeature( outFeat )
|
||||
continue
|
||||
for k in outFeats.keys():
|
||||
feature = QgsFeature()
|
||||
feature.setAttributeMap(attrs[k])
|
||||
feature.setGeometry(outFeats[k])
|
||||
writer.addFeature( feature )
|
||||
# there is no selection in input layer
|
||||
else:
|
||||
nFeat = vproviderA.featureCount()
|
||||
@ -700,40 +692,32 @@ class geoprocessingThread( QThread ):
|
||||
outFeat.setAttributeMap( attrs )
|
||||
writer.addFeature( outFeat )
|
||||
else:
|
||||
unique = vproviderA.uniqueValues( int( self.myParam ) )
|
||||
nFeat = nFeat * len( unique )
|
||||
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), 0)
|
||||
self.emit( SIGNAL( "runRange(PyQt_PyObject)" ), ( 0, nFeat ) )
|
||||
for item in unique:
|
||||
first = True
|
||||
add = True
|
||||
vproviderA.rewind()
|
||||
vproviderA.select( allAttrsA )
|
||||
|
||||
outFeats = {}
|
||||
attrs = {}
|
||||
|
||||
while vproviderA.nextFeature( inFeat ):
|
||||
nElement += 1
|
||||
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), nElement )
|
||||
atMap = inFeat.attributeMap()
|
||||
tempItem = atMap[ self.myParam ]
|
||||
tempItem = unicode(atMap[self.myParam].toString().trimmed())
|
||||
|
||||
if tempItem.toString().trimmed() == item.toString().trimmed():
|
||||
if first:
|
||||
QgsGeometry( inFeat.geometry() )
|
||||
tmpInGeom = QgsGeometry( inFeat.geometry() )
|
||||
outFeat.setGeometry( tmpInGeom )
|
||||
first = False
|
||||
attrs = inFeat.attributeMap()
|
||||
if not (tempItem in outFeats):
|
||||
outFeats[tempItem] = QgsGeometry(inFeat.geometry())
|
||||
attrs[tempItem] = atMap
|
||||
else:
|
||||
tmpInGeom = QgsGeometry( inFeat.geometry() )
|
||||
tmpOutGeom = QgsGeometry( outFeat.geometry() )
|
||||
try:
|
||||
tmpOutGeom = QgsGeometry( tmpOutGeom.combine( tmpInGeom ) )
|
||||
outFeat.setGeometry( tmpOutGeom )
|
||||
outFeats[tempItem] = outFeats[tempItem].combine(inFeat.geometry())
|
||||
except:
|
||||
GEOS_EXCEPT = False
|
||||
add = False
|
||||
if add:
|
||||
outFeat.setAttributeMap( attrs )
|
||||
writer.addFeature( outFeat )
|
||||
continue
|
||||
for k in outFeats.keys():
|
||||
feature = QgsFeature()
|
||||
feature.setAttributeMap(attrs[k])
|
||||
feature.setGeometry(outFeats[k])
|
||||
writer.addFeature( feature )
|
||||
del writer
|
||||
return GEOS_EXCEPT, FEATURE_EXCEPT, True, None
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user