@@ -456,18 +456,22 @@ QString QgsOgrProvider::subsetString()
456
456
457
457
QStringList QgsOgrProvider::subLayers () const
458
458
{
459
- QStringList theList = QStringList ();
460
459
if ( !valid )
461
460
{
462
- return theList ;
461
+ return QStringList () ;
463
462
}
464
463
464
+ if ( !mSubLayerList .isEmpty () )
465
+ return mSubLayerList ;
466
+
465
467
for ( unsigned int i = 0 ; i < layerCount () ; i++ )
466
468
{
467
- QString theLayerName = FROM8 ( OGR_FD_GetName ( OGR_L_GetLayerDefn ( OGR_DS_GetLayer ( ogrDataSource, i ) ) ) );
468
- OGRwkbGeometryType layerGeomType = OGR_FD_GetGeomType ( OGR_L_GetLayerDefn ( OGR_DS_GetLayer ( ogrDataSource, i ) ) );
469
+ OGRLayerH layer = OGR_DS_GetLayer ( ogrDataSource, i );
470
+ OGRFeatureDefnH fdef = OGR_L_GetLayerDefn ( layer );
471
+ QString theLayerName = FROM8 ( OGR_FD_GetName ( fdef ) );
472
+ OGRwkbGeometryType layerGeomType = OGR_FD_GetGeomType ( fdef );
469
473
470
- int theLayerFeatureCount = OGR_L_GetFeatureCount ( OGR_DS_GetLayer ( ogrDataSource, i ), 1 ) ;
474
+ int theLayerFeatureCount = OGR_L_GetFeatureCount ( layer, 0 ) ;
471
475
472
476
QString geom;
473
477
switch ( layerGeomType )
@@ -486,11 +490,13 @@ QStringList QgsOgrProvider::subLayers() const
486
490
case wkbMultiPoint25D: geom = " MultiPoint25D" ; break ;
487
491
case wkbMultiLineString25D: geom = " MultiLineString25D" ; break ;
488
492
case wkbMultiPolygon25D: geom = " MultiPolygon25D" ; break ;
489
- default : geom= " Unknown WKB: " + QString::number ( layerGeomType );
493
+ default : geom = QString ( " Unknown WKB: %1 " ). arg ( layerGeomType );
490
494
}
491
- theList.append ( QString::number ( i ) + " :" + theLayerName + " :" + QString::number ( theLayerFeatureCount ) + " :" + geom );
495
+
496
+ mSubLayerList << QString ( " %1:%2:%3:%4" ).arg ( i ).arg ( theLayerName ).arg ( theLayerFeatureCount ).arg ( geom );
492
497
}
493
- return theList;
498
+
499
+ return mSubLayerList ;
494
500
}
495
501
496
502
void QgsOgrProvider::setEncoding ( const QString& e )
0 commit comments