0

I m trying to dynamically draw wind barbs based on a two bands tiff (geoserver 2.15). My sld is the following:

<StyledLayerDescriptor version="1.0.0" xmlns="http://www.opengis.net/sld" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sld ./StyledLayerDescriptor.xsd">   
<NamedLayer>
 <Name>Wind</Name>
 <UserStyle>
   <Title>Wind</Title>
   <FeatureTypeStyle>
     <Transformation>
       <ogc:Function name="ras:RasterAsPointCollection">
          <ogc:Function name="parameter">
             <ogc:Literal>data</ogc:Literal>
          </ogc:Function>
          <!-- Activate the logic to recognize the emisphere -->
          <ogc:Function name="parameter">
            <ogc:Literal>emisphere</ogc:Literal>
            <ogc:Literal>True</ogc:Literal>
          </ogc:Function>
          <ogc:Function name="parameter">
            <ogc:Literal>interpolation</ogc:Literal>
            <ogc:Literal>InterpolationBilinear</ogc:Literal>
          </ogc:Function>                 
          <ogc:Function name="parameter">
            <ogc:Literal>scale</ogc:Literal>
            <ogc:Function name="Categorize">
             <ogc:Function name="env">
               <ogc:Literal>wms_scale_denominator</ogc:Literal>
             </ogc:Function>                      
               <ogc:Literal>16</ogc:Literal>
               <ogc:Literal>100000</ogc:Literal>
               <ogc:Literal>8</ogc:Literal>
               <ogc:Literal>500000</ogc:Literal>
               <ogc:Literal>2</ogc:Literal>
               <ogc:Literal>1000000</ogc:Literal>
               <ogc:Literal>0.5</ogc:Literal>
               <ogc:Literal>5000000</ogc:Literal>
               <ogc:Literal>0.2</ogc:Literal>
               <ogc:Literal>10000000</ogc:Literal>
               <ogc:Literal>0.1</ogc:Literal>
               <ogc:Literal>20000000</ogc:Literal>
               <ogc:Literal>0.05</ogc:Literal>
               <ogc:Literal>60000000</ogc:Literal>
               <ogc:Literal>0.02</ogc:Literal>                     
            </ogc:Function>
          </ogc:Function>                 
       </ogc:Function>
    </Transformation>
 <Rule>           
  <PointSymbolizer>
    <Graphic>
      <Mark>
        <WellKnownName>windbarbs://default(
           <ogc:Function name="sqrt">
                          <ogc:Add>
                                <ogc:Mul>
                                  <ogc:PropertyName>Band1</ogc:PropertyName>
                                  <ogc:PropertyName>Band1</ogc:PropertyName>
                                </ogc:Mul>
                                <ogc:Mul>
                                  <ogc:PropertyName>Band2</ogc:PropertyName>
                                  <ogc:PropertyName>Band2</ogc:PropertyName>
                                </ogc:Mul>
                          </ogc:Add>
                        </ogc:Function>)[m/s]?emisphere=n
        </WellKnownName>
        <Stroke>
          <CssParameter name="stroke">#000000</CssParameter>
          <CssParameter name="stroke-width">1</CssParameter>
        </Stroke> 
      </Mark>
              <Size>
                <ogc:Function name="Categorize">
                      <!-- Value to transform -->
                     <ogc:Function name="sqrt">
                      <ogc:Add>
                        <ogc:Mul>
                         <ogc:PropertyName>Band1</ogc:PropertyName>
                         <ogc:PropertyName>Band1</ogc:PropertyName>
                        </ogc:Mul>
                        <ogc:Mul>
                         <ogc:PropertyName>Band2</ogc:PropertyName>
                         <ogc:PropertyName>Band2</ogc:PropertyName>
                        </ogc:Mul>
                      </ogc:Add>
                     </ogc:Function>
                      <ogc:Literal>6</ogc:Literal>
                      <ogc:Literal>1.543333332</ogc:Literal>
                      <ogc:Literal>24</ogc:Literal>
                   </ogc:Function>
               </Size>              
                  <Rotation>
                    <ogc:Add>
                  <ogc:Function name="Categorize">
                       <!-- Value to transform -->
                       <ogc:Function name="sqrt">
                        <ogc:Add>
                            <ogc:Mul>
                              <ogc:PropertyName>Band1</ogc:PropertyName>
                              <ogc:PropertyName>Band1</ogc:PropertyName>
                            </ogc:Mul>
                            <ogc:Mul>
                              <ogc:PropertyName>Band2</ogc:PropertyName>
                              <ogc:PropertyName>Band2</ogc:PropertyName>
                            </ogc:Mul>
                        </ogc:Add>
                      </ogc:Function>

                       <!-- Output values and thresholds -->
                       <ogc:Literal>0</ogc:Literal>
                       <ogc:Literal>1.543333332</ogc:Literal>

                        <ogc:Function name="toDegrees">
                    <ogc:Function name="atan2">
                    <ogc:PropertyName>Band1</ogc:PropertyName>
                    <ogc:PropertyName>Band2</ogc:PropertyName>
                 </ogc:Function>
                  </ogc:Function>
                </ogc:Function>
                    <ogc:Literal>180</ogc:Literal>
                      </ogc:Add>
             </Rotation>
    </Graphic>
  </PointSymbolizer>           
   <PointSymbolizer>
          <Graphic>
             <Mark>
               <WellKnownName>circle</WellKnownName>
                <Fill>
                   <CssParameter name="fill">
                      <ogc:Literal>#ff0000</ogc:Literal>
                   </CssParameter>
                </Fill>
             </Mark>
             <Size>3</Size>
          </Graphic>
       </PointSymbolizer>           
</Rule>

But I get the following error:

code="internalError"Rendering process failed Failed to evaluate the process function, error is:java.lang.IllefalArgumentExceptionQ The specified dimensional parameter is non-positive.

The same sld was working perfectly in Geoserver 2.7.4.

If I remove the scale and wms_scale_denominator factors, it's working but I have too many barbs partially overlapping, making the map unreadable.

What have I to change in SLD in order to work with this version of geoserver?

  • turn up the logging level and see which process is failing – Ian Turton Mar 7 at 8:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.