Jim,

Thank you for the tip. I can confirm that using the "REFERENCE" option in
the WPS builder with a URL for the GetFeature changes the behavior to what
I would expect.

Here's the body with this option:

<?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:Query</ows:Identifier>
  <wps:DataInputs>
    <wps:Input>
      <ows:Identifier>features</ows:Identifier>
      <wps:Reference mimeType="application/wfs-collection-1.1"
xlink:href="http://localhost:8888/geoserver/ows?service=wfs&amp;version=1.1.0&amp;request=GetFeature&amp;TYPENAME=country_boundaries&amp;cql_filter=iso_a2=%27US%27&amp;maxFeatures=100";
method="GET"/>
    </wps:Input>
  </wps:DataInputs>
  <wps:ResponseForm>
    <wps:RawDataOutput mimeType="application/json">
      <ows:Identifier>result</ows:Identifier>
    </wps:RawDataOutput>
  </wps:ResponseForm>
</wps:Execute>


[image: image.png]
The SQL query then has the WHERE clause like I'd expect: WHERE ("iso_a2" =
'US' AND "iso_a2" IS NOT NULL ) LIMIT 100

Looking back at the XML bodies, they are very similar. Both use Reference
elements for the features input, just one is using a GET and the other a
POST. So this still seems like odd behavior to me.

Jason Newmoyer
Newmoyer Geospatial Solutions
843.606.0424
ja...@newmoyergeospatial.com




On Tue, Apr 27, 2021 at 6:41 PM Jim Hughes <jhug...@ccri.com> wrote:

> Hi Jason,
>
> I don't think this is a technically a bug.  The Process you are using
> comes from GeoTools; its input assumes that it gets a
> SimpleFeatureCollection, some attributes, and a filter.  When GeoServer is
> running a WPS, in your request, the block after
> "<ows:Identifier>features</ows:Identifier>" is calling for all the features
> out of PostGIS.  The results are then filtered in memory as you have
> seen/guessed(1).
>
> I think it is possible to specify a filter when defining the
> "wps:Reference"; I just never remember how to do so and I struggle to find
> where it is.
>
> Cheers,
>
> Jim
>
> 1.
> https://github.com/geotools/geotools/blob/main/modules/unsupported/process-feature/src/main/java/org/geotools/process/vector/QueryProcess.java#L53-L55
>
> p.s. Sorry for the duplicate posts.
>
>
> On 4/27/21 4:25 PM, Jason Newmoyer wrote:
>
> I am seeing some behavior that seems off from what I understand should be
> happening with the WPS.
>
> Using a PostGIS data store, If I make a WFS GetFeature query, and watch
> the Postgres logs with log_statement "all" I can see the WHERE clause
> properly constructed in the query to the database:
>
> Example:
> http://localhost:8888/geoserver/ows?service=wfs&version=1.1.0&request=GetFeature&TYPENAME=country_boundaries&cql_filter=iso_a2='US'&maxfeatures=10
>
> produces a SQL query like this: SELECT "gid",encode(ST_AsEWKB("geom"),
> 'base64') as "geom","... FROM "ne_50m_admin_0_countries_lakes" *WHERE
> ("iso_a2" = 'US' AND "iso_a2" IS NOT NULL )* LIMIT 1000000
>
> However, If I use the WPS gs:Query process in the same manner with CQL:
>
> <?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:Query</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:ngs="http://newmoyergeospatial.com";>
>             <wfs:Query typeName="ngs:country_boundaries"/>
>           </wfs:GetFeature>
>         </wps:Body>
>       </wps:Reference>
>     </wps:Input>
>     <wps:Input>
>       <ows:Identifier>filter</ows:Identifier>
>       <wps:Data>
>         <wps:ComplexData mimeType="text/plain; 
> subtype=cql"><![CDATA[iso_a2='US']]></wps:ComplexData>
>       </wps:Data>
>     </wps:Input>
>   </wps:DataInputs>
>   <wps:ResponseForm>
>     <wps:RawDataOutput mimeType="application/json">
>       <ows:Identifier>result</ows:Identifier>
>     </wps:RawDataOutput>
>   </wps:ResponseForm>
> </wps:Execute>
>
> I see a SQL query like this: SELECT "gid",encode(ST_AsEWKB("geom"),
> 'base64') as "geom", ... FROM "ne_50m_admin_0_countries_lakes" LIMIT 1000000
>
> Its missing the *where clause* so presumably post filtering is happening
> in memory, which is not ideal. And in some cases a deal breaker.
>
> Bug? Any workarounds to try?
>
> So far have tried using vec:Query, and tried using XML filters vs CQL.
> Same results.
>
> Thanks.
>
> Jason Newmoyer
> Newmoyer Geospatial Solutions
> 843.606.0424
> ja...@newmoyergeospatial.com
>
>
>
>
> _______________________________________________
> 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.nethttps://lists.sourceforge.net/lists/listinfo/geoserver-users
>
>
> _______________________________________________
> 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
>
_______________________________________________
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