Merge pull request #2517 from rldhont/raster_open_adf

Open adf raster file as a directory
This commit is contained in:
rldhont 2015-12-07 18:17:39 +01:00
commit 6035d98b4a

View File

@ -4597,7 +4597,14 @@ bool QgisApp::openLayer( const QString & fileName, bool allowInteractive )
// try to load it as raster // try to load it as raster
if ( QgsRasterLayer::isValidRasterFileName( fileName ) ) if ( QgsRasterLayer::isValidRasterFileName( fileName ) )
{ {
ok = addRasterLayer( fileName, fileInfo.completeBaseName() ); // open .adf as a directory
if ( fileName.toLower().endsWith( ".adf" ) )
{
QString dirName = fileInfo.path();
ok = addRasterLayer( dirName, QFileInfo( dirName ).completeBaseName() );
}
else
ok = addRasterLayer( fileName, fileInfo.completeBaseName() );
} }
// TODO - should we really call isValidRasterFileName() before addRasterLayer() // TODO - should we really call isValidRasterFileName() before addRasterLayer()
// this results in 2 calls to GDALOpen() // this results in 2 calls to GDALOpen()
@ -9866,7 +9873,13 @@ QgsRasterLayer* QgisApp::addRasterLayerPrivate(
// XXX ya know QgsRasterLayer can snip out the basename on its own; // XXX ya know QgsRasterLayer can snip out the basename on its own;
// XXX why do we have to pass it in for it? // XXX why do we have to pass it in for it?
// ET : we may not be getting "normal" files here, so we still need the baseName argument // ET : we may not be getting "normal" files here, so we still need the baseName argument
if ( providerKey.isEmpty() ) if ( !providerKey.isEmpty() && uri.toLower().endsWith( ".adf" ) )
{
QFileInfo fileInfo( uri );
QString dirName = fileInfo.path();
layer = new QgsRasterLayer( dirName, QFileInfo( dirName ).completeBaseName(), "gdal" );
}
else if ( providerKey.isEmpty() )
layer = new QgsRasterLayer( uri, baseName ); // fi.completeBaseName()); layer = new QgsRasterLayer( uri, baseName ); // fi.completeBaseName());
else else
layer = new QgsRasterLayer( uri, baseName, providerKey ); layer = new QgsRasterLayer( uri, baseName, providerKey );
@ -9997,16 +10010,9 @@ bool QgisApp::addRasterLayers( QStringList const &theFileNameQStringList, bool g
if ( QgsRasterLayer::isValidRasterFileName( *myIterator, errMsg ) ) if ( QgsRasterLayer::isValidRasterFileName( *myIterator, errMsg ) )
{ {
QFileInfo myFileInfo( *myIterator ); QFileInfo myFileInfo( *myIterator );
// get the directory the .adf file was in
QString myDirNameQString = myFileInfo.path();
//extract basename
QString myBaseNameQString = myFileInfo.completeBaseName();
//only allow one copy of a ai grid file to be loaded at a
//time to prevent the user selecting all adfs in 1 dir which
//actually represent 1 coverage,
// try to create the layer // try to create the layer
QgsRasterLayer *layer = addRasterLayerPrivate( *myIterator, myBaseNameQString, QgsRasterLayer *layer = addRasterLayerPrivate( *myIterator, myFileInfo.completeBaseName(),
QString(), guiWarning, true ); QString(), guiWarning, true );
if ( layer && layer->isValid() ) if ( layer && layer->isValid() )
{ {
@ -10014,7 +10020,7 @@ bool QgisApp::addRasterLayers( QStringList const &theFileNameQStringList, bool g
//time to prevent the user selecting all adfs in 1 dir which //time to prevent the user selecting all adfs in 1 dir which
//actually represent 1 coverate, //actually represent 1 coverate,
if ( myBaseNameQString.toLower().endsWith( ".adf" ) ) if ( myFileInfo.fileName().toLower().endsWith( ".adf" ) )
{ {
break; break;
} }