Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[FEATURE][needs-docs] Add possbility to define one filter for several…
… layers
  • Loading branch information
troopa81 committed Feb 19, 2019
1 parent daa05e5 commit 21bfcfc
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 5 deletions.
14 changes: 9 additions & 5 deletions src/server/services/wms/qgswmsparameters.cpp
Expand Up @@ -1329,15 +1329,19 @@ namespace QgsWms
}
else if ( !f.isEmpty() )
{
// filter format: "LayerName:filterString;LayerName2:filterString2;..."
// filter format: "LayerName,LayerName2:filterString;LayerName3:filterString2;..."
// several filters can be defined for one layer
const QStringList splits = f.split( ':' );
if ( splits.size() == 2 )
{
QgsWmsParametersFilter filter;
filter.mFilter = splits[1];
filter.mType = QgsWmsParametersFilter::SQL;
filters.insert( splits[0], filter );
QStringList layers = splits[0].contains( ',' ) ? splits[0].split( ',' ) : QStringList() << splits[0];
for ( QString layer : layers )
{
QgsWmsParametersFilter filter;
filter.mFilter = splits[1];
filter.mType = QgsWmsParametersFilter::SQL;
filters.insert( layer, filter );
}
}
else
{
Expand Down
19 changes: 19 additions & 0 deletions tests/src/python/test_qgsserver_wms_getmap.py
Expand Up @@ -798,6 +798,25 @@ def test_wms_getmap_filter(self):
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetMap_Filter4")

# display multiple features filtered from multiple layers with same filter for some
qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": urllib.parse.quote(self.projectPath),
"SERVICE": "WMS",
"VERSION": "1.1.1",
"REQUEST": "GetMap",
"LAYERS": "Country,Country_Diagrams,Hello",
"STYLES": "",
"FORMAT": "image/png",
"BBOX": "1017529,-4226661,11271098,17063190",
"HEIGHT": "500",
"WIDTH": "500",
"CRS": "EPSG:3857",
"FILTER": "Country,Country_Diagrams: \"name\" IN ( 'africa' , 'eurasia' );Hello: \"color\" IN ( 'magenta' , 'cerese' )"
}.items())])

r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetMap_Filter5")

def test_wms_getmap_filter_ogc(self):
filter = "<Filter><PropertyIsEqualTo><PropertyName>name</PropertyName>" + \
"<Literal>eurasia</Literal></PropertyIsEqualTo></Filter>"
Expand Down
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 21bfcfc

Please sign in to comment.