From 77497b949263c1c0891a83cef93c6b89e466cbf8 Mon Sep 17 00:00:00 2001 From: Samweli Date: Sat, 14 Dec 2019 22:54:15 +0300 Subject: [PATCH] pulling metadata url from wms capabilities --- src/providers/wms/qgswmscapabilities.cpp | 31 ++++++++++++++++++++- src/providers/wms/qgswmscapabilities.h | 1 + src/providers/wms/qgswmsprovider.cpp | 35 ++++++++++++------------ 3 files changed, 48 insertions(+), 19 deletions(-) diff --git a/src/providers/wms/qgswmscapabilities.cpp b/src/providers/wms/qgswmscapabilities.cpp index 7a7f59d4667..0d09b46be05 100644 --- a/src/providers/wms/qgswmscapabilities.cpp +++ b/src/providers/wms/qgswmscapabilities.cpp @@ -783,6 +783,34 @@ void QgsWmsCapabilities::parseLegendUrl( QDomElement const &e, QgsWmsLegendUrlPr QgsDebugMsg( QStringLiteral( "exiting." ) ); } +void QgsWmsCapabilities::parseMetadataUrl( QDomElement const &e, QgsWmsMetadataUrlProperty &metadataUrlProperty ) +{ + + QDomNode n1 = e.firstChild(); + while ( !n1.isNull() ) + { + QDomElement e1 = n1.toElement(); // try to convert the node to an element. + if ( !e1.isNull() ) + { + QString tagName = e1.tagName(); + if ( tagName.startsWith( QLatin1String( "wms:" ) ) ) + tagName = tagName.mid( 4 ); + + if ( tagName == QLatin1String( "Format" ) ) + { + metadataUrlProperty.format = e1.text(); + } + else if ( tagName == QLatin1String( "OnlineResource" ) ) + { + parseOnlineResource( e1, metadataUrlProperty.onlineResource ); + } + } + n1 = n1.nextSibling(); + } + + QgsDebugMsg( QStringLiteral( "exiting." ) ); +} + void QgsWmsCapabilities::parseLayer( QDomElement const &e, QgsWmsLayerProperty &layerProperty, QgsWmsLayerProperty *parentProperty ) { @@ -972,7 +1000,8 @@ void QgsWmsCapabilities::parseLayer( QDomElement const &e, QgsWmsLayerProperty & } else if ( tagName == QLatin1String( "MetadataURL" ) ) { - // TODO + layerProperty.metadataUrl << QgsWmsMetadataUrlProperty(); + parseMetadataUrl( e1, layerProperty.metadataUrl.last() ); } else if ( tagName == QLatin1String( "DataURL" ) ) { diff --git a/src/providers/wms/qgswmscapabilities.h b/src/providers/wms/qgswmscapabilities.h index bcbaf29605f..47b12210402 100644 --- a/src/providers/wms/qgswmscapabilities.h +++ b/src/providers/wms/qgswmscapabilities.h @@ -692,6 +692,7 @@ class QgsWmsCapabilities void parseCapability( QDomElement const &e, QgsWmsCapabilityProperty &capabilityProperty ); void parseRequest( QDomElement const &e, QgsWmsRequestProperty &requestProperty ); void parseLegendUrl( QDomElement const &e, QgsWmsLegendUrlProperty &legendUrlProperty ); + void parseMetadataUrl( QDomElement const &e, QgsWmsMetadataUrlProperty &metadataUrlProperty ); void parseLayer( QDomElement const &e, QgsWmsLayerProperty &layerProperty, QgsWmsLayerProperty *parentProperty = nullptr ); void parseStyle( QDomElement const &e, QgsWmsStyleProperty &styleProperty ); diff --git a/src/providers/wms/qgswmsprovider.cpp b/src/providers/wms/qgswmsprovider.cpp index fe536e6e6c8..a7e50396cd8 100644 --- a/src/providers/wms/qgswmsprovider.cpp +++ b/src/providers/wms/qgswmsprovider.cpp @@ -1751,24 +1751,6 @@ QString QgsWmsProvider::layerMetadata( QgsWmsLayerProperty &layer ) QStringLiteral( "" "" ) % layer.title; - - // Metadata URLs - if ( !layer.metadataUrl.isEmpty() ) - { - metadata += QStringLiteral("" ); - metadata += QStringLiteral( "" ) % - tr( "MetadataURLs" ) % - QStringLiteral( "" - "" - "" ); - for ( int k = 0; k < layer.metadataUrl.size(); k++ ) - { - const QgsWmsMetadataUrlProperty &l = layer.metadataUrl[k]; - metadata += QStringLiteral( "" ); - } - metadata += QStringLiteral( "
FormatURL
" ) % l.format % QStringLiteral( "" ) % l.onlineResource.xlinkHref % QStringLiteral( "
" ); - } - QStringLiteral( "" // Layer Abstract @@ -1827,6 +1809,23 @@ QString QgsWmsProvider::layerMetadata( QgsWmsLayerProperty &layer ) QString::number( layer.fixedHeight ) % QStringLiteral( "" ); + // Metadata URLs + if ( !layer.metadataUrl.isEmpty() ) + { + metadata += QStringLiteral( "" ) % + tr( "MetadataURLs" ) % + QStringLiteral( "" + "" + "" ); + for ( int k = 0; k < layer.metadataUrl.size(); k++ ) + { + const QgsWmsMetadataUrlProperty &l = layer.metadataUrl[k]; + metadata += QStringLiteral( "" ); + } + metadata += QStringLiteral( "
FormatURL
" ) % l.format % QStringLiteral( "" ) % l.onlineResource.xlinkHref % QStringLiteral( "
" + "" ); + } + // Layer Coordinate Reference Systems for ( int j = 0; j < std::min( layer.crs.size(), 10 ); j++ ) {