Skip to content

Commit 09878e5

Browse files
committedJun 9, 2011
Zoom to filtered layers in wms server if BBOX parameter missing
1 parent 81e55a4 commit 09878e5

File tree

1 file changed

+36
-11
lines changed

1 file changed

+36
-11
lines changed
 

‎src/mapserver/qgswmsserver.cpp

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1556,24 +1556,49 @@ QMap<QString, QString> QgsWMSServer::applyRequestedLayerFilters( const QStringLi
15561556
QgsVectorLayer* filteredLayer = dynamic_cast<QgsVectorLayer*>( QgsMapLayerRegistry::instance()->mapLayer( layerId ) );
15571557
if ( filteredLayer )
15581558
{
1559-
QgsVectorDataProvider* dp = filteredLayer->dataProvider();
1560-
if ( dp )
1559+
if( filteredLayer )
15611560
{
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 );
15631569
}
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 );
15721570
}
15731571
}
15741572
++listPos;
15751573
}
15761574
}
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+
}
15771602
}
15781603
return filterMap;
15791604
}

0 commit comments

Comments
 (0)
Please sign in to comment.