eblondel / geosapi

R interface to GeoServer REST API
https://github.com/eblondel/geosapi/wiki
Other
34 stars 5 forks source link

Issue with SLD 1.1.0 in Geoserver style API #29

Closed trafficonese closed 6 years ago

trafficonese commented 6 years ago

I am trying to upload a bunch of styles to the geoserver and followed the description from here .

I tried to upload the style as a .sld file and with some xml as sldBody.

gsman$createStyle(file = "C:/day130718.sld", name = "day130718")
gsman$createStyle(sldBody = sldStyle, name = "day130718")

In both cases the style on the geoserver looks like this: <?xml version="1.0" encoding="UTF-8"?><sld:StyledLayerDescriptor xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:se="http://www.opengis.net/se" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:sld="http://www.opengis.net/sld">org.geotools.styling.StyledLayerDescriptorImpl@767735dc</sld:StyledLayerDescriptor>

Although it is an xml, it doesnt seem to be valid. I am getting these erros:

line 1: cvc-complex-type.4: Attribute 'version' must appear on element 'sld:StyledLayerDescriptor'. line 1: cvc-complex-type.2.3: Element 'sld:StyledLayerDescriptor' cannot have character [children], because the type's content type is element-only.

And the whole style-logic of the .sld file does not appear in the geoserver. This should be the uploaded style:

<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:se="http://www.opengis.net/se" version="1.1.0" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd">
  <NamedLayer>
    <se:Name>fcd_analyse:day130718</se:Name>
    <UserStyle>
      <se:Name>fcd_analyse:day130718</se:Name>
      <se:FeatureTypeStyle>
        <se:Rule>
          <se:Name> 60 - 100 </se:Name>
          <se:Description>
            <se:Title> 60 - 100 </se:Title>
          </se:Description>
          <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
            <ogc:And>
              <ogc:PropertyIsGreaterThanOrEqualTo>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>60</ogc:Literal>
              </ogc:PropertyIsGreaterThanOrEqualTo>
              <ogc:PropertyIsLessThanOrEqualTo>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>100</ogc:Literal>
              </ogc:PropertyIsLessThanOrEqualTo>
            </ogc:And>
          </ogc:Filter>
          <se:LineSymbolizer>
            <se:Stroke>
              <se:SvgParameter name="stroke">#d7191c</se:SvgParameter>
              <se:SvgParameter name="stroke-width">1</se:SvgParameter>
              <se:SvgParameter name="stroke-linejoin">bevel</se:SvgParameter>
              <se:SvgParameter name="stroke-linecap">square</se:SvgParameter>
            </se:Stroke>
          </se:LineSymbolizer>
        </se:Rule>
        <se:Rule>
          <se:Name> 100 - 200 </se:Name>
          <se:Description>
            <se:Title> 100 - 200 </se:Title>
          </se:Description>
          <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
            <ogc:And>
              <ogc:PropertyIsGreaterThan>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>100</ogc:Literal>
              </ogc:PropertyIsGreaterThan>
              <ogc:PropertyIsLessThanOrEqualTo>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>200</ogc:Literal>
              </ogc:PropertyIsLessThanOrEqualTo>
            </ogc:And>
          </ogc:Filter>
          <se:LineSymbolizer>
            <se:Stroke>
              <se:SvgParameter name="stroke">#fdae61</se:SvgParameter>
              <se:SvgParameter name="stroke-width">1</se:SvgParameter>
              <se:SvgParameter name="stroke-linejoin">bevel</se:SvgParameter>
              <se:SvgParameter name="stroke-linecap">square</se:SvgParameter>
            </se:Stroke>
          </se:LineSymbolizer>
        </se:Rule>
        <se:Rule>
          <se:Name> 200 - 300 </se:Name>
          <se:Description>
            <se:Title> 200 - 300 </se:Title>
          </se:Description>
          <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
            <ogc:And>
              <ogc:PropertyIsGreaterThan>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>200</ogc:Literal>
              </ogc:PropertyIsGreaterThan>
              <ogc:PropertyIsLessThanOrEqualTo>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>300</ogc:Literal>
              </ogc:PropertyIsLessThanOrEqualTo>
            </ogc:And>
          </ogc:Filter>
          <se:LineSymbolizer>
            <se:Stroke>
              <se:SvgParameter name="stroke">#ffffc0</se:SvgParameter>
              <se:SvgParameter name="stroke-width">1</se:SvgParameter>
              <se:SvgParameter name="stroke-linejoin">bevel</se:SvgParameter>
              <se:SvgParameter name="stroke-linecap">square</se:SvgParameter>
            </se:Stroke>
          </se:LineSymbolizer>
        </se:Rule>
        <se:Rule>
          <se:Name> 300 - 400 </se:Name>
          <se:Description>
            <se:Title> 300 - 400 </se:Title>
          </se:Description>
          <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
            <ogc:And>
              <ogc:PropertyIsGreaterThan>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>300</ogc:Literal>
              </ogc:PropertyIsGreaterThan>
              <ogc:PropertyIsLessThanOrEqualTo>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>400</ogc:Literal>
              </ogc:PropertyIsLessThanOrEqualTo>
            </ogc:And>
          </ogc:Filter>
          <se:LineSymbolizer>
            <se:Stroke>
              <se:SvgParameter name="stroke">#a6d96a</se:SvgParameter>
              <se:SvgParameter name="stroke-width">1</se:SvgParameter>
              <se:SvgParameter name="stroke-linejoin">bevel</se:SvgParameter>
              <se:SvgParameter name="stroke-linecap">square</se:SvgParameter>
            </se:Stroke>
          </se:LineSymbolizer>
        </se:Rule>
        <se:Rule>
          <se:Name> 400 - 480 </se:Name>
          <se:Description>
            <se:Title> 400 - 480 </se:Title>
          </se:Description>
          <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
            <ogc:And>
              <ogc:PropertyIsGreaterThan>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>400</ogc:Literal>
              </ogc:PropertyIsGreaterThan>
              <ogc:PropertyIsLessThanOrEqualTo>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>480</ogc:Literal>
              </ogc:PropertyIsLessThanOrEqualTo>
            </ogc:And>
          </ogc:Filter>
          <se:LineSymbolizer>
            <se:Stroke>
              <se:SvgParameter name="stroke">#1a9641</se:SvgParameter>
              <se:SvgParameter name="stroke-width">1</se:SvgParameter>
              <se:SvgParameter name="stroke-linejoin">bevel</se:SvgParameter>
              <se:SvgParameter name="stroke-linecap">square</se:SvgParameter>
            </se:Stroke>
          </se:LineSymbolizer>
        </se:Rule>
      </se:FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

