diff --git a/src/providers/arcgisrest/qgsamsprovider.cpp b/src/providers/arcgisrest/qgsamsprovider.cpp index 50006863ca3..90888fe813c 100644 --- a/src/providers/arcgisrest/qgsamsprovider.cpp +++ b/src/providers/arcgisrest/qgsamsprovider.cpp @@ -194,11 +194,12 @@ 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 { @@ -206,7 +207,15 @@ QgsAmsProvider::QgsAmsProvider( const QString &uri, const ProviderOptions &optio 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() ); diff --git a/src/providers/arcgisrest/qgsarcgisrestutils.cpp b/src/providers/arcgisrest/qgsarcgisrestutils.cpp index 339f47729c2..4b3d51353d5 100644 --- a/src/providers/arcgisrest/qgsarcgisrestutils.cpp +++ b/src/providers/arcgisrest/qgsarcgisrestutils.cpp @@ -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();