If anyone would have some time to spare, just to rule out if it is caused by 
user error or an error in Geoserver/Geotools, we would really appreciate the 
help.  Se below for original mail.

Thank you.


Vänliga Hälsningar
Lukas
[http://www.decerno.se/images/decerno_logo_300.png]<https://mail.decerno.se/owa/redir.aspx?C=a8d74a976fb842fa8fdbaed74d56ba65&URL=http%3a%2f%2fwww.decerno.se%2f>
Lukas Bergliden
Civilingenjör

Mobil             070 644 96 61         Electrum 234, 164 40 Kista
Direkt            08 630 75 09           Kistagången 16, 7 tr


________________________________
From: Lukas Bergliden
Sent: Friday, March 10, 2017 4:43 PM
To: [email protected]
Cc: Gismo
Subject: WFS, Filter returns wrong number of features (compared to sqlquery)

Hello everyone.
We've been struggeling for a while with a strange behaviour with Geoserver and 
a specific filter that sometimes returns to few features. I'd like to ask you 
all for a sanity check of our situation, hopefully its something we done wrong 
but we don't see it. :(
We're running Geoserver 2.10.1 on Linux CentOS 64bit and Oracle java 8.

Background
======================================
We have an OpenLayers client in which the user clicks a polygon/multipolygon 
layer.
For each click we want to find every surface in a specific layer (in the 
example below Multipolygon_query_layer) that relates to the surface the user 
clicked (being related basically means being contained within the polygon or 
overlapping it quite a bit (not just by overlapping with a tiny amount)).

To do this we make a WFS-request to Geoserver with a filter containing the 
geometry from the feature we clicked (filtergeometry). The request should 
return all features (f) where:
area(intersection(f.geometry, filtergeometry)) >= area(filtergeometry) * 0.1
The idea is to ignore any geometries that just barely sticks into 
filtergeometry by requiring that the area of the intersection is at least 10% 
of the filtergeometry's area.

I have made two tests cases which should both work but where only one does and 
I can't understand why.
All files referenced below are included in the attached rarfile.

Both examples uses the shapefile "Multipolygon_query_layer" imported into a 
postgislayer and published in geoserver.
This file contains 4 features, (16-16, T16-16, 14-8, T14-8).

Lets start with the one that works.
======================================
In "14-8 WFS-filter and result.txt" there is a filter which I called with the 
democlient of Geoserver (demos->demo requests->WFS_getFeature-1.1.xml) and the 
result from that request.
The filter uses the geometry from 14-8 as a literal (in our real life example 
this comes from openlayers) and returns both features 14-8 and T14-8.
This behavior is consistent with querying the database with the following sql:

select aktnummer, intersection, areaIntersection, parentAreaTime10p, 
areaIntersection >=  parentAreaTime10p as intersectionLargerThan10p from (
select
allrows.aktnummer,
st_asewkt(st_intersection(allrows.the_geom, filter.the_geom)) as Intersection,
st_area(st_intersection(allrows.the_geom, filter.the_geom)) as areaIntersection,
st_area(filter.the_geom)*0.1 as parentAreaTime10p
from test.multipolygon_query_layer allrows, test.multipolygon_query_layer filter
where filter.aktnummer = '14-8'
) as foo

which yeilds:::
Aktnummer: 14-8
intersection: SRID=3011;POLYGON((139717.991700148 6563739.41352409, (...)
areaIntersection: 55783.0012207031 <-larger than parentAreaTime10p
parentAreaTime10p: 5578.30012207031
intersectionLargerThan10p: true <-true means the feature should be returned

Aktnummer: T14-8
intersection: SRID=3011;POLYGON((139662.752436996 6563892.11572879, (...)
areaIntersection: 7038.15582275391 <-larger than parentAreaTime10p
parentAreaTime10p: 5578.30012207031
intersectionLargerThan10p: true <-true means the feature should be returned

Ok, so everything is ok. Both SQL and WFS returns the two features.

And now to the one that does not work
=======================================
However when I do the same thing with 16-16 the feature T16-16 is'nt returned 
(see "16-16 WFS-filter and result.txt") even though the SQL query shows that 
they should both be returned.

select aktnummer, intersection, areaIntersection, parentAreaTime10p, 
areaIntersection >=  parentAreaTime10p as intersectionLargerThan10p from (
select
allrows.aktnummer,
st_asewkt(st_intersection(allrows.the_geom, filter.the_geom)) as Intersection,
st_area(st_intersection(allrows.the_geom, filter.the_geom)) as areaIntersection,
st_area(filter.the_geom)*0.1 as parentAreaTime10p
from test.multipolygon_query_layer allrows, test.multipolygon_query_layer filter
where filter.aktnummer = '16-16'
) as foo

which yeilds:::
Aktnummer: 16-16
intersection: SRID=3011;MULTIPOLYGON(((139930.498312621 6563798.77912457, (...)
areaIntersection: 137954.670837402; <-larger than parentAreaTime10p
parentAreaTime10p: 13795.4670837402;
intersectionLargerThan10p: true <-true means the feature should be returned

Aktnummer: T16-16
intersection: SRID=3011;POLYGON((139825.726520547 6563565.34409751, (...)
areaIntersection: 18087.5724487305; <-larger than parentAreaTime10p
parentAreaTime10p: 13795.4670837402
intersectionLargerThan10p: true <-true means the feature should be returned

The SQL shows that both features should be returned but only 16-16 is returned 
by the WFS-request.

Can anyone see why T16-16 is'nt returned by the getFeature request while being 
returned by the sqlquery?
We would really appriciate any help with this.
Lukas


Vänliga Hälsningar
Lukas
[http://www.decerno.se/images/decerno_logo_300.png]<http://www.decerno.se/>
Lukas Bergliden
Civilingenjör

Mobil             070 644 96 61         Electrum 234, 164 40 Kista
Direkt            08 630 75 09           Kistagången 16, 7 tr

Attachment: files.rar
Description: files.rar

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Geoserver-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geoserver-users

Reply via email to