@@ -1556,24 +1556,49 @@ QMap<QString, QString> QgsWMSServer::applyRequestedLayerFilters( const QStringLi
1556
1556
QgsVectorLayer* filteredLayer = dynamic_cast <QgsVectorLayer*>( QgsMapLayerRegistry::instance ()->mapLayer ( layerId ) );
1557
1557
if ( filteredLayer )
1558
1558
{
1559
- QgsVectorDataProvider* dp = filteredLayer->dataProvider ();
1560
- if ( dp )
1559
+ if ( filteredLayer )
1561
1560
{
1562
- filterMap.insert ( layerId, dp->subsetString () );
1561
+ filterMap.insert ( layerId, filteredLayer->subsetString () );
1562
+ QString newSubsetString = eqSplit.at ( 1 );
1563
+ if ( !filteredLayer->subsetString ().isEmpty () )
1564
+ {
1565
+ newSubsetString.prepend ( " AND " );
1566
+ newSubsetString.prepend ( filteredLayer->subsetString () );
1567
+ }
1568
+ filteredLayer->setSubsetString ( newSubsetString );
1563
1569
}
1564
-
1565
- QString newSubsetString = eqSplit.at ( 1 );
1566
- if ( !dp->subsetString ().isEmpty () )
1567
- {
1568
- newSubsetString.prepend ( " AND " );
1569
- newSubsetString.prepend ( dp->subsetString () );
1570
- }
1571
- dp->setSubsetString ( newSubsetString );
1572
1570
}
1573
1571
}
1574
1572
++listPos;
1575
1573
}
1576
1574
}
1575
+
1576
+ // No BBOX parameter in request. We use the union of the filtered layer
1577
+ // to provide the functionality of zooming to selected records via (enhanced) WMS.
1578
+ if ( mMapRenderer && mMapRenderer ->extent ().isEmpty () )
1579
+ {
1580
+ QgsRectangle filterExtent;
1581
+ QMap<QString, QString>::const_iterator filterIt = filterMap.constBegin ();
1582
+ for (; filterIt != filterMap.constEnd (); ++filterIt )
1583
+ {
1584
+ QgsMapLayer* mapLayer = QgsMapLayerRegistry::instance ()->mapLayer ( filterIt.key () );
1585
+ if ( !mapLayer )
1586
+ {
1587
+ continue ;
1588
+ }
1589
+
1590
+ QgsRectangle layerExtent = mapLayer->extent ();
1591
+ if ( filterExtent.isEmpty () )
1592
+ {
1593
+ filterExtent = layerExtent;
1594
+ }
1595
+ else
1596
+ {
1597
+ filterExtent.combineExtentWith ( &layerExtent );
1598
+ }
1599
+ }
1600
+ mMapRenderer ->setExtent ( filterExtent );
1601
+ }
1577
1602
}
1578
1603
return filterMap;
1579
1604
}
0 commit comments