0

I have raindata as a point shapefile in WGS84:

Raindata

The distance between the points is 11km en the boundingbox of the data is 450*300km.

I want to visualize this data in Geoserver, not as a point but as interpolated polygons. This can be done using vec:BarnesSurface in the SLD.
More info about this at https://docs.boundlessgeo.com/suite/1.1.0/cartography/rt/barnes.html

I'm having trouble figuring out what values to use in the SLD. I can't find much documentation about this.

With my data, what is are logical values for scale, maxObservationDistance or pixelsPerCell?

This is my SLD:

<?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">
  <NamedLayer>
    <Name>Barnes surface</Name>
    <UserStyle>
      <Title>Barnes Surface</Title>
      <Abstract>A style that produces a Barnes surface using a rendering transformation</Abstract>
      <FeatureTypeStyle>
   <Transformation>
     <ogc:Function name="vec:BarnesSurface">
       <ogc:Function name="parameter">
         <ogc:Literal>data</ogc:Literal>
       </ogc:Function>
       <ogc:Function name="parameter">
         <ogc:Literal>valueAttr</ogc:Literal>
         <ogc:Literal>rain</ogc:Literal>
       </ogc:Function>
       <ogc:Function name="parameter">
         <ogc:Literal>scale</ogc:Literal>
         <ogc:Literal>0.05</ogc:Literal>
       </ogc:Function>
       <ogc:Function name="parameter">
         <ogc:Literal>convergence</ogc:Literal>
         <ogc:Literal>0.3</ogc:Literal>
       </ogc:Function>
       <ogc:Function name="parameter">
         <ogc:Literal>passes</ogc:Literal>
         <ogc:Literal>2</ogc:Literal>
       </ogc:Function>
       <ogc:Function name="parameter">
         <ogc:Literal>minObservations</ogc:Literal>
         <ogc:Literal>1</ogc:Literal>
       </ogc:Function>
       <ogc:Function name="parameter">
         <ogc:Literal>maxObservationDistance</ogc:Literal>
         <ogc:Literal>0.2</ogc:Literal>
       </ogc:Function>
       <ogc:Function name="parameter">
         <ogc:Literal>pixelsPerCell</ogc:Literal>
         <ogc:Literal>50</ogc:Literal>
       </ogc:Function>
       <ogc:Function name="parameter">
         <ogc:Literal>queryBuffer</ogc:Literal>
         <ogc:Literal>0</ogc:Literal>
       </ogc:Function>
       <ogc:Function name="parameter">
         <ogc:Literal>outputBBOX</ogc:Literal>
         <ogc:Function name="env">
            <ogc:Literal>wms_bbox</ogc:Literal>
         </ogc:Function>
       </ogc:Function>
       <ogc:Function name="parameter">
         <ogc:Literal>outputWidth</ogc:Literal>
         <ogc:Function name="env">
            <ogc:Literal>wms_width</ogc:Literal>
         </ogc:Function>
       </ogc:Function>
       <ogc:Function name="parameter">
         <ogc:Literal>outputHeight</ogc:Literal>
         <ogc:Function name="env">
            <ogc:Literal>wms_height</ogc:Literal>
         </ogc:Function>
       </ogc:Function>
     </ogc:Function>
   </Transformation>
   <Rule>
     <RasterSymbolizer>
       <!-- specify geometry attribute of input to pass validation -->
       <Geometry><ogc:PropertyName>geom</ogc:PropertyName></Geometry>
       <Opacity>0.8</Opacity>
       <ColorMap type="ramp" >
         <ColorMapEntry color="#FF0000" quantity="0" label="0" opacity="0" />
         <ColorMapEntry color="#EBFBFF" quantity="0.1" label="0.1" />
         <ColorMapEntry color="#0000FF" quantity="300" label="300" />
       </ColorMap>
     </RasterSymbolizer>
    </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

This SLD does not give the expected result and also the layer preview is painfully slow.

I tried altering scale and/or maxObservationDistance but I'm not sure what would be logical values.

Paul Meems
  • 3,002
  • 4
  • 35
  • 66
  • I can't add anything to the explaination in the docs, but this is probably not what you want to do anyway as the interpolation is redone every time the map pans and will give a different answer due to the change of bounds including/excluding some points. You should interpolate one (e.g. in QGis) and then serve the result in GeoServer - it will be reliable and much faster and will allow tiling to give cache speedup too. – Ian Turton Oct 01 '20 at 07:41
  • Thanks @IanTurton I didn't understand the interpolation would be done every time the map pans. I'll think about something else. I think PostGIS has some rasterization as well. – Paul Meems Oct 01 '20 at 07:50

0 Answers0