package org.geotools.renderer.lite; import static org.geotools.filter.capability.FunctionNameImpl.*; import org.geotools.coverage.grid.GridCoverage2D; import org.geotools.data.DataUtilities; import org.geotools.feature.simple.SimpleFeatureBuilder; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.geotools.filter.FunctionExpressionImpl; import org.geotools.filter.capability.FunctionNameImpl; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.filter.capability.FunctionName; import org.opengis.geometry.Envelope; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.Point; /** * A test rendering transformation that returns the center of the provided coverage * * @author Andrea Aime - GeoSolutions */ public class CoverageCenterFunction extends FunctionExpressionImpl { public static FunctionName NAME = new FunctionNameImpl("CoverageCenter", parameter("coverage", GridCoverage2D.class)); public CoverageCenterFunction() { super(NAME); } public Object evaluate(Object gc) { GridCoverage2D coverage = (GridCoverage2D) gc; Envelope env = coverage.getEnvelope(); GeometryFactory gf = new GeometryFactory(); Point center = gf.createPoint(new Coordinate(env.getMedian(0), env.getMedian(1))); SimpleFeatureTypeBuilder tb = new SimpleFeatureTypeBuilder(); tb.setName("center"); tb.add("geom", Point.class, coverage.getCoordinateReferenceSystem2D()); SimpleFeatureType ft = tb.buildFeatureType(); SimpleFeatureBuilder fb = new SimpleFeatureBuilder(ft); fb.add(center); SimpleFeature f = fb.buildFeature(null); return DataUtilities.collection(f); } }