@@ -542,14 +542,12 @@ def dissolve( self, useField ):
542
542
vproviderA = self .vlayerA .dataProvider ()
543
543
allAttrsA = vproviderA .attributeIndexes ()
544
544
fields = vproviderA .fields ()
545
- writer = QgsVectorFileWriter ( self .myName , self .myEncoding ,
545
+ writer = QgsVectorFileWriter ( self .myName , self .myEncoding ,
546
546
fields , vproviderA .geometryType (), vproviderA .crs () )
547
547
inFeat = QgsFeature ()
548
548
outFeat = QgsFeature ()
549
549
vproviderA .rewind ()
550
550
nElement = 0
551
- inGeom = QgsGeometry ()
552
- geoms = []
553
551
# there is selection in input layer
554
552
if self .mySelectionA :
555
553
nFeat = self .vlayerA .selectedFeatureCount ()
@@ -559,21 +557,24 @@ def dissolve( self, useField ):
559
557
self .emit ( SIGNAL ( "runRange(PyQt_PyObject)" ), ( 0 , nFeat ) )
560
558
first = True
561
559
for inFeat in selectionA :
562
- nElement += 0.5
560
+ nElement += 1
563
561
self .emit ( SIGNAL ( "runStatus(PyQt_PyObject)" ), nElement )
564
562
if first :
565
563
attrs = inFeat .attributeMap ()
566
- inGeom = QgsGeometry ( inFeat .geometry () )
564
+ tmpInGeom = QgsGeometry ( inFeat .geometry () )
565
+ outFeat .setGeometry ( tmpInGeom )
567
566
first = False
568
567
else :
569
- tmp_geom = QgsGeometry ( inFeat .geometry () )
570
- geoms .append (tmp_geom )
571
- outGeom = QgsGeometry (inGeom .combineCascaded (geoms ))
572
- nElement += nFeat / 2
573
- self .emit ( SIGNAL ( "runStatus(PyQt_PyObject)" ), nElement )
574
- outFeat .setGeometry (outGeom )
575
- outFeat .setAttributeMap (attrs )
576
- writer .addFeature (outFeat )
568
+ tmpInGeom = QgsGeometry ( inFeat .geometry () )
569
+ tmpOutGeom = QgsGeometry ( outFeat .geometry () )
570
+ try :
571
+ tmpOutGeom = QgsGeometry ( tmpOutGeom .combine ( tmpInGeom ) )
572
+ outFeat .setGeometry ( tmpOutGeom )
573
+ except :
574
+ GEOS_EXCEPT = False
575
+ continue
576
+ outFeat .setAttributeMap ( attrs )
577
+ writer .addFeature ( outFeat )
577
578
else :
578
579
unique = vproviderA .uniqueValues ( int ( self .myParam ) )
579
580
nFeat = nFeat * len ( unique )
@@ -584,25 +585,31 @@ def dissolve( self, useField ):
584
585
add = False
585
586
vproviderA .select ( allAttrsA )
586
587
vproviderA .rewind ()
587
- filtered = [feat for feat in selectionA if feat .attributeMap ()[
588
- self .myParam ].toString ().trimmed () == item .toString ().trimmed ()]
589
- for inFeat in filtered :
590
- nElement += 0.5
588
+ for inFeat in selectionA :
589
+ nElement += 1
591
590
self .emit ( SIGNAL ( "runStatus(PyQt_PyObject)" ), nElement )
592
591
atMap = inFeat .attributeMap ()
593
- if first :
594
- inGeom = QgsGeometry ( inFeat .geometry () )
595
- first = False
596
- attrs = inFeat .attributeMap ()
597
- else :
598
- tmp_geom = QgsGeometry ( inFeat .geometry () )
599
- geoms .append (tmp_geom )
600
- outGeom = QgsGeometry (inGeom .combineCascaded (geoms ))
601
- nElement += nFeat / 2
602
- self .emit ( SIGNAL ( "runStatus(PyQt_PyObject)" ), nElement )
603
- outFeat .setGeometry (outGeom )
604
- outFeat .setAttributeMap (attrs )
605
- writer .addFeature (outFeat )
592
+ tempItem = atMap [ self .myParam ]
593
+ if tempItem .toString ().trimmed () == item .toString ().trimmed ():
594
+ add = True
595
+ if first :
596
+ QgsGeometry ( inFeat .geometry () )
597
+ tmpInGeom = QgsGeometry ( inFeat .geometry () )
598
+ outFeat .setGeometry ( tmpInGeom )
599
+ first = False
600
+ attrs = inFeat .attributeMap ()
601
+ else :
602
+ tmpInGeom = QgsGeometry ( inFeat .geometry () )
603
+ tmpOutGeom = QgsGeometry ( outFeat .geometry () )
604
+ try :
605
+ tmpOutGeom = QgsGeometry ( tmpOutGeom .combine ( tmpInGeom ) )
606
+ outFeat .setGeometry ( tmpOutGeom )
607
+ except :
608
+ GEOS_EXCEPT = False
609
+ add = False
610
+ if add :
611
+ outFeat .setAttributeMap ( attrs )
612
+ writer .addFeature ( outFeat )
606
613
# there is no selection in input layer
607
614
else :
608
615
nFeat = vproviderA .featureCount ()
@@ -611,51 +618,58 @@ def dissolve( self, useField ):
611
618
self .emit ( SIGNAL ( "runRange(PyQt_PyObject)" ), ( 0 , nFeat ) )
612
619
first = True
613
620
while vproviderA .nextFeature ( inFeat ):
614
- nElement += 0.5
621
+ nElement += 1
615
622
self .emit ( SIGNAL ( "runStatus(PyQt_PyObject)" ), nElement )
616
623
if first :
617
624
attrs = inFeat .attributeMap ()
618
- inGeom = QgsGeometry ( inFeat .geometry () )
625
+ tmpInGeom = QgsGeometry ( inFeat .geometry () )
626
+ outFeat .setGeometry ( tmpInGeom )
619
627
first = False
620
628
else :
621
- tmp_geom = QgsGeometry ( inFeat .geometry () )
622
- geoms .append (tmp_geom )
623
- outGeom = QgsGeometry (inGeom .combineCascaded (geoms ))
624
- nElement += nFeat / 2
625
- self .emit ( SIGNAL ( "runStatus(PyQt_PyObject)" ), nElement )
626
- outFeat .setGeometry (outGeom )
627
- outFeat .setAttributeMap (attrs )
628
- writer .addFeature (outFeat )
629
+ tmpInGeom = QgsGeometry ( inFeat .geometry () )
630
+ tmpOutGeom = QgsGeometry ( outFeat .geometry () )
631
+ try :
632
+ tmpOutGeom = QgsGeometry ( tmpOutGeom .combine ( tmpInGeom ) )
633
+ outFeat .setGeometry ( tmpOutGeom )
634
+ except :
635
+ GEOS_EXCEPT = False
636
+ continue
637
+ outFeat .setAttributeMap ( attrs )
638
+ writer .addFeature ( outFeat )
629
639
else :
630
640
unique = vproviderA .uniqueValues ( int ( self .myParam ) )
631
641
nFeat = nFeat * len ( unique )
632
642
self .emit ( SIGNAL ( "runStatus(PyQt_PyObject)" ), 0 )
633
643
self .emit ( SIGNAL ( "runRange(PyQt_PyObject)" ), ( 0 , nFeat ) )
634
644
for item in unique :
635
- geoms = []
636
645
first = True
637
646
add = True
638
647
vproviderA .select ( allAttrsA )
639
648
vproviderA .rewind ()
640
649
while vproviderA .nextFeature ( inFeat ):
641
- nElement += 0.5
650
+ nElement += 1
642
651
self .emit ( SIGNAL ( "runStatus(PyQt_PyObject)" ), nElement )
643
652
atMap = inFeat .attributeMap ()
644
653
tempItem = atMap [ self .myParam ]
645
654
if tempItem .toString ().trimmed () == item .toString ().trimmed ():
646
655
if first :
647
- inGeom = QgsGeometry ( inFeat .geometry () )
656
+ QgsGeometry ( inFeat .geometry () )
657
+ tmpInGeom = QgsGeometry ( inFeat .geometry () )
658
+ outFeat .setGeometry ( tmpInGeom )
648
659
first = False
649
660
attrs = inFeat .attributeMap ()
650
661
else :
651
- tmp_geom = QgsGeometry ( inFeat .geometry () )
652
- geoms .append (tmp_geoms )
653
- outGeom = QgsGeometry (inGeom .combineCascaded (geoms ))
654
- nElement += nFeat / 2
655
- self .emit ( SIGNAL ( "runStatus(PyQt_PyObject)" ), nElement )
656
- outFeat .setGeometry (outGeom )
657
- outFeat .setAttributeMap (attrs )
658
- writer .addFeature (outFeat )
662
+ tmpInGeom = QgsGeometry ( inFeat .geometry () )
663
+ tmpOutGeom = QgsGeometry ( outFeat .geometry () )
664
+ try :
665
+ tmpOutGeom = QgsGeometry ( tmpOutGeom .combine ( tmpInGeom ) )
666
+ outFeat .setGeometry ( tmpOutGeom )
667
+ except :
668
+ GEOS_EXCEPT = False
669
+ add = False
670
+ if add :
671
+ outFeat .setAttributeMap ( attrs )
672
+ writer .addFeature ( outFeat )
659
673
del writer
660
674
return GEOS_EXCEPT , FEATURE_EXCEPT , True
661
675
0 commit comments