Skip to content

Commit 21bfcfc

Browse files
committed
[FEATURE][needs-docs] Add possbility to define one filter for several layers
1 parent daa05e5 commit 21bfcfc

File tree

4 files changed

+28
-5
lines changed

4 files changed

+28
-5
lines changed

src/server/services/wms/qgswmsparameters.cpp

+9-5
Original file line numberDiff line numberDiff line change
@@ -1329,15 +1329,19 @@ namespace QgsWms
13291329
}
13301330
else if ( !f.isEmpty() )
13311331
{
1332-
// filter format: "LayerName:filterString;LayerName2:filterString2;..."
1332+
// filter format: "LayerName,LayerName2:filterString;LayerName3:filterString2;..."
13331333
// several filters can be defined for one layer
13341334
const QStringList splits = f.split( ':' );
13351335
if ( splits.size() == 2 )
13361336
{
1337-
QgsWmsParametersFilter filter;
1338-
filter.mFilter = splits[1];
1339-
filter.mType = QgsWmsParametersFilter::SQL;
1340-
filters.insert( splits[0], filter );
1337+
QStringList layers = splits[0].contains( ',' ) ? splits[0].split( ',' ) : QStringList() << splits[0];
1338+
for ( QString layer : layers )
1339+
{
1340+
QgsWmsParametersFilter filter;
1341+
filter.mFilter = splits[1];
1342+
filter.mType = QgsWmsParametersFilter::SQL;
1343+
filters.insert( layer, filter );
1344+
}
13411345
}
13421346
else
13431347
{

tests/src/python/test_qgsserver_wms_getmap.py

+19
Original file line numberDiff line numberDiff line change
@@ -798,6 +798,25 @@ def test_wms_getmap_filter(self):
798798
r, h = self._result(self._execute_request(qs))
799799
self._img_diff_error(r, h, "WMS_GetMap_Filter4")
800800

801+
# display multiple features filtered from multiple layers with same filter for some
802+
qs = "?" + "&".join(["%s=%s" % i for i in list({
803+
"MAP": urllib.parse.quote(self.projectPath),
804+
"SERVICE": "WMS",
805+
"VERSION": "1.1.1",
806+
"REQUEST": "GetMap",
807+
"LAYERS": "Country,Country_Diagrams,Hello",
808+
"STYLES": "",
809+
"FORMAT": "image/png",
810+
"BBOX": "1017529,-4226661,11271098,17063190",
811+
"HEIGHT": "500",
812+
"WIDTH": "500",
813+
"CRS": "EPSG:3857",
814+
"FILTER": "Country,Country_Diagrams: \"name\" IN ( 'africa' , 'eurasia' );Hello: \"color\" IN ( 'magenta' , 'cerese' )"
815+
}.items())])
816+
817+
r, h = self._result(self._execute_request(qs))
818+
self._img_diff_error(r, h, "WMS_GetMap_Filter5")
819+
801820
def test_wms_getmap_filter_ogc(self):
802821
filter = "<Filter><PropertyIsEqualTo><PropertyName>name</PropertyName>" + \
803822
"<Literal>eurasia</Literal></PropertyIsEqualTo></Filter>"
Loading
Loading

0 commit comments

Comments
 (0)