Geoserver-Version: 2.12.1 geosapi-Version: 0.2-0

eblondel commented 6 years ago

@trafficonese the geosapi upload method works well, but it seems Geoserver has an issue with its style (old) API dealing with SLD version 1.1.0. You may want to contact Geoserver user list for this issue, but they may probably advise you to switch to the new API (not yet supported in geosapi). As quick workaround, you may change the version in the SLD xml root, from 1.1.0 to 1.0.0, Geoserver will not alter the content of your style. Let me know if it works for you

trafficonese commented 6 years ago

Thank you for the fast reply. Changing the version to 1.0.0 did almost work. The sld looks more correct, only the Stroke parameters are skipped and so all lines are colored in gray. Why is that happening?

Thats the resulting xml:

<?xml version="1.0" encoding="UTF-8"?>
<sld:StyledLayerDescriptor xmlns:sld="http://www.opengis.net/sld" xmlns="http://www.opengis.net/sld" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" version="1.0.0">
   <sld:NamedLayer>
      <sld:Name>fcd_analyse:day130718</sld:Name>
      <sld:UserStyle>
         <sld:Name>fcd_analyse:day130718</sld:Name>
         <sld:FeatureTypeStyle>
            <sld:Name>name</sld:Name>
            <sld:Rule>
               <sld:Name>60 - 100</sld:Name>
               <ogc:Filter>
                  <ogc:And>
                     <ogc:PropertyIsGreaterThanOrEqualTo>
                        <ogc:PropertyName>day130718</ogc:PropertyName>
                        <ogc:Literal>60</ogc:Literal>
                     </ogc:PropertyIsGreaterThanOrEqualTo>
                     <ogc:PropertyIsLessThanOrEqualTo>
                        <ogc:PropertyName>day130718</ogc:PropertyName>
                        <ogc:Literal>100</ogc:Literal>
                     </ogc:PropertyIsLessThanOrEqualTo>
                  </ogc:And>
               </ogc:Filter>
               <sld:LineSymbolizer>
                  <sld:Stroke />
               </sld:LineSymbolizer>
            </sld:Rule>
            <sld:Rule>
               <sld:Name>100 - 200</sld:Name>
               <ogc:Filter>
                  <ogc:And>
                     <ogc:PropertyIsGreaterThan>
                        <ogc:PropertyName>day130718</ogc:PropertyName>
                        <ogc:Literal>100</ogc:Literal>
                     </ogc:PropertyIsGreaterThan>
                     <ogc:PropertyIsLessThanOrEqualTo>
                        <ogc:PropertyName>day130718</ogc:PropertyName>
                        <ogc:Literal>200</ogc:Literal>
                     </ogc:PropertyIsLessThanOrEqualTo>
                  </ogc:And>
               </ogc:Filter>
               <sld:LineSymbolizer>
                  <sld:Stroke />
               </sld:LineSymbolizer>
            </sld:Rule>
            <sld:Rule>
               <sld:Name>200 - 300</sld:Name>
               <ogc:Filter>
                  <ogc:And>
                     <ogc:PropertyIsGreaterThan>
                        <ogc:PropertyName>day130718</ogc:PropertyName>
                        <ogc:Literal>200</ogc:Literal>
                     </ogc:PropertyIsGreaterThan>
                     <ogc:PropertyIsLessThanOrEqualTo>
                        <ogc:PropertyName>day130718</ogc:PropertyName>
                        <ogc:Literal>300</ogc:Literal>
                     </ogc:PropertyIsLessThanOrEqualTo>
                  </ogc:And>
               </ogc:Filter>
               <sld:LineSymbolizer>
                  <sld:Stroke />
               </sld:LineSymbolizer>
            </sld:Rule>
            <sld:Rule>
               <sld:Name>300 - 400</sld:Name>
               <ogc:Filter>
                  <ogc:And>
                     <ogc:PropertyIsGreaterThan>
                        <ogc:PropertyName>day130718</ogc:PropertyName>
                        <ogc:Literal>300</ogc:Literal>
                     </ogc:PropertyIsGreaterThan>
                     <ogc:PropertyIsLessThanOrEqualTo>
                        <ogc:PropertyName>day130718</ogc:PropertyName>
                        <ogc:Literal>400</ogc:Literal>
                     </ogc:PropertyIsLessThanOrEqualTo>
                  </ogc:And>
               </ogc:Filter>
               <sld:LineSymbolizer>
                  <sld:Stroke />
               </sld:LineSymbolizer>
            </sld:Rule>
            <sld:Rule>
               <sld:Name>400 - 480</sld:Name>
               <ogc:Filter>
                  <ogc:And>
                     <ogc:PropertyIsGreaterThan>
                        <ogc:PropertyName>day130718</ogc:PropertyName>
                        <ogc:Literal>400</ogc:Literal>
                     </ogc:PropertyIsGreaterThan>
                     <ogc:PropertyIsLessThanOrEqualTo>
                        <ogc:PropertyName>day130718</ogc:PropertyName>
                        <ogc:Literal>480</ogc:Literal>
                     </ogc:PropertyIsLessThanOrEqualTo>
                  </ogc:And>
               </ogc:Filter>
               <sld:LineSymbolizer>
                  <sld:Stroke />
               </sld:LineSymbolizer>
            </sld:Rule>
         </sld:FeatureTypeStyle>
      </sld:UserStyle>
   </sld:NamedLayer>
