Skip to content

Commit

Permalink
[arcgisrest] Fix root of a mapserver not recognized as layer
Browse files Browse the repository at this point in the history
  • Loading branch information
nirvn authored and nyalldawson committed Jun 27, 2019
1 parent cd5e9a9 commit 718f21e
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 3 deletions.
15 changes: 12 additions & 3 deletions src/providers/arcgisrest/qgsamsprovider.cpp
Expand Up @@ -194,19 +194,28 @@ QgsAmsProvider::QgsAmsProvider( const QString &uri, const ProviderOptions &optio
mServiceInfo = QgsArcGisRestUtils::getServiceInfo( serviceUrl, authcfg, mErrorTitle, mError, mRequestHeaders );

QString layerUrl;
if ( mServiceInfo.value( QStringLiteral( "serviceDataType" ) ).toString().startsWith( QLatin1String( "esriImageService" ) ) )
if ( dataSource.param( QStringLiteral( "layer" ) ).isEmpty() )
{
layerUrl = serviceUrl;
mLayerInfo = mServiceInfo;
mImageServer = true;
if ( mServiceInfo.value( QStringLiteral( "serviceDataType" ) ).toString().startsWith( QLatin1String( "esriImageService" ) ) )
mImageServer = true;
}
else
{
layerUrl = dataSource.param( QStringLiteral( "url" ) ) + "/" + dataSource.param( QStringLiteral( "layer" ) );
mLayerInfo = QgsArcGisRestUtils::getLayerInfo( layerUrl, authcfg, mErrorTitle, mError, mRequestHeaders );
}

const QVariantMap extentData = mLayerInfo.value( QStringLiteral( "extent" ) ).toMap();
QVariantMap extentData;
if ( mLayerInfo.contains( QStringLiteral( "extent" ) ) )
{
extentData = mLayerInfo.value( QStringLiteral( "extent" ) ).toMap();
}
else
{
extentData = mLayerInfo.value( QStringLiteral( "fullExtent" ) ).toMap();
}
mExtent.setXMinimum( extentData[QStringLiteral( "xmin" )].toDouble() );
mExtent.setYMinimum( extentData[QStringLiteral( "ymin" )].toDouble() );
mExtent.setXMaximum( extentData[QStringLiteral( "xmax" )].toDouble() );
Expand Down
9 changes: 9 additions & 0 deletions src/providers/arcgisrest/qgsarcgisrestutils.cpp
Expand Up @@ -1381,6 +1381,15 @@ void QgsArcGisRestUtils::addLayerItems( const std::function< void( const QString
}
}

// Add root MapServer as layer
if ( serviceData.contains( QStringLiteral( "supportedImageFormatTypes" ) ) )
{
const QString name = QStringLiteral( "(%1)" ).arg( QObject::tr( "All layers" ) );
const QString description = serviceData.value( QStringLiteral( "Comments" ) ).toString();
visitor( 0, 0, name, description, parentUrl, false, authid, format );
}

// Add root ImageServer as layer
if ( serviceData.value( QStringLiteral( "serviceDataType" ) ).toString().startsWith( QLatin1String( "esriImageService" ) ) )
{
const QString name = serviceData.value( QStringLiteral( "name" ) ).toString();
Expand Down

0 comments on commit 718f21e

Please sign in to comment.