Skip to content

Commit 287cce0

Browse files
committed
Add metadata information for layers
To complete the metadata tab and ilayer information, we add keywordlist, metadata url and attribution information. The user can add keywords to his layers, store a metadata url with type and format and attribution title and url. These data are reused by QGIS-Sever in the WMS GetCapabilities request. This capability is sponsored by ifremer.
1 parent f1f17ed commit 287cce0

File tree

8 files changed

+473
-20
lines changed

8 files changed

+473
-20
lines changed

python/core/qgsmaplayer.sip

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,23 @@ class QgsMapLayer : QObject
8484
void setAbstract( const QString& abstract );
8585
const QString& abstract() const;
8686

87+
void setKeywordList( const QString& kwdList );
88+
const QString& keywordList() const;
89+
90+
/* Layer attribution information */
91+
void setAttribution( const QString& attrib );
92+
const QString& attribution() const;
93+
void setAttributionUrl( const QString& attribUrl );
94+
const QString& attributionUrl() const;
95+
96+
/* Layer metadataUrl information */
97+
void setMetadataUrl( const QString& metaUrl );
98+
const QString& metadataUrl() const;
99+
void setMetadataUrlType( const QString& metaUrlType );
100+
const QString& metadataUrlType() const;
101+
void setMetadataUrlFormat( const QString& metaUrlFormat );
102+
const QString& metadataUrlFormat() const;
103+
87104
/**Synchronises with changes in the datasource
88105
@note added in version 1.6*/
89106
virtual void reload();

src/app/qgsrasterlayerproperties.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -731,6 +731,21 @@ void QgsRasterLayerProperties::sync()
731731

732732
mLayerTitleLineEdit->setText( mRasterLayer->title() );
733733
mLayerAbstractTextEdit->setPlainText( mRasterLayer->abstract() );
734+
mLayerKeywordListLineEdit->setText( mRasterLayer->keywordList() );
735+
//layer attribution and metadataUrl
736+
mLayerAttributionLineEdit->setText( mRasterLayer->attribution() );
737+
mLayerAttributionUrlLineEdit->setText( mRasterLayer->attributionUrl() );
738+
mLayerMetadataUrlLineEdit->setText( mRasterLayer->metadataUrl() );
739+
mLayerMetadataUrlTypeComboBox->setCurrentIndex(
740+
mLayerMetadataUrlTypeComboBox->findText(
741+
mRasterLayer->metadataUrlType()
742+
)
743+
);
744+
mLayerMetadataUrlFormatComboBox->setCurrentIndex(
745+
mLayerMetadataUrlFormatComboBox->findText(
746+
mRasterLayer->metadataUrlFormat()
747+
)
748+
);
734749

735750
} // QgsRasterLayerProperties::sync()
736751

@@ -896,6 +911,13 @@ void QgsRasterLayerProperties::apply()
896911

897912
mRasterLayer->setTitle( mLayerTitleLineEdit->text() );
898913
mRasterLayer->setAbstract( mLayerAbstractTextEdit->toPlainText() );
914+
mRasterLayer->setKeywordList( mLayerKeywordListLineEdit->text() );
915+
//layer attribution and metadataUrl
916+
mRasterLayer->setAttribution( mLayerAttributionLineEdit->text() );
917+
mRasterLayer->setAttributionUrl( mLayerAttributionUrlLineEdit->text() );
918+
mRasterLayer->setMetadataUrl( mLayerMetadataUrlLineEdit->text() );
919+
mRasterLayer->setMetadataUrlType( mLayerMetadataUrlTypeComboBox->currentText() );
920+
mRasterLayer->setMetadataUrlFormat( mLayerMetadataUrlFormatComboBox->currentText() );
899921

900922
// update symbology
901923
emit refreshLegend( mRasterLayer->id(), false );

