Skip to content

Commit

Permalink
Backport and enhance fix export raster as GPKG
Browse files Browse the repository at this point in the history
Now checks the existence of a vector file with same
name, this should also fix the original issue.

- With test
- Requires forward port
  • Loading branch information
elpaso committed May 29, 2019
1 parent 8006979 commit e2c6f71
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 12 deletions.
20 changes: 15 additions & 5 deletions src/gui/qgsrasterlayersaveasdialog.cpp
Expand Up @@ -910,18 +910,28 @@ bool QgsRasterLayerSaveAsDialog::validate() const

bool QgsRasterLayerSaveAsDialog::outputLayerExists() const
{
QString uri;
QString vectorUri;
QString rasterUri;
if ( outputFormat() == QStringLiteral( "GPKG" ) )
{
uri = QStringLiteral( "GPKG:%1:%2" ).arg( outputFileName(), outputLayerName() );
rasterUri = QStringLiteral( "GPKG:%1:%2" ).arg( outputFileName(), outputLayerName() );
vectorUri = QStringLiteral( "%1|layername=%2" ).arg( outputFileName(), outputLayerName() );
}
else
{
uri = outputFileName();
rasterUri = outputFileName();
}

QgsRasterLayer rastLayer( uri, QString( ), QStringLiteral( "gdal" ) );
return rastLayer.isValid();
QgsRasterLayer rasterLayer( rasterUri, QString( ), QStringLiteral( "gdal" ) );
if ( !vectorUri.isEmpty() )
{
QgsVectorLayer vectorLayer( vectorUri, QString( ), QStringLiteral( "ogr" ) );
return rasterLayer.isValid() || vectorLayer.isValid();
}
else
{
return rasterLayer.isValid();
}
}

void QgsRasterLayerSaveAsDialog::accept()
Expand Down
2 changes: 1 addition & 1 deletion tests/src/gui/CMakeLists.txt
Expand Up @@ -145,7 +145,7 @@ ADD_QGIS_TEST(filedownloader testqgsfiledownloader.cpp)
ADD_QGIS_TEST(layoutgui testqgslayoutgui.cpp)
ADD_QGIS_TEST(layoutview testqgslayoutview.cpp)
ADD_QGIS_TEST(valuemapwidgetwrapper testqgsvaluemapwidgetwrapper.cpp)
ADD_QGIS_TEST(rasterlayersavesdialog testqgsrasterlayersavesdialog.cpp)
ADD_QGIS_TEST(rasterlayersaveasdialog testqgsrasterlayersaveasdialog.cpp)
ADD_QGIS_TEST(valuerelationwidgetwrapper testqgsvaluerelationwidgetwrapper.cpp)
ADD_QGIS_TEST(relationreferencewidget testqgsrelationreferencewidget.cpp)
ADD_QGIS_TEST(featurelistcombobox testqgsfeaturelistcombobox.cpp)
@@ -1,5 +1,5 @@
/***************************************************************************
testqgsrasterlayersavesdialog.cpp
testqgsrasterlayersaveasdialog.cpp
--------------------------------------
Date : May 2019
Copyright : (C) 2019 Alessandro Pasotti
Expand Down Expand Up @@ -92,11 +92,20 @@ void TestQgsRasterLayerSaveAsDialog::outputLayerExists()
fileWriter.setPyramidsResampling( d.pyramidsResamplingMethod() );
fileWriter.setPyramidsFormat( d.pyramidsFormat() );
fileWriter.setPyramidsConfigOptions( d.pyramidsConfigOptions() );
fileWriter.writeRaster( &pipe, 10, 10, rl.extent(), rl.crs(), rl.transformContext() );
fileWriter.writeRaster( &pipe, 10, 10, rl.extent(), rl.crs() );
{
QVERIFY( QgsRasterLayer( rasterUri, QStringLiteral( "my_raster2" ) ).isValid() );
}
QVERIFY( d.outputLayerExists() );
// Now try to save with the same name of the existing vector layer
d.mLayerName->setText( QStringLiteral( "test_vector_layer" ) );
QVERIFY( d.outputLayerExists() );
auto fileWriter2 { QgsRasterFileWriter( d.outputFileName() ) };
fileWriter2.writeRaster( &pipe, 10, 10, rl.extent(), rl.crs() );
{
auto rasterUri2 { QStringLiteral( "GPKG:%1:%2" ).arg( d.outputFileName() ).arg( d.outputLayerName() ) };
QVERIFY( ! QgsRasterLayer( rasterUri2, QStringLiteral( "my_raster2" ) ).isValid() );
}
}

QString TestQgsRasterLayerSaveAsDialog::prepareDb()
Expand All @@ -106,7 +115,7 @@ QString TestQgsRasterLayerSaveAsDialog::prepareDb()
tmpFile.setAutoRemove( false );
tmpFile.open();
QString fileName( tmpFile.fileName( ) );
QgsVectorLayer vl( QStringLiteral( "Point?field=firstfield:string(1024)" ), "test_layer", "memory" );
QgsVectorLayer vl( QStringLiteral( "Point?field=firstfield:string(1024)" ), "test_vector_layer", "memory" );
QgsVectorFileWriter w( fileName,
QStringLiteral( "UTF-8" ),
vl.fields(),
Expand All @@ -119,18 +128,18 @@ QString TestQgsRasterLayerSaveAsDialog::prepareDb()
vl.addFeature( f );
QgsVectorFileWriter::SaveVectorOptions options;
options.driverName = QStringLiteral( "GPKG" );
options.layerName = QStringLiteral( "test_layer" );
options.layerName = QStringLiteral( "test_vector_layer" );
QString errorMessage;
QgsVectorFileWriter::writeAsVectorFormat(
&vl,
fileName,
options,
&errorMessage );
QgsVectorLayer vl2( QStringLiteral( "%1|layername=test_layer" ).arg( fileName ), "src_test", "ogr" );
QgsVectorLayer vl2( QStringLiteral( "%1|layername=test_vector_layer" ).arg( fileName ), "test_vector_layer", "ogr" );
Q_ASSERT( vl2.isValid() );
return tmpFile.fileName( );
}

QGSTEST_MAIN( TestQgsRasterLayerSaveAsDialog )

#include "testqgsrasterlayersavesdialog.moc"
#include "testqgsrasterlayersaveasdialog.moc"

0 comments on commit e2c6f71

Please sign in to comment.