[mapserver-users] Fwd: [Qgis-user] Wrong retrieving of wms legend

Andrea Peri aperi2007 at gmail.com
Thu Sep 8 06:11:01 PDT 2016


Hi post here a response from the qgis-user list about a question on
the GetLegendGraphics.
With the last version of qgis, when try to add in qgis a layer wms of
kind RASTER the qgis retrieve the legend OF ALL the layer available in
the service.
I guess this was a bug. But instead as the qgis guys response me seem
to be a right action.
The question seem that a layer wms should aALWAYS return a style. So
the question I guess is more interesting for the mapserver list:
A WMS LAYER of kind IMAGE (a catalogue of ortophoto as example) should
always have a style ?

(sorry for long thread repost, but I guess is better to post all the
discussion to help understand)

Thx,

Andrea.


2016-09-08 14:45 GMT+02:00 Richard Duivenvoorde <rdmailings at duif.net>:
>
> Hi Andrea,
>
> note that I also added a comment at the code which is reponsible for this:
>
> https://github.com/qgis/QGIS/commit/69bed218373b3f93671f65bc3d02c45cbf683a48#comments
>
> Patrick's response there on this (see comment):
>
> "
> IMHO, there is nothing to fix in QGIS, here. If a layer defines no
> style, it's wanted that it inherits the parent layer's style. Have a
> look at chapter 7.2.4.6.5 of the WMS implementation specification:
>
> Style declarations are inherited by child Layers. A child shall not
> redefine a Style with the same Name as one
> inherited from a parent. A child may define a new Style with a new Name
> that is not available for the parent Layer.
>
> This PR is just a workaround for MapServer that is defining a style
> named default for both the parent and the child layers. This was making
> QGIS show 2 default styles for every child layers. Style inheritance was
> already there before. Now at has just a saner behavior in regard to
> non-standard compliant servers.
>
> I'll let you forward that to the user ML. I was not subscribed to it and
> therefore cannot reply directly to the thread.
> "
>
> So in short: mapserver does not define a style for the actual layer, so
> qgis tries to get the style (AND it's legendgraphic) from the parent
> layer/node:
>
> http://www502.regione.toscana.it/wmsraster/com.rt.wms.RTmap/wms?map=wmsofc&request=GetCapabilities&service=WMS
>
> in this case mapserver's rootnode, which has a legendgraphic with all
> child symbols...
>
> so my fix would be: define a style for the child layer 'rt_ofc.10k54',
> so I do not think it has something to do with the dot in the naming?
>
> Regards,
>
> Richard Duivenvoorde
>
>
> On 03-09-16 20:42, aperi2007 wrote:
>> Hi Richard,
>>
>>
>> I tested also the QGIS 2.8 and the QGIS 2.12 no one of them has this issue.
>>
>>>Bingo: that is the one we are actually retrieving, the parent node's
>>
>>> style and legend.
>>>
>>> So: not sure if that is desired behaviour... at least not for a legend..
>>
>> Ok, now is more clear what is happened.
>>
>> The "rt_ofc" is the name of all the wms service.
>> So apply-ing the value "rt_ofc" to the layers parameter mean ask to the
>> wms server to send the response for ALL the layers available in the
>> service.
>>
>> So the problem more probably is that qgis is failing to parse the
>> layername stopping it at the dot character.
>>
>> The QGIS 2.8 and 2.12 don't fail to parse these wms layersname.
>> So it is due to some evolution put in the last qgis.
>>
>> The "rt_oc" part of the layer name is also the name of all the wms service.
>>
>> This will cause to receive the legend of ALL the layers.
>>
>> A.
>>
>>
>>
>> Il 03/09/2016 20:03, Richard Duivenvoorde ha scritto:
>>> Ok, at first the problem seemed the dot in the layernames:
>>>
>>> This is the GetMap request QGIS fires off:
>>>
>>> http://www502.regione.toscana.it/wmsraster/com.rt.wms.RTmap/wms?map=wmsofc&map_resolution=91&language=ita&&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&BBOX=1063072.194008157123,5185232.179659257643,1388677.251798849553,5543677.86921980232&CRS=EPSG:3857&WIDTH=518&HEIGHT=569&LAYERS=rt_ofc.10k54&STYLES=&FORMAT=image/png&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE
>>>
>>>
>>> as you see: LAYERS=rt_ofc.10k54
>>>
>>> This is the GetLegendGraphic url created by QGIS:
>>>
>>> http://www502.regione.toscana.it/wmsraster/com.rt.wms.RTmap/wms?map=wmsofc&map_resolution=91&language=ita&version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=rt_ofc&format=image/png&STYLE=default&&TRANSPARENT=true
>>>
>>>
>>> NOTE: layer=rt_ofc
>>>
>>> (all seen in the debug info on QGIS on Linux (Debug)):
>>>
>>> Which SHOULD be:
>>>
>>> http://www502.regione.toscana.it/wmsraster/com.rt.wms.RTmap/wms?map=wmsofc&map_resolution=91&language=ita&version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=rt_ofc.10k54&format=image/png&STYLE=default&&TRANSPARENT=true
>>>
>>>
>>> NOTE, I edited: layer=rt_ofc.10k54
>>>
>>> Mmm, not much of an legend, but as least NOT an image of all (vector)
>>> layer legends...
>>>
>>> So crux is: IF a layer parameter has a dot in it's name, only the first
>>> part is used as parameter....
>>>
>>> BUT: what is the GetLegendGraphic url advertised by the server:
>>>
>>> http://www502.regione.toscana.it/wmsraster/com.rt.wms.RTmap/wms?map=wmsofc&request=GetCapabilities&service=WMS
>>>
>>>
>>> Mmm, actually no style/LegendURL advertised :-(
>>>
>>> https://github.com/qgis/QGIS/blob/master/src/providers/wms/qgswmsprovider.cpp#L249
>>>
>>>
>>> points to pickLegend:
>>>
>>> https://github.com/qgis/QGIS/blob/master/src/providers/wms/qgswmsprovider.cpp#L227
>>>
>>>
>>> which looks ok:
>>>
>>> BUT apparently it picks the style of the PARENT-NODE of the layer: THAT
>>> one has
>>>
>>> <OnlineResource xlink:type="simple"
>>> xlink:href="http://www502.regione.toscana.it/wmsraster/com.rt.wms.RTmap/wms?map=wmsofc&map_resolution=91&language=ita&version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=rt_ofc&format=image/png&STYLE=default"/>
>>>
>>>
>>> Bingo: that is the one we are actually retrieving, the parent node's
>>> style and legend.
>>>
>>> So: not sure if that is desired behaviour... at least not for a legend..
>>>
>>> I think what QGIS does is 'inheriting' default styles from parent nodes.
>>> In this case that is plain wrong.
>>>
>>> Copy/paste this in an QGIS issue?
>>>
>>> Maybe for the getLegend url, the style should not be inherited?
>>> Anybody other ideas?
>>>
>>> Regards,
>>>
>>> Richard Duivenvoorde
>>>
>>>
>>> On 03-09-16 16:08, Andrea Peri wrote:
>>>> Hi Richard.
>>>> Effectivelly I tested your wms and using it the legend is correctly
>>>> retrieved only for the layer choose.
>>>> I use qgis 2.16.1.
>>>> After I re-test my original url:
>>>> (this)
>>>> http://www502.regione.toscana.it/wmsraster/com.rt.wms.RTmap/wms?map=wmsofc
>>>>
>>>>
>>>> And again I see the qgis retrieve ALL the legend of all the layers.
>>>> I tested other wms of our set of wms service and seem only this has
>>>> that problem.
>>>>
>>>> So I do some more proof tested.
>>>>
>>>> And found where is the ISSUE.
>>>> QGIS wrong to get the legend when the layer wms requested HAS NOT A
>>>> LEGEND.
>>>> Infact the issu happened when I ask any layer of our wms that is a
>>>> RASTER LAYER with no legend defined.
>>>> Instead not happened when the layer wms is of a vector dataset (where
>>>> the legend happened).
>>>>
>>>> SO If you whould test and see the issue you should use our wms service:
>>>> http://www502.regione.toscana.it/wmsraster/com.rt.wms.RTmap/wms?map=wmsofc
>>>>
>>>>
>>>> and choose the layer
>>>> rt_ofc.1954
>>>>
>>>> that return the orthophoto imagery of the year 1954.
>>>> With this layer the qgis will retrieve ALL the legends of the wms
>>>> service.
>>>>
>>>> Instead if you choose the layer
>>>> rt_ofc.1954.qu
>>>> that is a vector dataset (quadre of union)
>>>> qgis correctly retrieve only its own legend.
>>>>
>>>> Please can you confirm this ?
>>>>
>>>> Thx
>>>>
>>>> A.
>>>>
>>>>
>>>>
>>>>
>>>> 2016-09-03 9:51 GMT+02:00 Richard Duivenvoorde <rdmailings at duif.net>:
>>>>> On 31-08-16 21:10, Andrea Peri wrote:
>>>>>> Hi,
>>>>>> I notive that in the qgis 2.14.5 and in the qgis 2.16.1
>>>>>> when adding a layer wms choosing from a list of layers available in
>>>>>> the wms service connected,
>>>>>> qgis retrieve as legend of the layer ALL the legends of all the wms
>>>>>> layer available in the wms service.
>>>>>> Using the 2.8 QGIS version, the legend is retrieve correctly (only the
>>>>>> layer choosed).
>>>>>>
>>>>>> Someone can confirm this as an issue ?
>>>>> Hi Andrea,
>>>>>
>>>>> nope, I have 2.16.1 here, and for example this wms:
>>>>>
>>>>> https://geodata.nationaalgeoregister.nl/bestuurlijkegrenzen/ows?SERVICE=WMS&
>>>>>
>>>>>
>>>>> I can choose either provincies or landsgrenzen (provinces or country
>>>>> borders), from that same server and both have their own legend.
>>>>>
>>>>> Do you have a WMS url for which this happens for you?
>>>>>
>>>>> What if you look at the capabilities of that service and do the
>>>>> getLegendGrapicRequest by hand. Is it also wrong?
>>>>>
>>>>> Else: create a good issue, with url's screendumps etc etc
>>>>>
>>>>> Regards,
>>>>>
>>>>> Richard Duivenvoorde
>>>>>
>>>>
>>>>
>>
>> _______________________________________________
>> Qgis-user mailing list
>> Qgis-user at lists.osgeo.org
>> List info: http://lists.osgeo.org/mailman/listinfo/qgis-user
>> Unsubscribe: http://lists.osgeo.org/mailman/listinfo/qgis-user
>



-- 
-----------------
Andrea Peri
. . . . . . . . .
qwerty àèìòù
-----------------


More information about the mapserver-users mailing list