QGIS icon indicating copy to clipboard operation
QGIS copied to clipboard

Inconsistent use of namedlayer/userlayer when exporting sld from grid layer or vector layer

Open pvgenuchten opened this issue 1 year ago • 1 comments

Feature description

Inconsistent use of namedlayer/userlayer when exporting sld from grid layer and vector layer. When sld from vector layer is exported the namedlayer element is correctly applied, when exporting from grid layer, the UserLayer element in incorrectly used.

The different behavior seems related to the use of SLD 1.0 vs SLD 1.1 for grid layers at https://github.com/qgis/QGIS/blob/38e955291af9d45ef04795adf080c698dd3c2e30/src/core/qgsmaplayer.cpp#L2203-L2216

When reading the sld spec, but also in the 1.0 spec:

11.3 User-defined layers
In addition to using named layers, it is also useful to be able to define custom userdefined layers for rendering. The Schema fragment for user-defined layers is as follows:

My impression is that QGIS incorrectly uses the userlayer element for grid layers in generated SLD when exporting SLD 1.0 for a grid layer. The 'namedlayer' element seems more appropriate.

Additional context

At the moment Mapserver is not able to render SLD's exported from grids in QGIS, because it only supports the namedLayer element in SLD.

pvgenuchten avatar Jun 17 '24 22:06 pvgenuchten

Also suffering from this. Adding to this, when loading into GeoServer, it can't be validated, thus, can't use the style.

dgva avatar Jul 31 '24 15:07 dgva

Just noticed that when importing a SLD namedlayer style on a grid layer, the error occurs: Layer type 1 not supported (layertype 1 means grids?) Image

Where if you load a SLD with userlayer an error is shown: no NamedLayer element is found Image

pvgenuchten avatar Jun 11 '25 14:06 pvgenuchten

Expected output of the SLD exporter is

<?xml version="1.0" encoding="UTF-8"?> 
<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" version="1.0.0" xmlns:gml="http://www.opengis.net/gml" xmlns:sld="http://www.opengis.net/sld">
  <NamedLayer>
    <UserStyle>
      <Title>af_BLD_T__M_agg30cm_250m.tif</Title>
      <FeatureTypeStyle>
        <Rule>
          <RasterSymbolizer>
           <Geometry>
              <PropertyName>Bulk Density (fine earth) 0-30cm, units: kg/m3</PropertyName>
              <Opacity>1</Opacity>
            </Geometry>
            <ColorMap type="intervals">
            <ColorMapEntry quantity="760" color="#C26A77" label="760 - 1200"/>
            <ColorMapEntry quantity="1200" color="#C78078" label="1200 - 1260"/>
            <ColorMapEntry quantity="1260" color="#CD9679" label="1260 - 1310"/>
            <ColorMapEntry quantity="1310" color="#D3AC7B" label="1310 - 1360"/>
            <ColorMapEntry quantity="1360" color="#D9C27C" label="1360 - 1410"/>
            <ColorMapEntry quantity="1410" color="#C9C375" label="1410 - 1460"/>
            <ColorMapEntry quantity="1460" color="#A3AF66" label="1460 - 1490"/>
            <ColorMapEntry quantity="1490" color="#7E9C56" label="1490 - 1530"/>
            <ColorMapEntry quantity="1530" color="#588847" label="1530 - 1590"/>
            <ColorMapEntry quantity="1590" color="#337538" label="1590"/>
            </ColorMap>
          </RasterSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

currently exported is

<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" version="1.0.0">
  <UserLayer>
    <sld:UserStyle>
      <sld:Name>sl3_som3035_arable_1000m</sld:Name>
      <sld:FeatureTypeStyle>
        <sld:Rule>
          <sld:RasterSymbolizer>
            <sld:ColorMap extended="true" type="ramp">
              <sld:ColorMapEntry color="#30123b" quantity="0.4154948890209198" label="0.4155"/>
              <sld:ColorMapEntry color="#321543" quantity="0.61794917900111379" label="0.6179"/>

pvgenuchten avatar Jun 13 '25 11:06 pvgenuchten