Skip to content

Commit 324070f

Browse files
committed
Merge branch 'server_legend_url'
2 parents 2f47bba + d6535a8 commit 324070f

8 files changed

+300
-67
lines changed

src/app/qgsrasterlayerproperties.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,7 @@ void QgsRasterLayerProperties::sync()
737737
mRasterLayer->dataUrlFormat()
738738
)
739739
);
740+
740741
//layer attribution and metadataUrl
741742
mLayerAttributionLineEdit->setText( mRasterLayer->attribution() );
742743
mLayerAttributionUrlLineEdit->setText( mRasterLayer->attributionUrl() );
@@ -752,6 +753,8 @@ void QgsRasterLayerProperties::sync()
752753
)
753754
);
754755

756+
mLayerLegendUrlLineEdit->setText( mRasterLayer->legendUrl() );
757+
mLayerLegendUrlFormatComboBox->setCurrentIndex( mLayerLegendUrlFormatComboBox->findText( mRasterLayer->legendUrlFormat() ) );
755758
} // QgsRasterLayerProperties::sync()
756759

757760
/*
@@ -925,6 +928,8 @@ void QgsRasterLayerProperties::apply()
925928
mRasterLayer->setMetadataUrl( mLayerMetadataUrlLineEdit->text() );
926929
mRasterLayer->setMetadataUrlType( mLayerMetadataUrlTypeComboBox->currentText() );
927930
mRasterLayer->setMetadataUrlFormat( mLayerMetadataUrlFormatComboBox->currentText() );
931+
mRasterLayer->setLegendUrl( mLayerLegendUrlLineEdit->text() );
932+
mRasterLayer->setLegendUrlFormat( mLayerLegendUrlFormatComboBox->currentText() );
928933

929934
// update symbology
930935
emit refreshLegend( mRasterLayer->id(), false );

src/app/qgsvectorlayerproperties.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,12 @@ QgsVectorLayerProperties::QgsVectorLayerProperties(
248248
layer->metadataUrlFormat()
249249
)
250250
);
251+
mLayerLegendUrlLineEdit->setText( layer->legendUrl() );
252+
mLayerLegendUrlFormatComboBox->setCurrentIndex(
253+
mLayerLegendUrlFormatComboBox->findText(
254+
layer->legendUrlFormat()
255+
)
256+
);
251257
}
252258

253259
QSettings settings;
@@ -556,6 +562,8 @@ void QgsVectorLayerProperties::apply()
556562
layer->setMetadataUrl( mLayerMetadataUrlLineEdit->text() );
557563
layer->setMetadataUrlType( mLayerMetadataUrlTypeComboBox->currentText() );
558564
layer->setMetadataUrlFormat( mLayerMetadataUrlFormatComboBox->currentText() );
565+
layer->setLegendUrl( mLayerLegendUrlLineEdit->text() );
566+
layer->setLegendUrlFormat( mLayerLegendUrlFormatComboBox->currentText() );
559567

560568
//layer simplify drawing configuration
561569
QgsVectorSimplifyMethod::SimplifyHints simplifyHints = QgsVectorSimplifyMethod::NoSimplification;

src/core/qgsmaplayer.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,14 @@ bool QgsMapLayer::readLayerXML( const QDomElement& layerElement )
376376
mDataUrlFormat = dataUrlElem.attribute( "format", "" );
377377
}
378378

379+
//legendUrl
380+
QDomElement legendUrlElem = layerElement.firstChildElement( "legendUrl" );
381+
if ( !legendUrlElem.isNull() )
382+
{
383+
mLegendUrl = legendUrlElem.text();
384+
mLegendUrlFormat = legendUrlElem.attribute( "format", "" );
385+
}
386+
379387
//attribution
380388
QDomElement attribElem = layerElement.firstChildElement( "attribution" );
381389
if ( !attribElem.isNull() )
@@ -518,6 +526,17 @@ bool QgsMapLayer::writeLayerXML( QDomElement& layerElement, QDomDocument& docume
518526
layerElement.appendChild( layerDataUrl );
519527
}
520528

529+
// layer legendUrl
530+
QString aLegendUrl = legendUrl();
531+
if ( !aLegendUrl.isEmpty() )
532+
{
533+
QDomElement layerLegendUrl = document.createElement( "legendUrl" ) ;
534+
QDomText layerLegendUrlText = document.createTextNode( aLegendUrl );
535+
layerLegendUrl.appendChild( layerLegendUrlText );
536+
layerLegendUrl.setAttribute( "format", legendUrlFormat() );
537+
layerElement.appendChild( layerLegendUrl );
538+
}
539+
521540
// layer attribution
522541
QString aAttribution = attribution();
523542
if ( !aAttribution.isEmpty() )

src/core/qgsmaplayer.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,12 @@ class CORE_EXPORT QgsMapLayer : public QObject
369369
/** Return pointer to layer's undo stack */
370370
QUndoStack *undoStack();
371371

372+
/* Layer legendUrl information */
373+
void setLegendUrl( const QString& legendUrl ) { mLegendUrl = legendUrl; }
374+
const QString& legendUrl() const { return mLegendUrl; }
375+
void setLegendUrlFormat( const QString& legendUrlFormat ) { mLegendUrlFormat = legendUrlFormat; }
376+
const QString& legendUrlFormat() const { return mLegendUrlFormat; }
377+
372378
/** @deprecated since 2.4 - returns NULL */
373379
Q_DECL_DEPRECATED QImage *cacheImage() { return 0; }
374380
/** @deprecated since 2.4 - caches listen to repaintRequested() signal to invalidate the cached image */
@@ -508,6 +514,10 @@ class CORE_EXPORT QgsMapLayer : public QObject
508514
QString mMetadataUrlType;
509515
QString mMetadataUrlFormat;
510516

