Skip to content

Commit cfe6270

Browse files
committed
Merge pull request #1458 from rouault/ogr_unknown25d
OGR provider: deal with wkbUnknown25D (wkbUnknown | wkb25DBit)
2 parents 2c12a0d + aeed122 commit cfe6270

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

src/providers/ogr/qgsogrfeatureiterator.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ QgsOgrFeatureSource::QgsOgrFeatureSource( const QgsOgrProvider* p )
337337
mSubsetString = p->mSubsetString;
338338
mEncoding = p->mEncoding; // no copying - this is a borrowed pointer from Qt
339339
mFields = p->mAttributeFields;
340-
mOgrGeometryTypeFilter = p->mOgrGeometryTypeFilter;
340+
mOgrGeometryTypeFilter = wkbFlatten(p->mOgrGeometryTypeFilter);
341341
}
342342

343343
QgsFeatureIterator QgsOgrFeatureSource::getFeatures( const QgsFeatureRequest& request )

src/providers/ogr/qgsogrprovider.cpp

+10-4
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,10 @@ QgsOgrProvider::~QgsOgrProvider()
447447

448448
repack();
449449

450-
OGR_DS_Destroy( ogrDataSource );
450+
if( ogrDataSource )
451+
{
452+
OGR_DS_Destroy( ogrDataSource );
453+
}
451454
ogrDataSource = 0;
452455

453456
if ( extent_ )
@@ -548,7 +551,7 @@ QString QgsOgrProvider::subsetString()
548551
QString QgsOgrProvider::ogrWkbGeometryTypeName( OGRwkbGeometryType type ) const
549552
{
550553
QString geom;
551-
switch ( type )
554+
switch ( (int)type )
552555
{
553556
case wkbUnknown: geom = "Unknown"; break;
554557
case wkbPoint: geom = "Point"; break;
@@ -559,12 +562,14 @@ QString QgsOgrProvider::ogrWkbGeometryTypeName( OGRwkbGeometryType type ) const
559562
case wkbMultiPolygon: geom = "MultiPolygon"; break;
560563
case wkbGeometryCollection: geom = "GeometryCollection"; break;
561564
case wkbNone: geom = "None"; break;
565+
case wkbUnknown | wkb25DBit:geom = "Unknown25D"; break;
562566
case wkbPoint25D: geom = "Point25D"; break;
563567
case wkbLineString25D: geom = "LineString25D"; break;
564568
case wkbPolygon25D: geom = "Polygon25D"; break;
565569
case wkbMultiPoint25D: geom = "MultiPoint25D"; break;
566570
case wkbMultiLineString25D: geom = "MultiLineString25D"; break;
567571
case wkbMultiPolygon25D: geom = "MultiPolygon25D"; break;
572+
case wkbGeometryCollection25D: geom = "GeometryCollection25D"; break;
568573
default: geom = QString( "Unknown WKB: %1" ).arg( type );
569574
}
570575
return geom;
@@ -619,7 +624,7 @@ QStringList QgsOgrProvider::subLayers() const
619624

620625
QgsDebugMsg( QString( "id = %1 name = %2 layerGeomType = %3" ).arg( i ).arg( theLayerName ).arg( layerGeomType ) );
621626

622-
if ( layerGeomType != wkbUnknown )
627+
if ( wkbFlatten(layerGeomType) != wkbUnknown )
623628
{
624629
int theLayerFeatureCount = OGR_L_GetFeatureCount( layer, 0 );
625630

@@ -655,9 +660,10 @@ QStringList QgsOgrProvider::subLayers() const
655660
{
656661
fCount[wkbUnknown] = 0;
657662
}
663+
bool bIs25D = ( (layerGeomType & wkb25DBit) != 0 );
658664
foreach ( OGRwkbGeometryType gType, fCount.keys() )
659665
{
660-
QString geom = ogrWkbGeometryTypeName( gType );
666+
QString geom = ogrWkbGeometryTypeName( (bIs25D) ? (OGRwkbGeometryType) (gType | wkb25DBit) : gType );
661667

662668
QString sl = QString( "%1:%2:%3:%4" ).arg( i ).arg( theLayerName ).arg( fCount.value( gType ) ).arg( geom );
663669
QgsDebugMsg( "sub layer: " + sl );

0 commit comments

Comments
 (0)