package jeql.std.aggfunction; import java.util.List; import jeql.api.function.AggregateFunction; import jeql.api.function.Aggregator; import jeql.engine.Scope; import jeql.std.geom.GeomFunction; import com.vividsolutions.jts.geom.CoordinateArrays; import com.vividsolutions.jts.geom.CoordinateList; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; /** * An aggregate function which connects * input points into a LineString. * * @author mbdavis * */ public class GeomConnectAggFunction implements AggregateFunction { public GeomConnectAggFunction() { } public void bind(Scope scope, List args) { } public String getName() { return "GeomConnect"; } public Class getType() { return Geometry.class; } public Aggregator createAggregator() { return new GeomConnectAggregator(); } private static class GeomConnectAggregator implements Aggregator { private GeometryFactory fact = null; private CoordinateList pts = new CoordinateList(); public void addValue(Object obj) { Geometry geom = (Geometry) obj; if (geom != null && fact == null) { fact = geom.getFactory(); } pts.add(geom.getCoordinates(), true); } public Object getResult() { if (fact == null) fact = GeomFunction.geomFactory; return fact.createLineString( CoordinateArrays.toCoordinateArray(pts)); } } }