@@ -117,7 +117,7 @@ QgsGdalProvider::QgsGdalProvider( const QString &uri, const QgsError &error )
117
117
setError ( error );
118
118
}
119
119
120
- QgsGdalProvider::QgsGdalProvider ( const QString &uri, bool update )
120
+ QgsGdalProvider::QgsGdalProvider ( const QString &uri, bool update, GDALDatasetH dataset )
121
121
: QgsRasterDataProvider( uri )
122
122
, mUpdate( update )
123
123
{
@@ -156,29 +156,35 @@ QgsGdalProvider::QgsGdalProvider( const QString &uri, bool update )
156
156
}
157
157
158
158
mGdalDataset = nullptr ;
159
-
160
- // Try to open using VSIFileHandler (see qgsogrprovider.cpp)
161
- QString vsiPrefix = QgsZipItem::vsiPrefix ( uri );
162
- if ( !vsiPrefix.isEmpty () )
159
+ if ( dataset )
163
160
{
164
- if ( !uri.startsWith ( vsiPrefix ) )
165
- setDataSourceUri ( vsiPrefix + uri );
166
- QgsDebugMsg ( QString ( " Trying %1 syntax, uri= %2" ).arg ( vsiPrefix, dataSourceUri () ) );
161
+ mGdalBaseDataset = dataset;
167
162
}
163
+ else
164
+ {
165
+ // Try to open using VSIFileHandler (see qgsogrprovider.cpp)
166
+ QString vsiPrefix = QgsZipItem::vsiPrefix ( uri );
167
+ if ( !vsiPrefix.isEmpty () )
168
+ {
169
+ if ( !uri.startsWith ( vsiPrefix ) )
170
+ setDataSourceUri ( vsiPrefix + uri );
171
+ QgsDebugMsg ( QString ( " Trying %1 syntax, uri= %2" ).arg ( vsiPrefix, dataSourceUri () ) );
172
+ }
168
173
169
- QString gdalUri = dataSourceUri ();
174
+ QString gdalUri = dataSourceUri ();
170
175
171
- CPLErrorReset ();
172
- mGdalBaseDataset = gdalOpen ( gdalUri.toUtf8 ().constData (), mUpdate ? GA_Update : GA_ReadOnly );
176
+ CPLErrorReset ();
177
+ mGdalBaseDataset = gdalOpen ( gdalUri.toUtf8 ().constData (), mUpdate ? GA_Update : GA_ReadOnly );
173
178
174
- if ( !mGdalBaseDataset )
175
- {
176
- QString msg = QStringLiteral ( " Cannot open GDAL dataset %1:\n %2" ).arg ( dataSourceUri (), QString::fromUtf8 ( CPLGetLastErrorMsg () ) );
177
- appendError ( ERRMSG ( msg ) );
178
- return ;
179
- }
179
+ if ( !mGdalBaseDataset )
180
+ {
181
+ QString msg = QStringLiteral ( " Cannot open GDAL dataset %1:\n %2" ).arg ( dataSourceUri (), QString::fromUtf8 ( CPLGetLastErrorMsg () ) );
182
+ appendError ( ERRMSG ( msg ) );
183
+ return ;
184
+ }
180
185
181
- QgsDebugMsg ( " GdalDataset opened" );
186
+ QgsDebugMsg ( " GdalDataset opened" );
187
+ }
182
188
initBaseDataset ();
183
189
}
184
190
@@ -2726,7 +2732,7 @@ QGISEXTERN QgsGdalProvider *create(
2726
2732
// create dataset
2727
2733
CPLErrorReset ();
2728
2734
char **papszOptions = papszFromStringList ( createOptions );
2729
- gdal::dataset_unique_ptr dataset ( GDALCreate ( driver, uri.toUtf8 ().constData (), width, height, nBands, ( GDALDataType )type, papszOptions ) );
2735
+ GDALDatasetH dataset = GDALCreate ( driver, uri.toUtf8 ().constData (), width, height, nBands, ( GDALDataType )type, papszOptions );
2730
2736
CSLDestroy ( papszOptions );
2731
2737
if ( !dataset )
2732
2738
{
@@ -2735,11 +2741,10 @@ QGISEXTERN QgsGdalProvider *create(
2735
2741
return new QgsGdalProvider ( uri, error );
2736
2742
}
2737
2743
2738
- GDALSetGeoTransform ( dataset.get (), geoTransform );
2739
- GDALSetProjection ( dataset.get (), crs.toWkt ().toLocal8Bit ().data () );
2740
- dataset.reset ();
2744
+ GDALSetGeoTransform ( dataset, geoTransform );
2745
+ GDALSetProjection ( dataset, crs.toWkt ().toLocal8Bit ().data () );
2741
2746
2742
- return new QgsGdalProvider ( uri, true );
2747
+ return new QgsGdalProvider ( uri, true , dataset );
2743
2748
}
2744
2749
2745
2750
bool QgsGdalProvider::write ( void *data, int band, int width, int height, int xOffset, int yOffset )
0 commit comments