package org.geotools.data.transform;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.geotools.data.DataUtilities;
import org.geotools.data.collection.ListFeatureCollection;
import org.geotools.data.property.PropertyDataStore;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.data.transform.Definition;
import org.geotools.data.transform.TransformFactory;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.filter.text.ecql.ECQL;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.CRS;
import org.geotools.util.logging.Logging;
import org.junit.BeforeClass;
import org.opengis.filter.FilterFactory2;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
public abstract class AbstractTransformTest {
static SimpleFeatureSource STATES;
static ReferencedEnvelope DELAWARE_BOUNDS;
static CoordinateReferenceSystem WGS84;
static FilterFactory2 FF = CommonFactoryFinder.getFilterFactory2();
@BeforeClass
public static void setup() throws Exception {
// just to make sure the loggin is not going to cause exceptions when turned on
java.util.logging.ConsoleHandler handler = new java.util.logging.ConsoleHandler();
handler.setLevel(java.util.logging.Level.FINE);
Logging.getLogger("org.geotools.data.transform").setLevel(java.util.logging.Level.FINE);
WGS84 = CRS.decode("EPSG:4326");
DELAWARE_BOUNDS = new ReferencedEnvelope(-75.791435, -75.045998, 38.44949,
39.826435000000004, WGS84);
PropertyDataStore pds = new PropertyDataStore(new File(
"./src/test/resources/org/geotools/data/transform"));
STATES = pds.getFeatureSource("states");
}
SimpleFeatureSource transformWithSelection() throws IOException {
List<Definition> definitions = new ArrayList<Definition>();
definitions.add(new Definition("the_geom"));
definitions.add(new Definition("state_name"));
definitions.add(new Definition("persons"));
SimpleFeatureSource transformed = TransformFactory.transform(STATES, "states_mini", definitions);
return transformed;
}
SimpleFeatureSource transformWithRename() throws Exception {
List<Definition> definitions = new ArrayList<Definition>();
definitions.add(new Definition("geom", ECQL.toExpression("the_geom")));
definitions.add(new Definition("name", ECQL.toExpression("state_name")));
definitions.add(new Definition("people", ECQL.toExpression("persons")));
SimpleFeatureSource transformed = TransformFactory.transform(STATES, "usa", definitions);
return transformed;
}
SimpleFeatureSource transformWithExpressions() throws Exception {
List<Definition> definitions = new ArrayList<Definition>();
definitions.add(new Definition("geom", ECQL.toExpression("buffer(the_geom, 1)")));
definitions.add(new Definition("name", ECQL.toExpression("strToLowercase(state_name)")));
definitions.add(new Definition("total", ECQL.toExpression("male + female")));
definitions.add(new Definition("logp", ECQL.toExpression("log(persons)")));
SimpleFeatureSource transformed = TransformFactory.transform(STATES, "bstates", definitions);
return transformed;
}
SimpleFeatureSource transformWithExpressionsWithEmptySource() throws Exception {
List<Definition> definitions = new ArrayList<Definition>();
definitions.add(new Definition("geom", ECQL.toExpression("buffer(the_geom, 1)")));
definitions.add(new Definition("name", ECQL.toExpression("strToLowercase(state_name)")));
definitions.add(new Definition("total", ECQL.toExpression("male + female")));
definitions.add(new Definition("logp", ECQL.toExpression("log(persons)")));
ListFeatureCollection fc = new ListFeatureCollection(STATES.getSchema());
SimpleFeatureSource emptySource = DataUtilities.source(fc);
SimpleFeatureSource transformed = TransformFactory.transform(emptySource, "bstates", definitions);
return transformed;
}
}