Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[wms] Fix broken WMS layers from servers using relative OnlineResourc…
…e paths
  • Loading branch information
nirvn authored and nyalldawson committed Jun 28, 2020
1 parent d8b79f3 commit 7d78628
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 8 deletions.
16 changes: 10 additions & 6 deletions src/providers/wms/qgswmscapabilities.cpp
Expand Up @@ -161,8 +161,9 @@ bool QgsWmsSettings::parseUri( const QString &uriString )
// ----------------------


QgsWmsCapabilities::QgsWmsCapabilities( const QgsCoordinateTransformContext &coordinateTransformContext ):
mCoordinateTransformContext( coordinateTransformContext )
QgsWmsCapabilities::QgsWmsCapabilities( const QgsCoordinateTransformContext &coordinateTransformContext, const QString &baseUrl ):
mCoordinateTransformContext( coordinateTransformContext ),
mBaseUrl( baseUrl )
{

}
Expand Down Expand Up @@ -406,10 +407,13 @@ void QgsWmsCapabilities::parseService( QDomElement const &e, QgsWmsServiceProper

void QgsWmsCapabilities::parseOnlineResource( QDomElement const &e, QgsWmsOnlineResourceAttribute &onlineResourceAttribute )
{

onlineResourceAttribute.xlinkHref = QUrl::fromEncoded( e.attribute( QStringLiteral( "xlink:href" ) ).toUtf8() ).toString();

QgsDebugMsg( QStringLiteral( "exiting." ) );
QUrl url = QUrl::fromEncoded( e.attribute( QStringLiteral( "xlink:href" ) ).toUtf8() );
if ( url.isRelative() )
{
const QUrl baseUrl = QUrl( mBaseUrl );
url = baseUrl.resolved( url );
}
onlineResourceAttribute.xlinkHref = url.toString();
}


Expand Down
3 changes: 2 additions & 1 deletion src/providers/wms/qgswmscapabilities.h
Expand Up @@ -633,7 +633,7 @@ class QgsWmsCapabilities
/**
* Constructs a QgsWmsCapabilities object with the given \a coordinateTransformContext
*/
QgsWmsCapabilities( const QgsCoordinateTransformContext &coordinateTransformContext = QgsCoordinateTransformContext() );
QgsWmsCapabilities( const QgsCoordinateTransformContext &coordinateTransformContext = QgsCoordinateTransformContext(), const QString &baseUrl = QString() );

bool isValid() const { return mValid; }

Expand Down Expand Up @@ -769,6 +769,7 @@ class QgsWmsCapabilities
private:

QgsCoordinateTransformContext mCoordinateTransformContext;
QString mBaseUrl;

friend class QgsWmsProvider;
};
Expand Down
2 changes: 1 addition & 1 deletion src/providers/wms/qgswmsprovider.cpp
Expand Up @@ -1198,7 +1198,7 @@ bool QgsWmsProvider::retrieveServerCapabilities( bool forceRefresh )
return false;
}

QgsWmsCapabilities caps( transformContext() );
QgsWmsCapabilities caps( transformContext(), mSettings.baseUrl() );
if ( !caps.parseResponse( downloadCaps.response(), mSettings.parserSettings() ) )
{
mErrorFormat = caps.lastErrorFormat();
Expand Down

0 comments on commit 7d78628

Please sign in to comment.