mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-25 00:58:06 -05:00
Move some common code to QgsGdalUtils
This commit is contained in:
parent
0dfd561e4a
commit
36aa9f3109
@ -3602,17 +3602,9 @@ QList<QgsProviderSublayerDetails> QgsGdalProviderMetadata::querySublayers( const
|
||||
}
|
||||
|
||||
// if this is a VRT file make sure it is raster VRT
|
||||
if ( suffix == QLatin1String( "vrt" ) )
|
||||
if ( suffix == QLatin1String( "vrt" ) && !QgsGdalUtils::vrtMatchesLayerType( path, QgsMapLayerType::RasterLayer ) )
|
||||
{
|
||||
CPLPushErrorHandler( CPLQuietErrorHandler );
|
||||
CPLErrorReset();
|
||||
GDALDriverH hDriver = GDALIdentifyDriverEx( path.toUtf8().constData(), GDAL_OF_RASTER, nullptr, nullptr );
|
||||
CPLPopErrorHandler();
|
||||
if ( !hDriver )
|
||||
{
|
||||
// vrt is not a raster vrt, skip it
|
||||
return {};
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
QgsProviderSublayerDetails details;
|
||||
|
@ -1138,17 +1138,9 @@ QList<QgsProviderSublayerDetails> QgsOgrProviderMetadata::querySublayers( const
|
||||
if ( !QgsGdalUtils::INEXPENSIVE_TO_SCAN_EXTENSIONS.contains( suffix ) )
|
||||
{
|
||||
// if this is a VRT file make sure it is vector VRT
|
||||
if ( suffix == QLatin1String( "vrt" ) )
|
||||
if ( suffix == QLatin1String( "vrt" ) && !QgsGdalUtils::vrtMatchesLayerType( path, QgsMapLayerType::VectorLayer ) )
|
||||
{
|
||||
CPLPushErrorHandler( CPLQuietErrorHandler );
|
||||
CPLErrorReset();
|
||||
GDALDriverH hDriver = GDALIdentifyDriverEx( path.toUtf8().constData(), GDAL_OF_VECTOR, nullptr, nullptr );
|
||||
CPLPopErrorHandler();
|
||||
if ( !hDriver )
|
||||
{
|
||||
// vrt is not a vector vrt, skip it
|
||||
return {};
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
QgsProviderSublayerDetails details;
|
||||
|
@ -568,4 +568,32 @@ bool QgsGdalUtils::pathIsCheapToOpen( const QString &path, int smallFileSizeLimi
|
||||
// TODO -- flag formats which only require a quick header parse as cheap
|
||||
return false;
|
||||
}
|
||||
|
||||
bool QgsGdalUtils::vrtMatchesLayerType( const QString &vrtPath, QgsMapLayerType type )
|
||||
{
|
||||
CPLPushErrorHandler( CPLQuietErrorHandler );
|
||||
CPLErrorReset();
|
||||
GDALDriverH hDriver = nullptr;
|
||||
|
||||
switch ( type )
|
||||
{
|
||||
case QgsMapLayerType::VectorLayer:
|
||||
hDriver = GDALIdentifyDriverEx( vrtPath.toUtf8().constData(), GDAL_OF_VECTOR, nullptr, nullptr );
|
||||
break;
|
||||
|
||||
case QgsMapLayerType::RasterLayer:
|
||||
hDriver = GDALIdentifyDriverEx( vrtPath.toUtf8().constData(), GDAL_OF_RASTER, nullptr, nullptr );
|
||||
break;
|
||||
|
||||
case QgsMapLayerType::PluginLayer:
|
||||
case QgsMapLayerType::MeshLayer:
|
||||
case QgsMapLayerType::VectorTileLayer:
|
||||
case QgsMapLayerType::AnnotationLayer:
|
||||
case QgsMapLayerType::PointCloudLayer:
|
||||
break;
|
||||
}
|
||||
|
||||
CPLPopErrorHandler();
|
||||
return static_cast< bool >( hDriver );
|
||||
}
|
||||
#endif
|
||||
|
@ -156,6 +156,14 @@ class CORE_EXPORT QgsGdalUtils
|
||||
*/
|
||||
static const QStringList SUPPORTED_DB_LAYERS_EXTENSIONS;
|
||||
|
||||
/**
|
||||
* Returns TRUE if the VRT file at the specified path is a VRT matching
|
||||
* the given layer \a type.
|
||||
*
|
||||
* \since QGIS 3.22
|
||||
*/
|
||||
static bool vrtMatchesLayerType( const QString &vrtPath, QgsMapLayerType type );
|
||||
|
||||
friend class TestQgsGdalUtils;
|
||||
};
|
||||
|
||||
|
@ -42,6 +42,7 @@ class TestQgsGdalUtils: public QObject
|
||||
void testImageToDataset();
|
||||
void testResampleImageToImage();
|
||||
void testPathIsCheapToOpen();
|
||||
void testVrtMatchesLayerType();
|
||||
|
||||
private:
|
||||
|
||||
@ -284,6 +285,15 @@ void TestQgsGdalUtils::testPathIsCheapToOpen()
|
||||
QVERIFY( !QgsGdalUtils::pathIsCheapToOpen( QStringLiteral( TEST_DATA_DIR ) + "/delimitedtext/testdms.csv", 500 ) );
|
||||
}
|
||||
|
||||
void TestQgsGdalUtils::testVrtMatchesLayerType()
|
||||
{
|
||||
QVERIFY( QgsGdalUtils::vrtMatchesLayerType( QStringLiteral( TEST_DATA_DIR ) + "/raster/hub13263.vrt", QgsMapLayerType::RasterLayer ) );
|
||||
QVERIFY( !QgsGdalUtils::vrtMatchesLayerType( QStringLiteral( TEST_DATA_DIR ) + "/raster/hub13263.vrt", QgsMapLayerType::VectorLayer ) );
|
||||
|
||||
QVERIFY( !QgsGdalUtils::vrtMatchesLayerType( QStringLiteral( TEST_DATA_DIR ) + "/vector_vrt.vrt", QgsMapLayerType::RasterLayer ) );
|
||||
QVERIFY( QgsGdalUtils::vrtMatchesLayerType( QStringLiteral( TEST_DATA_DIR ) + "/vector_vrt.vrt", QgsMapLayerType::VectorLayer ) );
|
||||
}
|
||||
|
||||
double TestQgsGdalUtils::identify( GDALDatasetH dataset, int band, int px, int py )
|
||||
{
|
||||
GDALRasterBandH hBand = GDALGetRasterBand( dataset, band );
|
||||
|
Loading…
x
Reference in New Issue
Block a user