@@ -4297,3 +4297,76 @@ QGISEXTERN void cleanupProvider()
42974297 // NOTE: QgsApplication takes care of
42984298 // calling OGRCleanupAll();
42994299}
4300+
4301+
4302+
4303+ QGISEXTERN bool deleteLayer ( const QString &uri, QString &errCause )
4304+ {
4305+ bool isSubLayer;
4306+ int layerIndex;
4307+ QString layerName;
4308+ QString subsetString;
4309+ OGRwkbGeometryType ogrGeometryType;
4310+ QString filePath = AnalyzeURI ( uri,
4311+ isSubLayer,
4312+ layerIndex,
4313+ layerName,
4314+ subsetString,
4315+ ogrGeometryType );
4316+
4317+ OGRDataSourceH hDS = GDALOpenEx ( filePath.toLocal8Bit ().data (), GDAL_OF_RASTER | GDAL_OF_VECTOR | GDAL_OF_UPDATE, NULL , NULL , NULL );
4318+ if ( hDS && ( ! layerName.isEmpty () || layerIndex != -1 ) )
4319+ {
4320+ if ( layerIndex == -1 )
4321+ {
4322+ for ( int i = 0 ; i < GDALDatasetGetLayerCount ( hDS ); i++ )
4323+ {
4324+ OGRLayerH hL = GDALDatasetGetLayer ( hDS, i );
4325+ if ( layerName == QString ( OGR_L_GetName ( hL ) ) )
4326+ {
4327+ layerIndex = i;
4328+ }
4329+ }
4330+ }
4331+ OGRErr error = GDALDatasetDeleteLayer ( hDS, layerIndex );
4332+ switch ( error )
4333+ {
4334+ case OGRERR_NOT_ENOUGH_DATA:
4335+ errCause = QStringLiteral ( " Not enough data to deserialize" );
4336+ break ;
4337+ case OGRERR_NOT_ENOUGH_MEMORY:
4338+ errCause = QStringLiteral ( " Not enough memory" );
4339+ break ;
4340+ case OGRERR_UNSUPPORTED_GEOMETRY_TYPE:
4341+ errCause = QStringLiteral ( " Unsupported geometry type" );
4342+ break ;
4343+ case OGRERR_UNSUPPORTED_OPERATION:
4344+ errCause = QStringLiteral ( " Unsupported operation" );
4345+ break ;
4346+ case OGRERR_CORRUPT_DATA:
4347+ errCause = QStringLiteral ( " Corrupt data" );
4348+ break ;
4349+ case OGRERR_FAILURE:
4350+ errCause = QStringLiteral ( " Failure" );
4351+ break ;
4352+ case OGRERR_UNSUPPORTED_SRS:
4353+ errCause = QStringLiteral ( " Unsupported SRS" );
4354+ break ;
4355+ case OGRERR_INVALID_HANDLE:
4356+ errCause = QStringLiteral ( " Invalid handle" );
4357+ break ;
4358+ case OGRERR_NON_EXISTING_FEATURE:
4359+ errCause = QStringLiteral ( " Non existing feature" );
4360+ break ;
4361+ default :
4362+ case OGRERR_NONE:
4363+ errCause = QStringLiteral ( " Success" );
4364+ break ;
4365+ }
4366+ errCause = QStringLiteral ( " OGR result code: %s" ).arg ( errCause );
4367+ return error == OGRERR_NONE;
4368+ }
4369+ // This should never happen:
4370+ errCause = QStringLiteral ( " Layer not found: %s" ).arg ( uri );
4371+ return false ;
4372+ }
0 commit comments