Opened 16 years ago
Closed 15 years ago
#2564 closed defect (fixed)
Filter Encoding: Modify DWithin definition
Reported by: | assefa | Owned by: | assefa |
---|---|---|---|
Priority: | normal | Milestone: | 5.2 release |
Component: | WFS Server | Version: | unspecified |
Severity: | normal | Keywords: | |
Cc: | pramsey@…, bartvde@…, tomkralidis |
Description
Currently DWithin is implemented using geos within functionality where the query shape is a buffered copy of the original shape. Same for within. My interpretation of the within/dwithin operator looking at the specs "simple feature specification for sql" was that the feature should be totally contained. If that is not the case, It can easily be changes to use the distance geos operator.
But this interpretation might be wrong and expected behavior would be more like
http://geoapi.sourceforge.net/2.0/javadoc/org/opengis/filter/spatial/DWithin.html and http://download.oracle.com/docs/html/A85337_01/sdo_objg.htm#854615
Change History (9)
comment:1 by , 16 years ago
Keywords: | tomkralidis added |
---|
comment:2 by , 16 years ago
I'm checking with PeterV on the origins of his BNF interpretation... I can't find it in the Cat1 or Cat2 docs. (I can find DWITHIN, but no explanation of semantics).
comment:3 by , 16 years ago
The following works for me to fix this:
--- mapquery.c.orig 2008-03-28 10:19:09.000000000 +0100 +++ mapquery.c 2008-03-28 10:19:37.000000000 +0100 @@ -1304,7 +1304,7 @@ break; case MS_GEOS_WITHIN: - status = msGEOSWithin(&shape, selectshape); + status = (msGEOSDistance(&shape, selectshape) <= 0); if (status != MS_TRUE && status != MS_FALSE) status = MS_FALSE; break;
comment:4 by , 15 years ago
From Peter Vretanos <pvretano at cubewerx dot com>, the editor of the Filter specification document. Apparently DWithin was never really clearly defined, but he polled the rest of the working group and got:
I raised the issue of DWithin with: 1) Doug Nebert 2) The ISO/OGC WFS/FES Editing Committee and the answers I got where: Doug: DWithin(A,B,D) = Distance(A,B) < D ISO EC: DWithin(A,B,D) = Within(Buffer(A,D),B) so the filter specification will be Within(Buffer(A,D),B) since this seems to be the consensus of the members of the ISO editing committee. If you need "Distance(A,B)<D" you can always define a function in V2.0 of the WFS to do this. You can either use the Function element from Filter or define a stored query. If this is still an issue for you, I would be happy to raise the issue again with the ISO EC since there is still one more opportunity (before we release) the specification).
comment:5 by , 15 years ago
Cc: | added |
---|---|
Owner: | changed from | to
Status: | new → assigned |
Paul,
Thanks for following on this.
We sill have the opportunity before the 5.2 release to modify the current DWITHIN implementation to fit the Distance(A,B) < D model. At this point, for me the decision is more based on which way of doing things is more intuitive to the user and more useful. I am inclined at this point to says that Distance(A,B) < D would be a way to go. Tom, what would be your opinion on this? Any objections to modify the behaviour?
comment:6 by , 15 years ago
Keywords: | tomkralidis removed |
---|
How does GeoServer do it? With the GeoAPI way (sorry, I'm not familiar with GeoServer innards)? I would see this as important in terms of semantic interpretation and how clients apply filters to WFS instances.
Having said this, I would tend to agree with Assefa in terms of intuitiveness. At the same time, if there is consensus at the ISO EC for the "other" way, do we, in MapServer, define DWithin as a SpatialOperator, or as a FunctionName specific to MapServer?
Don't mean to split hairs, but just want to pass on some food for thought. Personally, I would go with defining DWithin as a SpatialOperator per Distance(A,B) < D.
comment:7 by , 15 years ago
I agree with Tom, I would also go for defining DWithin as a SpatialOperator per Distance(A,B) < D.
Are we gonna do this before 5.2?
comment:9 by , 15 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
changes committed in revision r7696.
We had this discussion in bug #2105 (http://trac.osgeo.org/mapserver/ticket/2105#comment:6) and that was what was implemented.
Do we change it for 5.2 to be similar to within_distance?