Skip to content

Commit 5b149fb

Browse files
committed
[ogr] return multipart geometry for multipart datasets in feature iterator
1 parent 1aa0091 commit 5b149fb

2 files changed

Lines changed: 12 additions & 1 deletion

File tree

src/providers/ogr/qgsogrfeatureiterator.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "qgsmessagelog.h"
2626
#include "qgssettings.h"
2727
#include "qgsexception.h"
28+
#include "qgswkbtypes.h"
2829

2930
#include <QTextCodec>
3031
#include <QFile>
@@ -334,7 +335,15 @@ bool QgsOgrFeatureIterator::readFeature( OGRFeatureH fet, QgsFeature &feature )
334335

335336
if ( geom )
336337
{
337-
feature.setGeometry( QgsOgrUtils::ogrGeometryToQgsGeometry( geom ) );
338+
QgsGeometry g = QgsOgrUtils::ogrGeometryToQgsGeometry( geom );
339+
340+
// Insure that multipart datasets return multipart geometry
341+
if ( QgsWkbTypes::isMultiType( mSource->mWkbType ) && !g.isMultipart() )
342+
{
343+
g.convertToMultiType();
344+
}
345+
346+
feature.setGeometry( g );
338347
}
339348
else
340349
feature.clearGeometry();
@@ -390,6 +399,7 @@ QgsOgrFeatureSource::QgsOgrFeatureSource( const QgsOgrProvider *p )
390399
, mOgrGeometryTypeFilter( QgsOgrProvider::ogrWkbSingleFlatten( p->mOgrGeometryTypeFilter ) )
391400
, mDriverName( p->ogrDriverName )
392401
, mCrs( p->crs() )
402+
, mWkbType( p->wkbType() )
393403
{
394404
for ( int i = ( p->mFirstFieldIsFid ) ? 1 : 0; i < mFields.size(); i++ )
395405
mFieldsWithoutFid.append( mFields.at( i ) );

src/providers/ogr/qgsogrfeatureiterator.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class QgsOgrFeatureSource : public QgsAbstractFeatureSource
4444
OGRwkbGeometryType mOgrGeometryTypeFilter;
4545
QString mDriverName;
4646
QgsCoordinateReferenceSystem mCrs;
47+
QgsWkbTypes::Type mWkbType = QgsWkbTypes::Unknown;
4748

4849
friend class QgsOgrFeatureIterator;
4950
friend class QgsOgrExpressionCompiler;

0 commit comments

Comments
 (0)