@@ -447,7 +447,10 @@ QgsOgrProvider::~QgsOgrProvider()
447
447
448
448
repack ();
449
449
450
- OGR_DS_Destroy ( ogrDataSource );
450
+ if ( ogrDataSource )
451
+ {
452
+ OGR_DS_Destroy ( ogrDataSource );
453
+ }
451
454
ogrDataSource = 0 ;
452
455
453
456
if ( extent_ )
@@ -548,7 +551,7 @@ QString QgsOgrProvider::subsetString()
548
551
QString QgsOgrProvider::ogrWkbGeometryTypeName ( OGRwkbGeometryType type ) const
549
552
{
550
553
QString geom;
551
- switch ( type )
554
+ switch ( ( int ) type )
552
555
{
553
556
case wkbUnknown: geom = " Unknown" ; break ;
554
557
case wkbPoint: geom = " Point" ; break ;
@@ -559,12 +562,14 @@ QString QgsOgrProvider::ogrWkbGeometryTypeName( OGRwkbGeometryType type ) const
559
562
case wkbMultiPolygon: geom = " MultiPolygon" ; break ;
560
563
case wkbGeometryCollection: geom = " GeometryCollection" ; break ;
561
564
case wkbNone: geom = " None" ; break ;
565
+ case wkbUnknown | wkb25DBit:geom = " Unknown25D" ; break ;
562
566
case wkbPoint25D: geom = " Point25D" ; break ;
563
567
case wkbLineString25D: geom = " LineString25D" ; break ;
564
568
case wkbPolygon25D: geom = " Polygon25D" ; break ;
565
569
case wkbMultiPoint25D: geom = " MultiPoint25D" ; break ;
566
570
case wkbMultiLineString25D: geom = " MultiLineString25D" ; break ;
567
571
case wkbMultiPolygon25D: geom = " MultiPolygon25D" ; break ;
572
+ case wkbGeometryCollection25D: geom = " GeometryCollection25D" ; break ;
568
573
default : geom = QString ( " Unknown WKB: %1" ).arg ( type );
569
574
}
570
575
return geom;
@@ -619,7 +624,7 @@ QStringList QgsOgrProvider::subLayers() const
619
624
620
625
QgsDebugMsg ( QString ( " id = %1 name = %2 layerGeomType = %3" ).arg ( i ).arg ( theLayerName ).arg ( layerGeomType ) );
621
626
622
- if ( layerGeomType != wkbUnknown )
627
+ if ( wkbFlatten ( layerGeomType) != wkbUnknown )
623
628
{
624
629
int theLayerFeatureCount = OGR_L_GetFeatureCount ( layer, 0 );
625
630
@@ -655,9 +660,10 @@ QStringList QgsOgrProvider::subLayers() const
655
660
{
656
661
fCount [wkbUnknown] = 0 ;
657
662
}
663
+ bool bIs25D = ( (layerGeomType & wkb25DBit) != 0 );
658
664
foreach ( OGRwkbGeometryType gType , fCount .keys () )
659
665
{
660
- QString geom = ogrWkbGeometryTypeName ( gType );
666
+ QString geom = ogrWkbGeometryTypeName ( (bIs25D) ? (OGRwkbGeometryType) ( gType | wkb25DBit) : gType );
661
667
662
668
QString sl = QString ( " %1:%2:%3:%4" ).arg ( i ).arg ( theLayerName ).arg ( fCount .value ( gType ) ).arg ( geom );
663
669
QgsDebugMsg ( " sub layer: " + sl );
0 commit comments