package jeql.syntax.util; import java.util.List; import jeql.std.geom.GeomFunction; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.LinearRing; /** * Utilities for building geometries during parsing * * @author Martin Davis * */ public class GeometryBuilder { public static Geometry createPoint(Coordinate seq) { return GeomFunction.geomFactory.createPoint(seq); } public static Geometry createLineString(Coordinate[] seq) { return GeomFunction.geomFactory.createLineString(seq); } public static Geometry createLinearRing(Coordinate[] seq) { return GeomFunction.geomFactory.createLinearRing(seq); } public static Geometry createPolygon(Coordinate[] shell, List holeCoords) { if (shell == null) return GeomFunction.geomFactory.createPolygon(null, null); LinearRing shellRing = GeomFunction.geomFactory.createLinearRing(shell); LinearRing[] holeRings = new LinearRing[holeCoords.size()]; for (int i = 0; i < holeRings.length; i++) { holeRings[i] = GeomFunction.geomFactory .createLinearRing(((Coordinate[]) holeCoords.get(i))); } return GeomFunction.geomFactory.createPolygon(shellRing, holeRings); } public static Geometry createMultiPoint(List geoms) { return GeomFunction.geomFactory.createMultiPoint( GeometryFactory.toPointArray(geoms)); } public static Geometry createMultiLineString(List geoms) { return GeomFunction.geomFactory.createMultiLineString( GeometryFactory.toLineStringArray(geoms)); } public static Geometry createMultiPolygon(List geoms) { return GeomFunction.geomFactory.createMultiPolygon( GeometryFactory.toPolygonArray(geoms)); } public static Geometry createGeometryCollection(List geoms) { return GeomFunction.geomFactory.createGeometryCollection( GeometryFactory.toGeometryArray(geoms)); } public static Geometry createBox(Coordinate p1, Coordinate p2) { Envelope env = new Envelope(p1.x, p2.x, p1.y, p2.y); return GeomFunction.geomFactory.toGeometry(env); } }