Skip to content

Commit 828ee7e

Browse files
committed
Support replacement of layer names in GetFeatureInfo with the elements WMSFeatureInfoAliasLayers and WMSFeatureInfoLayerAliases
1 parent 98876da commit 828ee7e

File tree

6 files changed

+74
-1
lines changed

6 files changed

+74
-1
lines changed

src/mapserver/qgsconfigparser.h

+3
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ class QgsConfigParser
113113
/**Appends service metadata to the capabilities document*/
114114
virtual void serviceCapabilities( QDomElement& parentElement, QDomDocument& doc ) const;
115115

116+
/**Returns map with layer aliases for GetFeatureInfo (or 0 pointer if not supported). Key: layer name, Value: layer alias*/
117+
virtual QHash<QString, QString> featureInfoLayerAliasMap() const { return QHash<QString, QString>(); }
118+
116119
protected:
117120
/**Parser to forward not resolved requests (e.g. SLD parser based on user request might have a fallback parser with admin configuration)*/
118121
QgsConfigParser* mFallbackParser;

src/mapserver/qgsprojectparser.cpp

+44
Original file line numberDiff line numberDiff line change
@@ -1353,6 +1353,50 @@ void QgsProjectParser::serviceCapabilities( QDomElement& parentElement, QDomDocu
13531353
parentElement.appendChild( serviceElem );
13541354
}
13551355

1356+
QHash<QString, QString> QgsProjectParser::featureInfoLayerAliasMap() const
1357+
{
1358+
QHash<QString, QString> aliasMap;
1359+
QDomElement propertiesElem = mXMLDoc->documentElement().firstChildElement( "properties" );
1360+
if ( propertiesElem.isNull() )
1361+
{
1362+
return aliasMap;
1363+
}
1364+
1365+
//WMSFeatureInfoAliasLayers
1366+
QStringList aliasLayerStringList;
1367+
QDomElement featureInfoAliasLayersElem = propertiesElem.firstChildElement( "WMSFeatureInfoAliasLayers" );
1368+
if ( featureInfoAliasLayersElem.isNull() )
1369+
{
1370+
return aliasMap;
1371+
}
1372+
QDomNodeList aliasLayerValueList = featureInfoAliasLayersElem.elementsByTagName( "value" );
1373+
for ( int i = 0; i < aliasLayerValueList.size(); ++i )
1374+
{
1375+
aliasLayerStringList << aliasLayerValueList.at( i ).toElement().text();
1376+
}
1377+
1378+
//WMSFeatureInfoLayerAliases
1379+
QStringList layerAliasStringList;
1380+
QDomElement featureInfoLayerAliasesElem = propertiesElem.firstChildElement( "WMSFeatureInfoLayerAliases" );
1381+
if ( featureInfoLayerAliasesElem.isNull() )
1382+
{
1383+
return aliasMap;
1384+
}
1385+
QDomNodeList layerAliasesValueList = featureInfoLayerAliasesElem.elementsByTagName( "value" );
1386+
for ( int i = 0; i < layerAliasesValueList.size(); ++i )
1387+
{
1388+
layerAliasStringList << layerAliasesValueList.at( i ).toElement().text();
1389+
}
1390+
1391+
int nMapEntries = qMin( aliasLayerStringList.size(), layerAliasStringList.size() );
1392+
for ( int i = 0; i < nMapEntries; ++i )
1393+
{
1394+
aliasMap.insert( aliasLayerStringList.at( i ), layerAliasStringList.at( i ) );
1395+
}
1396+
1397+
return aliasMap;
1398+
}
1399+
13561400
QString QgsProjectParser::convertToAbsolutePath( const QString& file ) const
13571401
{
13581402
if ( !file.startsWith( "./" ) && !file.startsWith( "../" ) )

src/mapserver/qgsprojectparser.h

+3
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ class QgsProjectParser: public QgsConfigParser
101101
/**Reads service metadata from projectfile or falls back to parent class method if not there*/
102102
void serviceCapabilities( QDomElement& parentElement, QDomDocument& doc ) const;
103103

104+
/**Returns map with layer aliases for GetFeatureInfo (or 0 pointer if not supported). Key: layer name, Value: layer alias*/
105+
virtual QHash<QString, QString> featureInfoLayerAliasMap() const;
106+
104107
private:
105108

106109
//forbidden

src/mapserver/qgssldparser.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -1564,6 +1564,15 @@ bool QgsSLDParser::featureInfoWithWktGeometry() const
15641564
return false;
15651565
}
15661566

1567+
QHash<QString, QString> QgsSLDParser::featureInfoLayerAliasMap() const
1568+
{
1569+
if ( mFallbackParser )
1570+
{
1571+
return mFallbackParser->featureInfoLayerAliasMap();
1572+
}
1573+
return QHash<QString, QString>();
1574+
}
1575+
15671576
#ifdef DIAGRAMSERVER
15681577
int QgsSLDParser::overlaysFromUserStyle( const QDomElement& userStyleElement, QgsVectorLayer* vec ) const
15691578
{

src/mapserver/qgssldparser.h

+3
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ class QgsSLDParser: public QgsConfigParser
7979
/**True if the feature info response should contain the wkt geometry for vector features*/
8080
virtual bool featureInfoWithWktGeometry() const;
8181

82+
/**Returns map with layer aliases for GetFeatureInfo (or 0 pointer if not supported). Key: layer name, Value: layer alias*/
83+
virtual QHash<QString, QString> featureInfoLayerAliasMap() const;
84+
8285
private:
8386
/**Don't use the default constructor*/
8487
QgsSLDParser();

src/mapserver/qgswmsserver.cpp

+12-1
Original file line numberDiff line numberDiff line change
@@ -810,6 +810,9 @@ int QgsWMSServer::getFeatureInfo( QDomDocument& result, QString version )
810810
QMap< QString, QMap< int, QString > > aliasInfo = mConfigParser->layerAliasInfo();
811811
QMap< QString, QSet<QString> > hiddenAttributes = mConfigParser->hiddenAttributes();
812812

813+
//layers can have assigned a different name for GetCapabilities
814+
QHash<QString, QString> layerAliasMap = mConfigParser->featureInfoLayerAliasMap();
815+
813816
QList<QgsMapLayer*> layerList;
814817
QgsMapLayer* currentLayer = 0;
815818
QStringList::const_iterator layerIt;
@@ -838,7 +841,15 @@ int QgsWMSServer::getFeatureInfo( QDomDocument& result, QString version )
838841
}
839842

840843
QDomElement layerElement = result.createElement( "Layer" );
841-
layerElement.setAttribute( "name", currentLayer->name() );
844+
QString layerName = currentLayer->name();
845+
846+
//check if the layer is given a different name for GetFeatureInfo output
847+
QHash<QString, QString>::const_iterator layerAliasIt = layerAliasMap.find( layerName );
848+
if ( layerAliasIt != layerAliasMap.constEnd() )
849+
{
850+
layerName = layerAliasIt.value();
851+
}
852+
layerElement.setAttribute( "name", layerName );
842853
getFeatureInfoElement.appendChild( layerElement );
843854

844855
//switch depending on vector or raster

0 commit comments

Comments
 (0)