package org.geotoolkit.pending.demo.filter; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.Point; import java.util.HashSet; import java.util.Set; import org.apache.sis.feature.builder.AttributeRole; import org.geotoolkit.data.FeatureStoreUtilities; import org.geotoolkit.data.FeatureCollection; import org.geotoolkit.data.FeatureIterator; import org.geotoolkit.factory.FactoryFinder; import org.apache.sis.feature.builder.FeatureTypeBuilder; import org.geotoolkit.filter.identity.DefaultFeatureId; import org.geotoolkit.pending.demo.Demos; import org.apache.sis.referencing.CommonCRS; import org.opengis.feature.Feature; import org.opengis.feature.FeatureType; import org.opengis.filter.Filter; import org.opengis.filter.FilterFactory; import org.opengis.filter.expression.Literal; import org.opengis.filter.expression.PropertyName; import org.opengis.filter.identity.Identifier; public class FilterDemo { private static final FilterFactory FF = FactoryFinder.getFilterFactory(null); public static void main(String[] args) { Demos.init(); final FeatureCollection collection = createSampleCollection(); System.out.println(collection); testFilter(collection, attributeFilter()); testFilter(collection, idFilter()); testFilter(collection, combinedFilter()); testFilter(collection, bboxFilter()); } private static void testFilter(FeatureCollection collection, Filter filter){ System.out.println("\n==============================================================\n"); System.out.println(filter); System.out.println('\n'); final FeatureIterator ite = collection.iterator(); try{ while(ite.hasNext()){ final Feature candidate = ite.next(); if(filter.evaluate(candidate)){ System.out.println(candidate); } } }finally{ ite.close(); } } private static Filter attributeFilter(){ final PropertyName property = FF.property("name"); final Literal value = FF.literal("robert"); final Filter filter = FF.equals(property, value); return filter; } private static Filter idFilter(){ final Set<Identifier> ids = new HashSet<Identifier>(); ids.add(new DefaultFeatureId("id-1")); ids.add(new DefaultFeatureId("id-4")); final Filter filter = FF.id(ids); return filter; } private static Filter combinedFilter(){ final Filter ageBetween = FF.between(FF.property("age"), FF.literal(3), FF.literal(30)); final Filter jobType = FF.like(FF.property("job"), "*developer*"); final Filter combined = FF.and(ageBetween,jobType); return combined; } private static Filter bboxFilter(){ final Filter bbox = FF.bbox("localisation", 10, 0, 30, 50, null); return bbox; } public static FeatureCollection createSampleCollection(){ final GeometryFactory gf = new GeometryFactory(); final FeatureTypeBuilder ftb = new FeatureTypeBuilder(); ftb.setName("person"); ftb.addAttribute(String.class).setName("id").addRole(AttributeRole.IDENTIFIER_COMPONENT); ftb.addAttribute(String.class).setName("name"); ftb.addAttribute(Integer.class).setName("age"); ftb.addAttribute(String.class).setName("job"); ftb.addAttribute(Point.class).setName("localisation").setCRS(CommonCRS.WGS84.normalizedGeographic()); final FeatureType type = ftb.build(); final Feature feature1 = type.newInstance(); feature1.setPropertyValue("id","id-1"); feature1.setPropertyValue("name","marcel"); feature1.setPropertyValue("age",18); feature1.setPropertyValue("job","developer"); feature1.setPropertyValue("localisation",gf.createPoint(new Coordinate(5, 2))); final Feature feature2 = type.newInstance(); feature2.setPropertyValue("id","id-2"); feature2.setPropertyValue("name","janine"); feature2.setPropertyValue("age",27); feature2.setPropertyValue("job","advanced developer"); feature2.setPropertyValue("localisation",gf.createPoint(new Coordinate(17, 39))); final Feature feature3 = type.newInstance(); feature3.setPropertyValue("id","id-3"); feature3.setPropertyValue("name","robert"); feature3.setPropertyValue("age",5); feature3.setPropertyValue("job","student"); feature3.setPropertyValue("localisation",gf.createPoint(new Coordinate(-9, 5))); final Feature feature4 = type.newInstance(); feature4.setPropertyValue("id","id-4"); feature4.setPropertyValue("name","hector"); feature4.setPropertyValue("age",48); feature4.setPropertyValue("job","manager"); feature4.setPropertyValue("localisation",gf.createPoint(new Coordinate(22, 7))); final FeatureCollection collection = FeatureStoreUtilities.collection(feature1,feature2,feature3,feature4); return collection; } }