package org.geotools.filter.function;
import static org.geotools.filter.capability.FunctionNameImpl.parameter;
import java.util.ArrayList;
import java.util.List;
import org.geotools.filter.FunctionExpressionImpl;
import org.geotools.filter.capability.FunctionNameImpl;
import org.opengis.filter.capability.FunctionName;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.CoordinateFilter;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.MultiPoint;
public class FilterFunction_vertices extends FunctionExpressionImpl {
//public static FunctionName NAME = new FunctionNameImpl("vertices","geometry");
public static FunctionName NAME = new FunctionNameImpl("vertices",
parameter("vertices", MultiPoint.class),
parameter("geometry", Geometry.class));
public FilterFunction_vertices() {
super(NAME);
}
public Object evaluate(Object feature, Class context) {
Geometry g = getExpression(0).evaluate(feature, Geometry.class);
if(g == null)
return null;
MultiPointExtractor filter = new MultiPointExtractor();
g.apply(filter);
return filter.getMultiPoint();
}
static class MultiPointExtractor implements CoordinateFilter {
List<Coordinate> coordinates = new ArrayList();
public void filter(Coordinate c) {
coordinates.add(c);
}
MultiPoint getMultiPoint() {
Coordinate[] coorArray = (Coordinate[]) coordinates.toArray(new Coordinate[coordinates.size()]);
return new GeometryFactory().createMultiPoint(coorArray);
}
}
}