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

Jonathan Moules jonathan-lists at lightpear.com
Tue Apr 9 12:48:10 PDT 2019


Hi Andrea,

Just checked the WMS 1.3.0 spec:

"HTTP supports two request methods: GET and POST. One or both of these 
methods may be offered by a server,
and the use of the Online Resource URL differs in each case. Support for 
the GET method is mandatory; support
for the POST method is optional."

The GetCaps document should indicate whether POST is supported.

So I was wrong, they can be GET, but it's not guaranteed. Sorry about 
that, thanks for checking!

Cheers,
Jonathan

On 2019-04-09 20:31, Andreas Neumann wrote:
> Hi Jonathan,
>
> I am aware about the limit in GET requests.
>
> Are you sure that WMS servers don't support POST requests?
>
> Some Google hits suggest otherwise
>
> Geoserver:
>
> https://anitagraser.com/2010/06/09/getmap-from-geoserver-using-http-post/
>
> UMN:
>
> https://gis.stackexchange.com/questions/232215/mapserver-wms-http-post-requests 
>
>
> I am pretty sure that QGIS Server also allows POST requests, but I may 
> be wrong.
>
> Andreas
>
> Am 09.04.19 um 19:09 schrieb Jonathan Moules:
>>
>> Hi Andreas,
>>
>> Another problem you may hit - the link below is hitting it being 
>> ~2300 chars - URL's (and thus GET requests) cannot reliably be more 
>> than about 2000 characters long. At that point you need to shift over 
>> to POST requests (and I think GetMap is GET only...).
>>
>> https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers 
>>
>>
>> Cheers,
>>
>> Jonathan
>>
>>
>> On 2019-04-09 16:07, Andreas Neumann wrote:
>>> Hi Paul
>>> Thanks - now I know that I have to use SLD_BODY for the case where the
>>> SLD is in the URL.
>>> Another QGIS-Server specific question:
>>> Can I count on it that the SLD output by QGIS server with the GetStyles
>>> request can also be consumed again by QGIS server? What about complex
>>> styles (e.g. something with a style that can't easily be represented by
>>> SLD). If I first consume the styles from QGIS server, then filter and
>>> send back, would the complex styles potentially be lost/destroyed?
>>> Again: our intent here is merely to filter categories, not to change 
>>> the
>>> styles.
>>> Thanks,
>>> Andreas
>>> On 2019-04-09 16:28, pblottiere wrote:
>>>
>>>> Hi Andreas,
>>>>> Can you point me to an example how to create a valid GetMap 
>>>>> request with an SLD submitted? 
>>>>
>>>> There's a basic example in unit tests: 
>>>> https://github.com/qgis/QGIS/blob/master/tests/src/python/test_qgsserver_wms_getmap.py#L1309-L1325
>>>>
>>>> Regards,
>>>>
>>>> Paul
>>>> On 4/9/19 4:14 PM, Andreas Neumann wrote:
>>>> 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" [1] 
>>>> xmlns:xlink="http://www.w3.org/1999/xlink" [2] 
>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" [3] 
>>>> xsi:schemaLocation="http://www.opengis.net/sld 
>>>> http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd" [4] 
>>>> xmlns:se="http://www.opengis.net/se" [5] version="1.1.0" 
>>>> xmlns:ogc="http://www.opengis.net/ogc" [6]> <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" [6]> 
>>>> <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
>>>> _______________________________________________
>>>> 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
>>>
>>> _______________________________________________
>>> 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
>>>
>>>
>>> Links:
>>> ------
>>> [1] http://www.opengis.net/sld
>>> [2] http://www.w3.org/1999/xlink
>>> [3] http://www.w3.org/2001/XMLSchema-instance
>>> [4]
>>> http://www.opengis.net/sldhttp://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd 
>>>
>>> [5] http://www.opengis.net/se
>>> [6] http://www.opengis.net/ogc
>>>
>>> _______________________________________________
>>> 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
>




More information about the QGIS-Developer mailing list