[QGIS-Developer] QGIS-Server: filter by categories in an OGC compatible way

Andreas Neumann a.neumann at carto.net
Tue Apr 9 07:14:34 PDT 2019


Hi, 

I did some test: 

Here is a long URL with the SLD (originally sent by QGIS server,
stripped away some RULES manually) and sending it back in a GetMap
request: 

https://services.geo.zg.ch/ows-oereb/Grundwasserschutz?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&BBOX=2682932,1225299,2684213,1226054&CRS=EPSG:2056&WIDTH=1615&HEIGHT=952&LAYERS=ch.zg.grundwasserschutz.gwszonen&STYLES=&FORMAT=image/png&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE&SLD=%3CStyledLayerDescriptor+xmlns%3D%22http%3A%2F%2Fwww.opengis.net%2Fsld%22+xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22+xmlns%3Axsi%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema-instance%22+xsi%3AschemaLocation%3D%22http%3A%2F%2Fwww.opengis.net%2Fsld+http%3A%2F%2Fschemas.opengis.net%2Fsld%2F1.1.0%2FStyledLayerDescriptor.xsd%22+xmlns%3Ase%3D%22http%3A%2F%2Fwww.opengis.net%2Fse%22+version%3D%221.1.0%22+xmlns%3Aogc%3D%22http%3A%2F%2Fwww.opengis.net%2Fogc%22%3E%0D%0A+%3CNamedLayer%3E%0D%0A++%3Cse%3AName%3Ech.zg.grundwasserschutz.gwszonen%3C%2Fse%3AName%3E%0D%0A++%3CUserStyle%3E%0D%0A+++%3Cse%3AName%3Edefault%3C%2Fse%3AName%3E%0D%0A+++%3Cse%3AFeatureTypeStyle%3E%0D%0A++++%3Cs
e%3ARule%3E%0D%0A+++++%3Cse%3AName%3EGrundwasserschutzzone+S1%3C%2Fse%3AName%3E%0D%0A+++++%3Cse%3ADescription%3E%0D%0A++++++%3Cse%3ATitle%3EGrundwasserschutzzone+S1%3C%2Fse%3ATitle%3E%0D%0A+++++%3C%2Fse%3ADescription%3E%0D%0A+++++%3Cogc%3AFilter+xmlns%3Aogc%3D%22http%3A%2F%2Fwww.opengis.net%2Fogc%22%3E%0D%0A++++++%3Cogc%3APropertyIsEqualTo%3E%0D%0A+++++++%3Cogc%3APropertyName%3Etyp_code%3C%2Fogc%3APropertyName%3E%0D%0A+++++++%3Cogc%3ALiteral%3ES1%3C%2Fogc%3ALiteral%3E%0D%0A++++++%3C%2Fogc%3APropertyIsEqualTo%3E%0D%0A+++++%3C%2Fogc%3AFilter%3E%0D%0A+++++%3Cse%3APolygonSymbolizer%3E%0D%0A++++++%3Cse%3AFill%3E%0D%0A+++++++%3Cse%3ASvgParameter+name%3D%22fill%22%3E%23003bb3%3C%2Fse%3ASvgParameter%3E%0D%0A++++++%3C%2Fse%3AFill%3E%0D%0A++++++%3Cse%3AStroke%3E%0D%0A+++++++%3Cse%3ASvgParameter+name%3D%22stroke%22%3E%23000080%3C%2Fse%3ASvgParameter%3E%0D%0A+++++++%3Cse%3ASvgParameter+name%3D%22stroke-width%22%3E1%3C%2Fse%3ASvgParameter%3E%0D%0A+++++++%3Cse%3ASvgParameter+name%3D%22stroke-linej
oin%22%3Ebevel%3C%2Fse%3ASvgParameter%3E%0D%0A++++++%3C%2Fse%3AStroke%3E%0D%0A+++++%3C%2Fse%3APolygonSymbolizer%3E%0D%0A++++%3C%2Fse%3ARule%3E%0D%0A+++%3C%2Fse%3AFeatureTypeStyle%3E%0D%0A++%3C%2FUserStyle%3E%0D%0A+%3C%2FNamedLayer%3E%0D%0A%3C%2FStyledLayerDescriptor%3E


The response is:

<ServiceExceptionReport xmlns="http://www.opengis.net/ogc"
version="1.3.0"> 

<ServiceException code="Invalid Parameter"> 
SLD ('<StyledLayerDescriptor xmlns="http://www.opengis.net/sld"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/sld
http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd"
xmlns:se="http://www.opengis.net/se" version="1.1.0"
xmlns:ogc="http://www.opengis.net/ogc"> <NamedLayer>
<se:Name>ch.zg.grundwasserschutz.gwszonen</se:Name> <UserStyle>
<se:Name>default</se:Name> <se:FeatureTypeStyle> <se:Rule>
<se:Name>Grundwasserschutzzone S1</se:Name> <se:Description>
<se:Title>Grundwasserschutzzone S1</se:Title> </se:Description>
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:PropertyIsEqualTo> <ogc:PropertyName>typ_code</ogc:PropertyName>
<ogc:Literal>S1</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Filter>
<se:PolygonSymbolizer> <se:Fill> <se:SvgParameter
name="fill">#003bb3</se:SvgParameter> </se:Fill> <se:Stroke>
<se:SvgParameter name="stroke">#000080</se:SvgParameter>
<se:SvgParameter name="stroke-width">1</se:SvgParameter>
<se:SvgParameter name="stroke-linejoin">bevel</se:SvgParameter>
</se:Stroke> </se:PolygonSymbolizer> </se:Rule> </se:FeatureTypeStyle>
</UserStyle> </NamedLayer> </StyledLayerDescriptor>') cannot be
converted into QString 
</ServiceException> 
</ServiceExceptionReport> 

So apparently the SLD cannot be converted to a QString. Is my encoding
in the URL above wrong or am I missing a required additional parameter? 

Can you point me to an example how to create a valid GetMap request with
an SLD submitted? 

Thanks a lot, 
Andreas 

On 2019-04-09 15:38, Andreas Neumann wrote:

> Hi, 
> 
> Does QGIS-Server support SLD styles to filter away RULEs in a GetMap Request? 
> 
> I would assume, yes, but in what encoding would I submit such an SLD in a GET request? I know that one should rather use POST reqests for such long parameters, but for experimenting, it would be ok to use GET. 
> 
> The idea would be to allow users to enable/disable categories within a given layer. 
> 
> The WMS client would first request the available rules with a GetStyles command (that part works fine) and would then filter the RULE (strip away the unwanted RULEs) and resubmit the GetMap with an SLD. Does that work with QGIS server? 
> 
> I know that one can also use the FILTER parameter, but we want to do it in an OGC compatible way, since the client being developed should work with any OGC compatible WMS server. 
> 
> Thanks for your reply, 
> 
> Andreas 
> _______________________________________________
> QGIS-Developer mailing list
> QGIS-Developer at lists.osgeo.org
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20190409/3aca6d50/attachment.html>


More information about the QGIS-Developer mailing list