517+
/**WMS legend*/
518+
QString mLegendUrl;
519+
QString mLegendUrlFormat;
520+
511521
/** \brief Error */
512522
QgsError mError;
513523

src/mapserver/qgswmsprojectparser.cpp

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -969,6 +969,70 @@ void QgsWMSProjectParser::addLayers( QDomDocument &doc,
969969
styleTitleElem.appendChild( styleTitleText );
970970
styleElem.appendChild( styleNameElem );
971971
styleElem.appendChild( styleTitleElem );
972+
973+
// QString LegendURL for explicit layerbased GetLegendGraphic request
974+
QDomElement getLayerLegendGraphicElem = doc.createElement( "LegendURL" );
975+
QString hrefString = currentLayer->legendUrl();
976+
bool customHrefString;
977+
if ( !hrefString.isEmpty() )
978+
{
979+
customHrefString = true;
980+
}
981+
else
982+
{
983+
customHrefString = false;
984+
hrefString = serviceUrl();
985+
}
986+
if ( hrefString.isEmpty() )
987+
{
988+
hrefString = getCapaServiceUrl( doc );
989+
}
990+
if ( !hrefString.isEmpty() )
991+
{
992+
QStringList getLayerLegendGraphicFormats;
993+
if ( customHrefString == false )
994+
{
995+
getLayerLegendGraphicFormats << "image/png"; // << "jpeg" << "image/jpeg"
996+
997+
}
998+
else
999+
{
1000+
getLayerLegendGraphicFormats << currentLayer->legendUrlFormat();
1001+
}
1002+
1003+
for ( int i = 0; i < getLayerLegendGraphicFormats.size(); ++i )
1004+
{
1005+
QDomElement getLayerLegendGraphicFormatElem = doc.createElement( "Format" );
1006+
QString getLayerLegendGraphicFormat = getLayerLegendGraphicFormats[i];
1007+
QDomText getLayerLegendGraphicFormatText = doc.createTextNode( getLayerLegendGraphicFormat );
1008+
getLayerLegendGraphicFormatElem.appendChild( getLayerLegendGraphicFormatText );
1009+
getLayerLegendGraphicElem.appendChild( getLayerLegendGraphicFormatElem );
1010+
}
1011+
1012+
// no parameters on custom hrefUrl, because should link directly to graphic
1013+
if ( customHrefString == false )
1014+
{
1015+
QUrl mapUrl( hrefString );
1016+
mapUrl.addQueryItem( "SERVICE", "WMS" );
1017+
mapUrl.addQueryItem( "VERSION", version );
1018+
mapUrl.addQueryItem( "REQUEST", "GetLegendGraphic" );
1019+
mapUrl.addQueryItem( "LAYER", currentLayer->name() );
1020+
mapUrl.addQueryItem( "FORMAT", "image/png" );
1021+
mapUrl.addQueryItem( "STYLE", styleNameText.data() );
1022+
if ( version == "1.3.0" )
1023+
{
1024+
mapUrl.addQueryItem( "SLD_VERSION", "1.1.0" );
1025+
}
1026+
hrefString = mapUrl.toString();
1027+
}
1028+
1029+
QDomElement getLayerLegendGraphicORElem = doc.createElement( "OnlineResource" );
1030+
getLayerLegendGraphicORElem.setAttribute( "xmlns:xlink", "http://www.w3.org/1999/xlink" );
1031+
getLayerLegendGraphicORElem.setAttribute( "xlink:type", "simple" );
1032+
getLayerLegendGraphicORElem.setAttribute( "xlink:href", hrefString );
1033+
getLayerLegendGraphicElem.appendChild( getLayerLegendGraphicORElem );
1034+
styleElem.appendChild( getLayerLegendGraphicElem );
1035+
}
9721036
layerElem.appendChild( styleElem );
9731037

9741038
//min/max scale denominatormScaleBasedVisibility
@@ -1802,3 +1866,21 @@ void QgsWMSProjectParser::cleanupTextAnnotationItems()
18021866
}
18031867
mTextAnnotationItems.clear();
18041868
}
1869+
1870+
QString QgsWMSProjectParser::getCapaServiceUrl( QDomDocument& doc ) const
1871+
{
1872+
QString url;
1873+
QDomNodeList getCapNodeList = doc.elementsByTagName( "GetCapabilities" );
1874+
if ( getCapNodeList.count() > 0 )
1875+
{
1876+
QDomElement getCapElem = getCapNodeList.at( 0 ).toElement();
1877+
QDomNodeList getCapORNodeList = getCapElem.elementsByTagName( "OnlineResource" );
1878+
if ( getCapORNodeList.count() > 0 )
1879+
{
1880+
url = getCapORNodeList.at( 0 ).toElement().attribute( "xlink:href", "" );
1881+
}
1882+
1883+
}
1884+
1885+
return url;
1886+
}

src/mapserver/qgswmsprojectparser.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ class QgsWMSProjectParser: public QgsWMSConfigParser
146146
void createSvgAnnotationItems();
147147
void cleanupSvgAnnotationItems();
148148
void cleanupTextAnnotationItems();
149+
150+
QString getCapaServiceUrl( QDomDocument& doc ) const;
149151
};
150152

151153
#endif // QGSWMSPROJECTPARSER_H

0 commit comments

Comments
 (0)