I want to use WPS Aggregation process to get a pivot table based on some
attribute for a subset of the features of a layer.
[https://docs.geoserver.org/latest/en/user/services/wps/processes/gs.html#aggregation-process]

I started with a simple gs:CollectGeometries:

<?xml version="1.0" encoding="UTF-8"?><wps:Execute version="1.0.0"
service="WPS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xmlns="http://www.opengis.net/wps/1.0.0";
xmlns:wfs="http://www.opengis.net/wfs";
xmlns:wps="http://www.opengis.net/wps/1.0.0";
xmlns:ows="http://www.opengis.net/ows/1.1";
xmlns:gml="http://www.opengis.net/gml";
xmlns:ogc="http://www.opengis.net/ogc";
xmlns:wcs="http://www.opengis.net/wcs/1.1.1";
xmlns:xlink="http://www.w3.org/1999/xlink";
xsi:schemaLocation="http://www.opengis.net/wps/1.0.0
http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd";>
  <ows:Identifier>gs:CollectGeometries</ows:Identifier>
  <wps:DataInputs>
    <wps:Input>
      <ows:Identifier>features</ows:Identifier>
      <wps:Reference mimeType="text/xml"
xlink:href="http://geoserver/wfs"; method="POST">
        <wps:Body>
          <wfs:GetFeature service="WFS" version="1.0.0"
outputFormat="GML2" xmlns:bi="http://bi.org";>
            <wfs:Query typeName="bi:ways">
              <ogc:PropertyIsEqualTo>
                        <ogc:Function name="strMatches">
                              <ogc:PropertyName>myField</ogc:PropertyName>
                                <ogc:Literal>.*\b(131)\b.*</ogc:Literal>
                        </ogc:Function>
                        <ogc:Literal>true</ogc:Literal>
              </ogc:PropertyIsEqualTo>
              </wfs:Query>
          </wfs:GetFeature>
        </wps:Body>
      </wps:Reference>
    </wps:Input>
  </wps:DataInputs>
  <wps:ResponseForm>
    <wps:RawDataOutput mimeType="text/xml; subtype=gml/3.1.1">
      <ows:Identifier>result</ows:Identifier>
    </wps:RawDataOutput>
  </wps:ResponseForm>
</wps:Execute>

It works and I get a gml:MultiLineString with the features of the subset
as a result.

So I try the aggregate function with a simple filter:

<?xml version="1.0" encoding="UTF-8"?><wps:Execute version="1.0.0"
service="WPS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xmlns="http://www.opengis.net/wps/1.0.0";
xmlns:wfs="http://www.opengis.net/wfs";
xmlns:wps="http://www.opengis.net/wps/1.0.0";
xmlns:ows="http://www.opengis.net/ows/1.1";
xmlns:gml="http://www.opengis.net/gml";
xmlns:ogc="http://www.opengis.net/ogc";
xmlns:wcs="http://www.opengis.net/wcs/1.1.1";
xmlns:xlink="http://www.w3.org/1999/xlink";
xsi:schemaLocation="http://www.opengis.net/wps/1.0.0
http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd";>
  <ows:Identifier>gs:Aggregate</ows:Identifier>
  <wps:DataInputs>
    <wps:Input>
      <ows:Identifier>features</ows:Identifier>
      <wps:Reference mimeType="text/xml"
xlink:href="http://geoserver/wfs"; method="POST">
        <wps:Body>
          <wfs:GetFeature service="WFS" version="1.0.0"
outputFormat="GML2" xmlns:bicitalia="http://bi.org";>
            <wfs:Query typeName="bi:ways">
                        <ogc:Filter>
                      <ogc:PropertyIsEqualTo>
                                                
<ogc:PropertyName>myField</ogc:PropertyName>
                                                  <ogc:Literal>131</ogc:Literal>
                                         <ogc:Literal>true</ogc:Literal>
              </ogc:PropertyIsEqualTo>
                        </ogc:Filter>

              </wfs:Query>
          </wfs:GetFeature>
        </wps:Body>
      </wps:Reference>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>aggregationAttribute</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>length</wps:LiteralData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>function</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>Sum</wps:LiteralData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>singlePass</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>false</wps:LiteralData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>groupByAttributes</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>surface</wps:LiteralData>
      </wps:Data>
    </wps:Input>
     <wps:Input>
      <ows:Identifier>groupByAttributes</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>width</wps:LiteralData>
      </wps:Data>
    </wps:Input>
  </wps:DataInputs>
  <wps:ResponseForm>
    <wps:RawDataOutput mimeType="application/json">
      <ows:Identifier>result</ows:Identifier>
    </wps:RawDataOutput>
  </wps:ResponseForm>
</wps:Execute>

It works as expected.

Now I dare to use strMatches with the aggregate function:

<?xml version="1.0" encoding="UTF-8"?><wps:Execute version="1.0.0"
service="WPS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xmlns="http://www.opengis.net/wps/1.0.0";
xmlns:wfs="http://www.opengis.net/wfs";
xmlns:wps="http://www.opengis.net/wps/1.0.0";
xmlns:ows="http://www.opengis.net/ows/1.1";
xmlns:gml="http://www.opengis.net/gml";
xmlns:ogc="http://www.opengis.net/ogc";
xmlns:wcs="http://www.opengis.net/wcs/1.1.1";
xmlns:xlink="http://www.w3.org/1999/xlink";
xsi:schemaLocation="http://www.opengis.net/wps/1.0.0
http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd";>
  <ows:Identifier>gs:Aggregate</ows:Identifier>
  <wps:DataInputs>
    <wps:Input>
      <ows:Identifier>features</ows:Identifier>
      <wps:Reference mimeType="text/xml"
xlink:href="http://geoserver/wfs"; method="POST">
        <wps:Body>
          <wfs:GetFeature service="WFS" version="1.0.0"
outputFormat="GML2" xmlns:bicitalia="http://bi.org";>
            <wfs:Query typeName="bi:ways">
                        <ogc:Filter>
                      <ogc:PropertyIsEqualTo>
                        
                                         <ogc:Function name="strMatches">
                                                
<ogc:PropertyName>myField</ogc:PropertyName>
                                                
<ogc:Literal>.*\b(131)\b.*</ogc:Literal>
                                         </ogc:Function>
                                         <ogc:Literal>true</ogc:Literal>
              </ogc:PropertyIsEqualTo>
                        </ogc:Filter>

              </wfs:Query>
          </wfs:GetFeature>
        </wps:Body>
      </wps:Reference>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>aggregationAttribute</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>length</wps:LiteralData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>function</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>Sum</wps:LiteralData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>singlePass</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>false</wps:LiteralData>
      </wps:Data>
    </wps:Input>
    <wps:Input>
      <ows:Identifier>groupByAttributes</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>surface</wps:LiteralData>
      </wps:Data>
    </wps:Input>
     <wps:Input>
      <ows:Identifier>groupByAttributes</ows:Identifier>
      <wps:Data>
        <wps:LiteralData>width</wps:LiteralData>
      </wps:Data>
    </wps:Input>
  </wps:DataInputs>
  <wps:ResponseForm>
    <wps:RawDataOutput mimeType="application/json">
      <ows:Identifier>result</ows:Identifier>
    </wps:RawDataOutput>
  </wps:ResponseForm>
</wps:Execute>

Now I get an error:

<wps:ExecuteResponse xml:lang="en" service="WPS"
serviceInstance="https://bi.org/geoserver/ows?"; version="1.0.0">
<wps:Process wps:processVersion="1.0.0">
<ows:Identifier>gs:Aggregate</ows:Identifier>
<ows:Title>Aggregate</ows:Title>
<ows:Abstract>
Computes one or more aggregation functions on a feature attribute.
Functions include Count, Average, Max, Median, Min, StdDev, and Sum.
</ows:Abstract>
</wps:Process>
<wps:Status creationTime="2022-06-09T07:44:02.223Z">
<wps:ProcessFailed>
<ows:ExceptionReport version="1.1.0">
<ows:Exception exceptionCode="NoApplicableCode">
<ows:ExceptionText>
Process failed during execution java.io.IOExceptionERROR: function
strmatches(character varying, unknown) does not exist Hint: No function
matches the given name and argument types. You might need to add
explicit type casts. Position: 108
</ows:ExceptionText>
</ows:Exception>
</ows:ExceptionReport>
</wps:ProcessFailed>
</wps:Status>
</wps:ExecuteResponse>

Why is that? Why does strMatches work with gs:CollectGeometries but not
with gs:Aggregate?

Any clue?

thank you
        maxx


_______________________________________________
Geoserver-users mailing list

Please make sure you read the following two resources before posting to this 
list:
- Earning your support instead of buying it, but Ian Turton: 
http://www.ianturton.com/talks/foss4g.html#/
- The GeoServer user list posting guidelines: 
http://geoserver.org/comm/userlist-guidelines.html

If you want to request a feature or an improvement, also see this: 
https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer


Geoserver-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-users

Reply via email to