</sld:StyledLayerDescriptor>
trafficonese commented 6 years ago

By removing se:, the Description tag and by changing SvgParameter to CssParameter the resulting sld.file looks correct.

But when trying to do that with update I am still getting the wrong sld.file

eblondel commented 6 years ago

Yes indeed these parameters belong to sld spec 1.1.0. Great if it work

Le mer. 8 août 2018 13:42, trafficonese notifications@github.com a écrit :

By removing se:, the Description tag and by changing SvgParameter to CssParameter the resulting sld.file looks correct.

— You are receiving this because you were assigned. Reply to this email directly, view it on GitHub https://github.com/eblondel/geosapi/issues/29#issuecomment-411377088, or mute the thread https://github.com/notifications/unsubscribe-auth/ABQ1bNv-renHTt53R--s8aF1_Redyq6vks5uOs6PgaJpZM4VzeAL .

eblondel commented 6 years ago

Can you try to run create and update operations with this style? Here both operations worked:

<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor version="1.0.0" 
    xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd" 
    xmlns="http://www.opengis.net/sld" 
    xmlns:ogc="http://www.opengis.net/ogc" 
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <!-- a named layer is the basic building block of an sld document -->
  <NamedLayer>
    <Name>fcd_analysld:day130718</Name>
    <UserStyle>
      <Name>fcd_analysld:day130718</Name>
      <FeatureTypeStyle>
        <Rule>
          <Name> 60 - 100 </Name>
          <Description>
            <Title> 60 - 100 </Title>
          </Description>
          <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
            <ogc:And>
              <ogc:PropertyIsGreaterThanOrEqualTo>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>60</ogc:Literal>
              </ogc:PropertyIsGreaterThanOrEqualTo>
              <ogc:PropertyIsLessThanOrEqualTo>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>100</ogc:Literal>
              </ogc:PropertyIsLessThanOrEqualTo>
            </ogc:And>
          </ogc:Filter>
          <LineSymbolizer>
            <Stroke>
              <CssParameter name="stroke">#d7191c</CssParameter>
              <CssParameter name="stroke-width">1</CssParameter>
              <CssParameter name="stroke-linejoin">bevel</CssParameter>
              <CssParameter name="stroke-linecap">square</CssParameter>
            </Stroke>
          </LineSymbolizer>
        </Rule>
        <Rule>
          <Name> 100 - 200 </Name>
          <Description>
            <Title> 100 - 200 </Title>
          </Description>
          <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
            <ogc:And>
              <ogc:PropertyIsGreaterThan>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>100</ogc:Literal>
              </ogc:PropertyIsGreaterThan>
              <ogc:PropertyIsLessThanOrEqualTo>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>200</ogc:Literal>
              </ogc:PropertyIsLessThanOrEqualTo>
            </ogc:And>
          </ogc:Filter>
          <LineSymbolizer>
            <Stroke>
              <CssParameter name="stroke">#fdae61</CssParameter>
              <CssParameter name="stroke-width">1</CssParameter>
              <CssParameter name="stroke-linejoin">bevel</CssParameter>
              <CssParameter name="stroke-linecap">square</CssParameter>
            </Stroke>
          </LineSymbolizer>
        </Rule>
        <Rule>
          <Name> 200 - 300 </Name>
          <Description>
            <Title> 200 - 300 </Title>
          </Description>
          <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
            <ogc:And>
              <ogc:PropertyIsGreaterThan>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>200</ogc:Literal>
              </ogc:PropertyIsGreaterThan>
              <ogc:PropertyIsLessThanOrEqualTo>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>300</ogc:Literal>
              </ogc:PropertyIsLessThanOrEqualTo>
            </ogc:And>
          </ogc:Filter>
          <LineSymbolizer>
            <Stroke>
              <CssParameter name="stroke">#ffffc0</CssParameter>
              <CssParameter name="stroke-width">1</CssParameter>
              <CssParameter name="stroke-linejoin">bevel</CssParameter>
              <CssParameter name="stroke-linecap">square</CssParameter>
            </Stroke>
          </LineSymbolizer>
        </Rule>
        <Rule>
          <Name> 300 - 400 </Name>
          <Description>
            <Title> 300 - 400 </Title>
          </Description>
          <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
            <ogc:And>
              <ogc:PropertyIsGreaterThan>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>300</ogc:Literal>
              </ogc:PropertyIsGreaterThan>
              <ogc:PropertyIsLessThanOrEqualTo>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>400</ogc:Literal>
              </ogc:PropertyIsLessThanOrEqualTo>
            </ogc:And>
          </ogc:Filter>
          <LineSymbolizer>
            <Stroke>
              <CssParameter name="stroke">#a6d96a</CssParameter>
              <CssParameter name="stroke-width">1</CssParameter>
              <CssParameter name="stroke-linejoin">bevel</CssParameter>
              <CssParameter name="stroke-linecap">square</CssParameter>
            </Stroke>
          </LineSymbolizer>
        </Rule>
        <Rule>
          <Name> 400 - 480 </Name>
          <Description>
            <Title> 400 - 480 </Title>
          </Description>
          <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
            <ogc:And>
              <ogc:PropertyIsGreaterThan>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>400</ogc:Literal>
              </ogc:PropertyIsGreaterThan>
              <ogc:PropertyIsLessThanOrEqualTo>
                <ogc:PropertyName>day130718</ogc:PropertyName>
                <ogc:Literal>480</ogc:Literal>
              </ogc:PropertyIsLessThanOrEqualTo>
            </ogc:And>
          </ogc:Filter>
          <LineSymbolizer>
            <Stroke>
              <CssParameter name="stroke">#1a9641</CssParameter>
              <CssParameter name="stroke-width">1</CssParameter>
              <CssParameter name="stroke-linejoin">bevel</CssParameter>
              <CssParameter name="stroke-linecap">square</CssParameter>
            </Stroke>
          </LineSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>
trafficonese commented 6 years ago

Both (create & update) operations work with this style.

eblondel commented 6 years ago

Look at the changes they are few.. i removed the 'se' namespace declaration and the modifications you mentioned. If you created the SLD files with some map style editor see if you can select SLD 1.0 instead.. If your task is solved youcan close this ticket. Best regards, Emmanuel