Skip to content

Commit 25e8ed7

Browse files
author
warmerdam
committed
improve error propagation for raster open errors (#1040)
git-svn-id: http://svn.osgeo.org/qgis/trunk@8694 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent adfe7b8 commit 25e8ed7

File tree

3 files changed

+29
-3
lines changed

3 files changed

+29
-3
lines changed

src/app/qgisapp.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -3126,6 +3126,7 @@ void QgisApp::openProject(const QString & fileName)
31263126
bool QgisApp::openLayer(const QString & fileName)
31273127
{
31283128
QFileInfo fileInfo(fileName);
3129+
31293130
// try to load it as raster
31303131
QgsMapLayer* ok = NULL;
31313132
CPLPushErrorHandler(CPLQuietErrorHandler);
@@ -5323,7 +5324,9 @@ bool QgisApp::addRasterLayers(QStringList const &theFileNameQStringList, bool gu
53235324
myIterator != theFileNameQStringList.end();
53245325
++myIterator)
53255326
{
5326-
if (QgsRasterLayer::isValidRasterFileName(*myIterator))
5327+
QString errMsg;
5328+
5329+
if (QgsRasterLayer::isValidRasterFileName(*myIterator,errMsg))
53275330
{
53285331
QFileInfo myFileInfo(*myIterator);
53295332
// get the directory the .adf file was in
@@ -5356,6 +5359,10 @@ bool QgisApp::addRasterLayers(QStringList const &theFileNameQStringList, bool gu
53565359
if(guiWarning)
53575360
{
53585361
QString msg(*myIterator + tr(" is not a supported raster data source"));
5362+
5363+
if( errMsg.size() > 0 )
5364+
msg += "\n" + errMsg;
5365+
53595366
QMessageBox::critical(this, tr("Unsupported Data Source"), msg);
53605367
}
53615368
returnValue = false;

src/core/raster/qgsrasterlayer.cpp

+15-1
Original file line numberDiff line numberDiff line change
@@ -255,22 +255,28 @@ void QgsRasterLayer::registerGdalDrivers()
255255

256256

257257
/** This helper checks to see whether the filename appears to be a valid raster file name */
258-
bool QgsRasterLayer::isValidRasterFileName(QString const & theFileNameQString)
258+
bool QgsRasterLayer::isValidRasterFileName(QString const & theFileNameQString,
259+
QString & retErrMsg )
259260
{
260261

261262
GDALDatasetH myDataset;
262263
registerGdalDrivers();
263264

265+
CPLErrorReset();
266+
264267
//open the file using gdal making sure we have handled locale properly
265268
myDataset = GDALOpen( QFile::encodeName(theFileNameQString).constData(), GA_ReadOnly );
266269
if( myDataset == NULL )
267270
{
271+
if( CPLGetLastErrorNo() != CPLE_OpenFailed )
272+
retErrMsg = CPLGetLastErrorMsg();
268273
return false;
269274
}
270275
else if( GDALGetRasterCount( myDataset ) == 0 )
271276
{
272277
GDALClose( myDataset );
273278
myDataset = NULL;
279+
retErrMsg = "This raster file has no bands and is invalid as a raster layer.";
274280
return false;
275281
}
276282
else
@@ -280,6 +286,14 @@ bool QgsRasterLayer::isValidRasterFileName(QString const & theFileNameQString)
280286
}
281287
}
282288

289+
bool QgsRasterLayer::isValidRasterFileName(QString const & theFileNameQString)
290+
291+
{
292+
QString retErrMsg;
293+
294+
return isValidRasterFileName( theFileNameQString, retErrMsg);
295+
}
296+
283297

284298
//////////////////////////////////////////////////////////
285299
//

src/core/raster/qgsrasterlayer.h

+6-1
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,12 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
189189
static void registerGdalDrivers();
190190

191191
/** This helper checks to see whether the filename appears to be a valid
192-
raster file name */
192+
raster file name. If the filename looks like it could be valid,
193+
but some sort of error occurs in processing the file, the error is
194+
returned in retError. */
195+
static bool isValidRasterFileName(const QString & theFileNameQString,
196+
QString &retError );
197+
193198
static bool isValidRasterFileName(const QString & theFileNameQString);
194199

195200
//

0 commit comments

Comments
 (0)