Skip to content

Commit b9f4c15

Browse files
author
Marco Hugentobler
committed
Fix for filtering in qgis server
1 parent 7960f6f commit b9f4c15

File tree

1 file changed

+23
-20
lines changed

1 file changed

+23
-20
lines changed

src/mapserver/qgswmsserver.cpp

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1524,31 +1524,34 @@ QMap<QString, QString> QgsWMSServer::applyRequestedLayerFilters( const QStringLi
15241524
"AND,OR,IN,<,>=,>,>=,!=,',',(,). Not allowed are semicolons in the filter expression." );
15251525
}
15261526

1527-
//we know the layer name, but need to go through the list because a layer could be there several times...
1528-
int listPos = 1;
1529-
QStringList::const_iterator layerIt = layerList.constBegin();
1530-
for ( ; layerIt != layerList.constEnd(); ++layerIt )
1527+
//we need to find the maplayer objects matching the layer name
1528+
QList<QgsMapLayer*> layersToFilter;
1529+
QMap<QString, QgsMapLayer*>& layerMap = QgsMapLayerRegistry::instance()->mapLayers();
1530+
1531+
QMap<QString, QgsMapLayer*>::iterator layerIt = layerMap.begin();
1532+
for ( ; layerIt != layerMap.end(); ++layerIt )
1533+
{
1534+
if ( layerIt.value() && layerIt.value()->name() == eqSplit.at( 0 ) )
1535+
{
1536+
layersToFilter.push_back( layerIt.value() );
1537+
}
1538+
}
1539+
1540+
QList<QgsMapLayer*>::iterator filterIt = layersToFilter.begin();
1541+
for ( ; filterIt != layersToFilter.end(); ++filterIt )
15311542
{
1532-
if ( *layerIt == eqSplit.at( 0 ) )
1543+
QgsVectorLayer* filteredLayer = dynamic_cast<QgsVectorLayer*>( *filterIt );
1544+
if ( filteredLayer )
15331545
{
1534-
QString layerId = layerIds.at( layerIds.size() - listPos );
1535-
QgsVectorLayer* filteredLayer = dynamic_cast<QgsVectorLayer*>( QgsMapLayerRegistry::instance()->mapLayer( layerId ) );
1536-
if ( filteredLayer )
1546+
filterMap.insert( filteredLayer->id(), filteredLayer->subsetString() );
1547+
QString newSubsetString = eqSplit.at( 1 );
1548+
if ( !filteredLayer->subsetString().isEmpty() )
15371549
{
1538-
if ( filteredLayer )
1539-
{
1540-
filterMap.insert( layerId, filteredLayer->subsetString() );
1541-
QString newSubsetString = eqSplit.at( 1 );
1542-
if ( !filteredLayer->subsetString().isEmpty() )
1543-
{
1544-
newSubsetString.prepend( " AND " );
1545-
newSubsetString.prepend( filteredLayer->subsetString() );
1546-
}
1547-
filteredLayer->setSubsetString( newSubsetString );
1548-
}
1550+
newSubsetString.prepend( " AND " );
1551+
newSubsetString.prepend( filteredLayer->subsetString() );
15491552
}
1553+
filteredLayer->setSubsetString( newSubsetString );
15501554
}
1551-
++listPos;
15521555
}
15531556
}
15541557

0 commit comments

Comments
 (0)