Hi all,

I want to do a thematic presentation using an attribute of a related(joined) 
table.
Sometime ago I didn't get the Join working but in the newer Geotools version 
(10.0) the join works.
But the problem now is that the theme attribute is not filled in getFeatures().
Maybe this is a know limitation?

This is my code:

query = new Query("GEO_TABLE");

query.setAlias("a");
Join join = new Join("ADMIN_TABLE", 
m_filterFactory.equals(m_filterFactory.property("a.\"ID\""), 
m_filterFactory.property("b.\"GEO_ID\"")));
join.setAlias("b");

List<PropertyName> properties = new ArrayList<PropertyName>();
properties.add(m_filterFactory.property("THEME_ATTRIBUTE"));
join.setProperties(properties);

query.getJoins().add(join);
query.setPropertyNames(new String[] {"GEOMETRIE"});

FeatureSource featureSource = m_datastore.getAbsoluteFeatureSource("GEO_TABLE");

SimpleFeatureTypeBuilder typeBuilder = new SimpleFeatureTypeBuilder();
typeBuilder.setName("TEST");
typeBuilder.add("GEOMETRIE", Geometry.class, crs);

SimpleFeatureType simpleFeatureType = typeBuilder.buildFeatureType();

final SimpleFeatureBuilder featureBuilder = new 
SimpleFeatureBuilder(simpleFeatureType);
final ListFeatureCollection features = new 
ListFeatureCollection(simpleFeatureType);

FeatureCollection featureCollection = featureSource.getFeatures(query);
final Expression geometriepath = m_filterFactory.property("GEOMETRIE");
final Expression attributepath = m_filterFactory.property("THEME_ATTRIBUTE");

featureCollection.accepts( new FeatureVisitor(){
    public void visit(Feature feature)
    {
    Geometry geom = (Geometry) ((SimpleFeature) feature).getDefaultGeometry();
    featureBuilder.add(geom);

    String attribute = attributepath.evaluate(feature, String.class);
    // attribute is always NULL!
    featureBuilder.add(attribute);            
    features.add(featureBuilder.buildFeature(feature.getIdentifier().getID()));
    }
}, null);

// featureCollection.size() gives size > 0 !

layer = new FeatureLayer(features, styleGeometry); // styleGeometry contains 
rules for THEME_ATTRIBUTE and an ELSE rule, it alwyas hits the ELSE rule 
because THEME_ATTRIBUTE is NULL


This is the logging:

[2013-12-21 16:48:57:260] org.geotools.jdbc FINE: SELECT A.ID as 
A_ID,A.GEOMETRIE as GEOMETRIE,A.OPP_VLAK,B.ID as B_ID,B.THEME_ATTRIBUTE FROM 
GEO_TABLE A INNER JOIN ADMIN_TABLE B ON  a."ID" = b."GEO_ID" WHERE  
SDO_FILTER(a.GEOMETRIE, ?, 'mask=anyinteract querytype=WINDOW') = 'TRUE'  
[2013-12-21 16:48:57:351] org.geotools.jdbc FINE: Setting parameter 1 as 
MDSYS.SDO_GEOMETRY(2003,90112,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3),MDSYS.SDO_ORDINATE_ARRAY(255811.28767032965,471097.4052967033,256223.82832967033,471264.5987032967))
 
[2013-12-21 16:48:57:354] org.geotools.jdbc FINE: 1 = POLYGON 
((255811.28767032965 471097.4052967033, 255811.28767032965 471264.5987032967, 
256223.82832967033 471264.5987032967, 256223.82832967033 471097.4052967033, 
255811.28767032965 471097.4052967033)) 
[2013-12-21 16:48:57:468] org.geotools.jdbc FINE: CLOSE CONNECTION 
[2013-12-21 16:48:57:470] org.geotools.jdbc FINE: CREATE CONNECTION 
[2013-12-21 16:48:57:476] org.geotools.jdbc FINE: SELECT count(*) FROM 
GEO_TABLE A INNER JOIN ADMIN_TABLE B ON  a."ID" = b."GEO_ID" WHERE  
SDO_FILTER(a.GEOMETRIE, ?, 'mask=anyinteract querytype=WINDOW') = 'TRUE'  
[2013-12-21 16:48:57:479] org.geotools.jdbc FINE: Setting parameter 1 as 
MDSYS.SDO_GEOMETRY(2003,90112,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3),MDSYS.SDO_ORDINATE_ARRAY(255811.28767032965,471097.4052967033,256223.82832967033,471264.5987032967))
 
[2013-12-21 16:48:57:481] org.geotools.jdbc FINE: 1 = POLYGON 
((255811.28767032965 471097.4052967033, 255811.28767032965 471264.5987032967, 
256223.82832967033 471264.5987032967, 256223.82832967033 471097.4052967033, 
255811.28767032965 471097.4052967033)) 
[2013-12-21 16:48:57:500] org.geotools.jdbc FINE: CLOSE CONNECTION 
[2013-12-21 16:48:57:539] org.geotools.rendering FINE: Computed scale 
denominator: 996.8602825746194 
[2013-12-21 16:48:57:545] org.geotools.rendering FINE: Processing 1 stylers for 
http://www.opengis.net/gml:GIE_GEO_KADASTRAAL_PERCEEL 
[2013-12-21 16:48:57:546] org.geotools.rendering FINE: creating rules for scale 
denominator - 996,86 
[2013-12-21 16:48:57:568] org.geotools.rendering FINE: Expanding rendering area 
by 2 pixels to consider stroke width 
[2013-12-21 16:48:57:573] org.geotools.rendering FINE: Querying layer 
http://www.opengis.net/gml:GEO_TABLE with bbox: 
ReferencedEnvelope[255810.72942857142 : 256224.38657142856, 471096.847054945 : 
471265.15694505494] 
[2013-12-21 16:48:57:650] org.geotools.rendering FINE: Style cache hit ratio: 
0.9743589743589743 , hits 76, requests 78 


The logging shows that the join query is correct and it also returns features 
but attribute THEME_ATTRIBUTE is always NULL.
So it seems that featureSource.getFeatures(query) does not fill the values of 
the attributes of the joined table.

Thanks for any help.

Ron
------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________
GeoTools-GT2-Users mailing list
GeoTools-GT2-Users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to