package org.geotoolkit.pending.demo.datamodel;
import java.io.Serializable;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.geotoolkit.data.FeatureStore;
import org.geotoolkit.data.FeatureCollection;
import org.geotoolkit.data.FeatureIterator;
import org.geotoolkit.db.postgres.PostgresFeatureStoreFactory;
import org.geotoolkit.data.query.Query;
import org.geotoolkit.data.query.QueryBuilder;
import org.geotoolkit.data.session.Session;
import org.geotoolkit.data.shapefile.ShapefileFeatureStoreFactory;
import org.geotoolkit.factory.FactoryFinder;
import org.geotoolkit.pending.demo.Demos;
import org.apache.sis.referencing.CRS;
import org.apache.sis.storage.DataStoreException;
import org.geotoolkit.storage.DataStores;
import org.opengis.util.GenericName;
import org.opengis.filter.FilterFactory;
import org.opengis.parameter.ParameterValueGroup;
import org.opengis.referencing.NoSuchAuthorityCodeException;
import org.opengis.util.FactoryException;
public class FeatureStoreReadingDemo {
private static final FilterFactory FF = FactoryFinder.getFilterFactory(null);
public static void main(String[] args) throws DataStoreException, NoSuchAuthorityCodeException, FactoryException, URISyntaxException {
Demos.init();
//getting a datastore
final FeatureStore store = createUsingParameterGroup();
//getting all available feature types -----------------------------------------------
final Set<GenericName> typeNames = store.getNames();
for(GenericName name : typeNames){
System.out.println(store.getFeatureType(name.toString()));
}
//creating the session ---------------------------------------------------------------
final Session session = store.createSession(true);
//reading features -------------------------------------------------------------------
final GenericName typeName = typeNames.iterator().next();
FeatureCollection collection = session.getFeatureCollection(QueryBuilder.all(typeName));
//showCollection(collection, 10);
//advanced querying -------------------------------------------------------------------
final QueryBuilder qb = new QueryBuilder(typeName.toString());
qb.setCRS(CRS.forCode("EPSG:3395"));
qb.setProperties(new String[]{"the_geom","LONG_NAME","SQKM"});
qb.setFilter(FF.equals(FF.property("CURR_TYPE"), FF.literal("Norwegian Krone")));
final Query query = qb.buildQuery();
collection = session.getFeatureCollection(query);
System.out.println(collection.getFeatureType());
showCollection(collection, 10);
}
private static void showCollection(FeatureCollection collection, int limit){
FeatureIterator ite = collection.iterator();
try{
int i=0;
while(ite.hasNext()){
if(i==limit) break;
System.out.println(ite.next());
i++;
}
}finally{
ite.close();
}
}
private static FeatureStore createUsingMap() throws DataStoreException, URISyntaxException {
//we must know the parameters
final Map<String,Serializable> parameters = new HashMap<String, Serializable>();
String pathId = ShapefileFeatureStoreFactory.PATH.getName().getCode();
parameters.put(pathId, FeatureStoreReadingDemo.class.getResource("/data/world/Countries.shp").toURI());
final FeatureStore store = (FeatureStore) DataStores.open(parameters);
return store;
}
private static FeatureStore createUsingParameterGroup() throws DataStoreException, URISyntaxException {
//find out how to describe things
System.out.println(ShapefileFeatureStoreFactory.PARAMETERS_DESCRIPTOR);
System.out.println(PostgresFeatureStoreFactory.PARAMETERS_DESCRIPTOR);
final ParameterValueGroup parameters = ShapefileFeatureStoreFactory.PARAMETERS_DESCRIPTOR.createValue();
String pathId = ShapefileFeatureStoreFactory.PATH.getName().getCode();
parameters.parameter(pathId).setValue(FeatureStoreReadingDemo.class.getResource("/data/world/Countries.shp").toURI());
final FeatureStore store = (FeatureStore) DataStores.open(parameters);
return store;
}
}