package org.geotools.filter.function; import java.util.ArrayList; import java.util.List; import org.geotools.filter.FunctionExpressionImpl; 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 FilterFunction_vertices() { super("vertices"); } @Override public int getArgCount() { return 1; } 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); } } }