mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-15 00:04:00 -04:00
Add method to retrieve corresponding OGR driver from a file extension
This commit is contained in:
parent
75fa28f5f3
commit
ce4f93b410
@ -365,6 +365,8 @@ class QgsVectorFileWriter : QgsFeatureSink
|
||||
*/
|
||||
static QMap< QString, QString> ogrDriverList();
|
||||
|
||||
static QString driverForExtension( const QString &extension );
|
||||
|
||||
/** Returns filter string that can be used for dialogs*/
|
||||
static QString fileFilterString();
|
||||
|
||||
|
@ -2744,6 +2744,34 @@ QMap<QString, QString> QgsVectorFileWriter::ogrDriverList()
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
QString QgsVectorFileWriter::driverForExtension( const QString &extension )
|
||||
{
|
||||
QString ext = extension.trimmed();
|
||||
if ( ext.isEmpty() )
|
||||
return QString();
|
||||
QgsApplication::registerOgrDrivers();
|
||||
int const drvCount = OGRGetDriverCount();
|
||||
|
||||
for ( int i = 0; i < drvCount; ++i )
|
||||
{
|
||||
OGRSFDriverH drv = OGRGetDriver( i );
|
||||
if ( drv )
|
||||
{
|
||||
QString drvName = OGR_Dr_GetName( drv );
|
||||
if ( OGR_Dr_TestCapability( drv, "CreateDataSource" ) != 0 )
|
||||
{
|
||||
MetaData metadata;
|
||||
if ( driverMetadata( drvName, metadata ) )
|
||||
{
|
||||
if ( metadata.glob.contains( ext, Qt::CaseInsensitive ) )
|
||||
return drvName;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return QString();
|
||||
}
|
||||
|
||||
QString QgsVectorFileWriter::fileFilterString()
|
||||
{
|
||||
QString filterString;
|
||||
|
@ -482,6 +482,14 @@ class CORE_EXPORT QgsVectorFileWriter : public QgsFeatureSink
|
||||
*/
|
||||
static QMap< QString, QString> ogrDriverList();
|
||||
|
||||
/**
|
||||
* Returns the OGR driver name for a specified file \a extension. E.g. the
|
||||
* driver name for the ".shp" extension is "ESRI Shapefile".
|
||||
* If no suitable drivers are found then an empty string is returned.
|
||||
* \since QGIS 3.0
|
||||
*/
|
||||
static QString driverForExtension( const QString &extension );
|
||||
|
||||
//! Returns filter string that can be used for dialogs
|
||||
static QString fileFilterString();
|
||||
|
||||
|
@ -722,6 +722,16 @@ class TestQgsVectorFileWriter(unittest.TestCase):
|
||||
self.assertFalse('exe' in formats)
|
||||
self.assertEqual(formats[0], 'shp')
|
||||
|
||||
def testDriverForExtension(self):
|
||||
self.assertEqual(QgsVectorFileWriter.driverForExtension('shp'), 'ESRI Shapefile')
|
||||
self.assertEqual(QgsVectorFileWriter.driverForExtension('SHP'), 'ESRI Shapefile')
|
||||
self.assertEqual(QgsVectorFileWriter.driverForExtension('sHp'), 'ESRI Shapefile')
|
||||
self.assertEqual(QgsVectorFileWriter.driverForExtension('.shp'), 'ESRI Shapefile')
|
||||
self.assertEqual(QgsVectorFileWriter.driverForExtension('tab'), 'MapInfo File')
|
||||
self.assertEqual(QgsVectorFileWriter.driverForExtension('.GML'), 'GML')
|
||||
self.assertEqual(QgsVectorFileWriter.driverForExtension('not a format'), '')
|
||||
self.assertEqual(QgsVectorFileWriter.driverForExtension(''), '')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
Loading…
x
Reference in New Issue
Block a user