src/app/qgsvectorlayerproperties.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,21 @@ QgsVectorLayerProperties::QgsVectorLayerProperties(
228228
{
229229
mLayerTitleLineEdit->setText( layer->title() );
230230
mLayerAbstractTextEdit->setPlainText( layer->abstract() );
231+
mLayerKeywordListLineEdit->setText( layer->keywordList() );
232+
//layer attribution and metadataUrl
233+
mLayerAttributionLineEdit->setText( layer->attribution() );
234+
mLayerAttributionUrlLineEdit->setText( layer->attributionUrl() );
235+
mLayerMetadataUrlLineEdit->setText( layer->metadataUrl() );
236+
mLayerMetadataUrlTypeComboBox->setCurrentIndex(
237+
mLayerMetadataUrlTypeComboBox->findText(
238+
layer->metadataUrlType()
239+
)
240+
);
241+
mLayerMetadataUrlFormatComboBox->setCurrentIndex(
242+
mLayerMetadataUrlFormatComboBox->findText(
243+
layer->metadataUrlFormat()
244+
)
245+
);
231246
}
232247

233248
setWindowTitle( tr( "Layer Properties - %1" ).arg( layer->name() ) );
@@ -465,6 +480,13 @@ void QgsVectorLayerProperties::apply()
465480
//layer title and abstract
466481
layer->setTitle( mLayerTitleLineEdit->text() );
467482
layer->setAbstract( mLayerAbstractTextEdit->toPlainText() );
483+
layer->setKeywordList( mLayerKeywordListLineEdit->text() );
484+
//layer attribution and metadataUrl
485+
layer->setAttribution( mLayerAttributionLineEdit->text() );
486+
layer->setAttributionUrl( mLayerAttributionUrlLineEdit->text() );
487+
layer->setMetadataUrl( mLayerMetadataUrlLineEdit->text() );
488+
layer->setMetadataUrlType( mLayerMetadataUrlTypeComboBox->currentText() );
489+
layer->setMetadataUrlFormat( mLayerMetadataUrlFormatComboBox->currentText() );
468490

469491
// update symbology
470492
emit refreshLegend( layer->id(), QgsLegendItem::DontChange );

src/core/qgsmaplayer.cpp

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,35 @@ bool QgsMapLayer::readLayerXML( const QDomElement& layerElement )
359359
mAbstract = abstractElem.text();
360360
}
361361

