@@ -561,31 +561,30 @@ void QgsVectorLayerUtils::matchAttributesToFields( QgsFeature &feature, const Qg
561561 }
562562}
563563
564- QgsFeatureList QgsVectorLayerUtils::makeFeaturesCompatible ( const QgsFeatureList &features , const QgsVectorLayer &layer )
564+ const QgsFeatureList QgsVectorLayerUtils::makeFeatureCompatible ( const QgsFeature &feature , const QgsVectorLayer &layer )
565565{
566566 QgsWkbTypes::Type inputWkbType ( layer.wkbType ( ) );
567567 QgsFeatureList resultFeatures;
568- for ( const QgsFeature &f : features )
568+ QgsFeature newF ( feature );
569+ // Fix attributes
570+ QgsVectorLayerUtils::matchAttributesToFields ( newF, layer.fields ( ) );
571+ // Does geometry need tranformations?
572+ QgsWkbTypes::GeometryType newFGeomType ( QgsWkbTypes::geometryType ( newF.geometry ().wkbType () ) );
573+ bool newFHasGeom = newFGeomType !=
574+ QgsWkbTypes::GeometryType::UnknownGeometry &&
575+ newFGeomType != QgsWkbTypes::GeometryType::NullGeometry;
576+ bool layerHasGeom = inputWkbType !=
577+ QgsWkbTypes::Type::NoGeometry &&
578+ inputWkbType != QgsWkbTypes::Type::Unknown;
579+ // Drop geometry if layer is geometry-less
580+ if ( newFHasGeom && ! layerHasGeom )
581+ {
582+ QgsFeature _f = QgsFeature ( layer.fields () );
583+ _f.setAttributes ( newF.attributes () );
584+ resultFeatures.append ( _f );
585+ }
586+ else
569587 {
570- QgsFeature newF ( f );
571- // Fix attributes
572- QgsVectorLayerUtils::matchAttributesToFields ( newF, layer.fields ( ) );
573- // Does geometry need tranformations?
574- QgsWkbTypes::GeometryType newFGeomType ( QgsWkbTypes::geometryType ( newF.geometry ().wkbType () ) );
575- bool newFHasGeom = newFGeomType !=
576- QgsWkbTypes::GeometryType::UnknownGeometry &&
577- newFGeomType != QgsWkbTypes::GeometryType::NullGeometry;
578- bool layerHasGeom = inputWkbType !=
579- QgsWkbTypes::Type::NoGeometry &&
580- inputWkbType != QgsWkbTypes::Type::Unknown;
581- // Drop geometry if layer is geometry-less
582- if ( newFHasGeom && ! layerHasGeom )
583- {
584- QgsFeature _f = QgsFeature ( layer.fields () );
585- _f.setAttributes ( newF.attributes () );
586- resultFeatures.append ( _f );
587- continue ; // Skip the rest
588- }
589588 // Geometry need fixing
590589 if ( newFHasGeom && layerHasGeom && newF.geometry ().wkbType () != inputWkbType )
591590 {
@@ -627,15 +626,15 @@ QgsFeatureList QgsVectorLayerUtils::makeFeaturesCompatible( const QgsFeatureList
627626 {
628627 QgsGeometry newGeom ( newF.geometry ( ) );
629628 const QgsGeometryCollection *parts ( static_cast < const QgsGeometryCollection * >( newGeom.constGet () ) );
629+ QgsAttributeMap attrMap;
630+ for ( int j = 0 ; j < newF.fields ().count (); j++ )
631+ {
632+ attrMap[j] = newF.attribute ( j );
633+ }
630634 for ( int i = 0 ; i < parts->partCount ( ); i++ )
631635 {
632636 QgsGeometry g ( parts->geometryN ( i )->clone () );
633- QgsAttributeMap attrMap;
634- for ( int j = 0 ; j < newF.fields ().count (); j++ )
635- {
636- attrMap[j] = newF.attribute ( j );
637- }
638- QgsFeature _f ( QgsVectorLayerUtils::createFeature ( &layer, g, attrMap ) );
637+ QgsFeature _f ( createFeature ( &layer, g, attrMap ) );
639638 resultFeatures.append ( _f );
640639 }
641640 }
@@ -649,7 +648,20 @@ QgsFeatureList QgsVectorLayerUtils::makeFeaturesCompatible( const QgsFeatureList
649648 resultFeatures.append ( newF );
650649 }
651650 }
652- return resultFeatures;
651+ return resultFeatures;
652+ }
653+
654+ const QgsFeatureList QgsVectorLayerUtils::makeFeaturesCompatible ( const QgsFeatureList &features, const QgsVectorLayer &layer )
655+ {
656+ QgsFeatureList resultFeatures;
657+ for ( const QgsFeature &f : features )
658+ {
659+ for ( const auto &_f : makeFeatureCompatible ( f, layer ) )
660+ {
661+ resultFeatures.append ( _f );
662+ }
663+ }
664+ return resultFeatures;
653665}
654666
655667QList<QgsVectorLayer *> QgsVectorLayerUtils::QgsDuplicateFeatureContext::layers () const
0 commit comments