Hi,

I am working on a WFS request where we want results like an outer join, that 
is, we want to get all features from one table even if they do not have a match 
in the other.
Doing this with Ben Burns (also of Geocent) for one of our projects.
I can see that outer joins are not supported currently, so I am working to 
investigate how we can achieve "outer join like" results without an outer join.

Ideas:
a. use an Or filter (credit to Ben for this idea) where the first filter will 
get the 'inner join' tuples and the second filter will get the 'outer only' 
tuples.
Started investigating this, and currently not able to do a WFS join with an Or 
filter.  (details below)
Is it feasible for me to try to add the Or filter to WFS join and see if I can 
get it to succeed?
Has the Or filter been tried before and it was not able to be implemented?

b. Possibly create a View with an outer join within it and then have GeoServer 
reference the View instead.
I have not investigated this yet, I think it may have been considered already 
though and may not be possible in our situation.

c. Are there other existing ideas to get "outer join like" results without an 
outer join?

Any background info from GeoServer developers would be appreciated.

Thank you for your time!
Jeff

====== begin - details on the Or filter attempt ======

Here is an example i tried that fails with an Or and succeeds when I replace 
the Or with And:

<wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs/2.0";
  xmlns:fes="http://www.opengis.net/fes/2.0";
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
  service="WFS" version="2.0.0"
  xsi:schemaLocation="http://www.opengis.net/wfs/2.0 
http://schemas.opengis.net/wfs/2.0/wfs.xsd";>
<wfs:Query typeNames="geotoolsOnlineTests:ftjoin geotoolsOnlineTests:ft1" 
aliases="ftjoin ft1">
   <fes:Filter>
      <fes:Or>
         <fes:PropertyIsEqualTo>
            <fes:ValueReference>ftjoin/name</fes:ValueReference>
            <fes:ValueReference>ft1/stringProperty</fes:ValueReference>
         </fes:PropertyIsEqualTo>
         <fes:PropertyIsEqualTo>
            <fes:ValueReference>ft1/id</fes:ValueReference>
            <fes:ValueReference>ft1/id</fes:ValueReference>
         </fes:PropertyIsEqualTo>
     </fes:Or>
 </fes:Filter>
</wfs:Query>
</wfs:GetFeature>

I see that the wfs/GetFeature.java class disallows the Or filter, and also the 
Not filter, for joins.
>From wfs/GetFeature.java class, line 161:
        //we only support simple filters, and any of them And'ed together.
        joinFilterCapabilities.addType(And.class);

===== end - details on the Or filter attempt =====

Other tidbits:
I did some looking around on GeoServer and GeoTools mail archives for 
background info re: joins and I saw this user report of not being able to use 
the Or filter:
http://osgeo-org.1560.x6.nabble.com/WFS-2-0-join-OR-problem-td5019289.html

The relevant specs that describe only inner joins:
OpenGIS Web Feature Service 2.0 Interface Standard  section 7.9.2.5.3.1 Join 
queries
OpenGIS Filter Encoding 2.0 Encoding Standard, section 6.3.3.1.5 Join queries



Thank you,

Jeffrey Wood
Software Engineer
Geocent

Email: [email protected]<mailto:[email protected]>
Ph (BR): 225-214-4346
------------------------------------------------------------------------------
Shape the Mobile Experience: Free Subscription
Software experts and developers: Be at the forefront of tech innovation.
Intel(R) Software Adrenaline delivers strategic insight and game-changing 
conversations that shape the rapidly evolving mobile landscape. Sign up now. 
http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
_______________________________________________
Geoserver-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

Reply via email to