362+
//keywordList
363+
QDomElement keywordListElem = layerElement.firstChildElement( "keywordList" );
364+
if ( !keywordListElem.isNull() )
365+
{
366+
QStringList kwdList;
367+
for(QDomNode n = keywordListElem.firstChild(); !n.isNull(); n = n.nextSibling())
368+
{
369+
kwdList << n.toElement().text();
370+
}
371+
mKeywordList = kwdList.join( ", " );
372+
}
373+
374+
//attribution
375+
QDomElement attribElem = layerElement.firstChildElement( "attribution" );
376+
if ( !attribElem.isNull() )
377+
{
378+
mAttribution = attribElem.text();
379+
mAttributionUrl = attribElem.attribute( "href", "" );
380+
}
381+
382+
//metadataUrl
383+
QDomElement metaUrlElem = layerElement.firstChildElement( "metadataUrl" );
384+
if ( !metaUrlElem.isNull() )
385+
{
386+
mMetadataUrl = metaUrlElem.text();
387+
mMetadataUrlType = metaUrlElem.attribute( "type", "" );
388+
mMetadataUrlFormat = metaUrlElem.attribute( "format", "" );
389+
}
390+
362391
#if 0
363392
//read transparency level
364393
QDomNode transparencyNode = layer_node.namedItem( "transparencyLevelInt" );
@@ -457,6 +486,44 @@ bool QgsMapLayer::writeLayerXML( QDomElement& layerElement, QDomDocument& docume
457486
layerElement.appendChild( layerName );
458487
layerElement.appendChild( layerTitle );
459488
layerElement.appendChild( layerAbstract );
489+
490+
// layer keyword list
491+
QStringList keywordStringList = keywordList().split( "," );
492+
if ( keywordStringList.size() > 0 )
493+
{
494+
QDomElement layerKeywordList = document.createElement( "keywordList" );
495+
for (int i = 0; i < keywordStringList.size(); ++i)
496+
{
497+
QDomElement layerKeywordValue = document.createElement( "value" );
498+
QDomText layerKeywordText = document.createTextNode( keywordStringList.at( i ).trimmed() );
499+
layerKeywordValue.appendChild( layerKeywordText );
500+
layerKeywordList.appendChild( layerKeywordValue );
501+
}
502+
layerElement.appendChild( layerKeywordList );
503+
}
504+
505+
// layer attribution
506+
QString aAttribution = attribution();
507+
if ( !aAttribution.isEmpty() )
508+
{
509+
QDomElement layerAttribution = document.createElement( "attribution" ) ;
510+
QDomText layerAttributionText = document.createTextNode( aAttribution );
511+
layerAttribution.appendChild( layerAttributionText );
512+
layerAttribution.setAttribute( "href", attributionUrl() );
513+
layerElement.appendChild( layerAttribution );
514+
}
515+
516+
// layer metadataUrl
517+
QString aMetadataUrl = metadataUrl();
518+
if ( !aMetadataUrl.isEmpty() )
519+
{
520+
QDomElement layerMetadataUrl = document.createElement( "metadataUrl" ) ;
521+
QDomText layerMetadataUrlText = document.createTextNode( aMetadataUrl );
522+
layerMetadataUrl.appendChild( layerMetadataUrlText );
523+
layerMetadataUrl.setAttribute( "type", metadataUrlType() );
524+
layerMetadataUrl.setAttribute( "format", metadataUrlFormat() );
525+
layerElement.appendChild( layerMetadataUrl );
526+
}
460527

461528
// timestamp if supported
462529
if ( timestamp() > QDateTime() )

src/core/qgsmaplayer.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,23 @@ class CORE_EXPORT QgsMapLayer : public QObject
9696
void setAbstract( const QString& abstract ) { mAbstract = abstract; }
9797
const QString& abstract() const { return mAbstract; }
9898

99+
void setKeywordList( const QString& keywords ) { mKeywordList = keywords; }
100+
const QString& keywordList() const { return mKeywordList; }
101+
102+
/* Layer attribution information */
103+
void setAttribution( const QString& attrib ) { mAttribution = attrib; }
104+
const QString& attribution() const { return mAttribution; }
105+
void setAttributionUrl( const QString& attribUrl ) { mAttributionUrl = attribUrl; }
106+
const QString& attributionUrl() const { return mAttributionUrl; }
107+
108+
/* Layer metadataUrl information */
109+
void setMetadataUrl( const QString& metaUrl ) { mMetadataUrl = metaUrl; }
110+
const QString& metadataUrl() const { return mMetadataUrl; }
111+
void setMetadataUrlType( const QString& metaUrlType ) { mMetadataUrlType = metaUrlType; }
112+
const QString& metadataUrlType() const { return mMetadataUrlType; }
113+
void setMetadataUrlFormat( const QString& metaUrlFormat ) { mMetadataUrlFormat = metaUrlFormat; }
114+
const QString& metadataUrlFormat() const { return mMetadataUrlFormat; }
115+
99116
/* Set the blending mode used for rendering a layer */
100117
void setBlendMode( const QPainter::CompositionMode blendMode );
101118
/* Returns the current blending mode for a layer */
@@ -475,6 +492,16 @@ class CORE_EXPORT QgsMapLayer : public QObject
475492

476493
/**Description of the layer*/
477494
QString mAbstract;
495+
QString mKeywordList;
496+
497+
/**Attribution of the layer*/
498+
QString mAttribution;
499+
QString mAttributionUrl;
500+
501+
/**MetadataUrl of the layer*/
502+
QString mMetadataUrl;
503+
QString mMetadataUrlType;
504+
QString mMetadataUrlFormat;
478505

479506
/** \brief Error */
480507
QgsError mError;

src/mapserver/qgsprojectparser.cpp

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,72 @@ void QgsProjectParser::addLayers( QDomDocument &doc,
551551
layerElem.appendChild( abstractElem );
552552
}
553553

554+
//keyword list
555+
QStringList keywordStringList = currentLayer->keywordList().split( "," );
556+
if ( keywordStringList.size() > 0 )
557+
{
558+
bool siaFormat = featureInfoFormatSIA2045();
559+
560+
QDomElement keywordListElem = doc.createElement( "KeywordList" );
561+
for ( int i = 0; i < keywordStringList.size(); ++i )
562+
{
563+
QDomElement keywordElem = doc.createElement( "Keyword" );
564+
QDomText keywordText = doc.createTextNode( keywordStringList.at( i ).trimmed() );
565+
keywordElem.appendChild( keywordText );
566+
if ( siaFormat )
567+
{
568+
keywordElem.setAttribute( "vocabulary", "SIA_Geo405" );
569+
}
570+
keywordListElem.appendChild( keywordElem );
571+
}
572+
layerElem.appendChild( keywordListElem );
573+
}
574+
575+
QString attribution = currentLayer->attribution();
576+
if ( !attribution.isEmpty() )
577+
{
578+
QDomElement attribElem = doc.createElement( "Attribution" );
579+
QDomElement attribTitleElem = doc.createElement( "Title" );
580+
QDomText attribText = doc.createTextNode( attribution );
581+
attribTitleElem.appendChild( attribText );
582+
attribElem.appendChild( attribTitleElem );
583+
QString attributionUrl = currentLayer->attributionUrl();
584+
if ( !attributionUrl.isEmpty() )
585+
{
586+
QDomElement attribORElem = doc.createElement( "OnlineResource" );
587+
attribORElem.setAttribute( "xmlns:xlink", "http://www.w3.org/1999/xlink" );
588+
attribORElem.setAttribute( "xlink:type", "simple" );
589+
attribORElem.setAttribute( "xlink:href", attributionUrl );
590+
attribElem.appendChild( attribORElem );
591+
}
592+
layerElem.appendChild( attribElem );
593+
}
594+
595+
QString metadataUrl = currentLayer->metadataUrl();
596+
if ( !metadataUrl.isEmpty() )
597+
{
598+
QDomElement metaUrlElem = doc.createElement( "MetadataUrl" );
599+
QString metadataUrlType = currentLayer->metadataUrlType();
600+
if ( !metadataUrlType.isEmpty() )
601+
{
602+
metaUrlElem.setAttribute( "type", metadataUrlType );
603+
}
604+
QString metadataUrlFormat = currentLayer->metadataUrlFormat();
605+
if ( !metadataUrlFormat.isEmpty() )
606+
{
607+
QDomElement metaUrlFormatElem = doc.createElement( "Format" );
608+
QDomText metaUrlFormatText = doc.createTextNode( metadataUrlFormat );
609+
metaUrlFormatElem.appendChild( metaUrlFormatText );
610+
metaUrlElem.appendChild( metaUrlFormatElem );
611+
}
612+
QDomElement metaUrlORElem = doc.createElement( "OnlineResource" );
613+
metaUrlORElem.setAttribute( "xmlns:xlink", "http://www.w3.org/1999/xlink" );
614+
metaUrlORElem.setAttribute( "xlink:type", "simple" );
615+
metaUrlORElem.setAttribute( "xlink:href", metadataUrl );
616+
metaUrlElem.appendChild( metaUrlORElem );
617+
layerElem.appendChild( metaUrlElem );
618+
}
619+
554620
//CRS
555621
QStringList crsList = createCRSListForLayer( currentLayer );
556622
appendCRSElementsToLayer( layerElem, doc, crsList );

0 commit comments

Comments
 (0)