@Test public void convert() { GeometryPath<Geometry> geometry = new GeometryPath<Geometry>("geometry"); assertEquals(new GeometryCollectionPath<GeometryCollection>("geometry"), geometry.asCollection()); assertEquals(new LinearRingPath<LinearRing>("geometry"), geometry.asLinearRing()); assertEquals(new LineStringPath<LineString>("geometry"), geometry.asLineString()); assertEquals(new MultiLineStringPath<MultiLineString>("geometry"), geometry.asMultiLineString()); assertEquals(new MultiPointPath<MultiPoint>("geometry"), geometry.asMultiPoint()); assertEquals(new MultiPolygonPath<MultiPolygon>("geometry"), geometry.asMultiPolygon()); assertEquals(new PointPath<Point>("geometry"), geometry.asPoint()); assertEquals(new PolygonPath<Polygon>("geometry"), geometry.asPolygon()); assertEquals(new PolyhedralSurfacePath<PolyHedralSurface>("geometry"), geometry.asPolyHedralSurface()); } }
/** * Create a new GeometryExpression * * @param expr Expression of type Geometry * @return new GeometryExpression */ public static <T extends Geometry> GeometryExpression<T> asGeometry(Expression<T> expr) { Expression<T> underlyingMixin = ExpressionUtils.extract(expr); if (underlyingMixin instanceof PathImpl) { return new GeometryPath<T>((PathImpl<T>) underlyingMixin); } else if (underlyingMixin instanceof OperationImpl) { return new GeometryOperation<T>((OperationImpl<T>) underlyingMixin); } else { return new GeometryExpression<T>(underlyingMixin) { private static final long serialVersionUID = -6714044005570420009L; @Override public <R, C> R accept(Visitor<R, C> v, C context) { return this.mixin.accept(v, context); } }; } }
@Test @ExcludeIn(MYSQL) public void point_distance() { QShapes shapes1 = QShapes.shapes; QShapes shapes2 = new QShapes("shapes2"); for (Tuple tuple : query().from(shapes1, shapes2) .where(shapes1.id.loe(5), shapes2.id.loe(5)) .select(shapes1.geometry.asPoint(), shapes2.geometry.asPoint(), shapes1.geometry.distance(shapes2.geometry)).fetch()) { Point point1 = tuple.get(shapes1.geometry.asPoint()); Point point2 = tuple.get(shapes2.geometry.asPoint()); Double distance = tuple.get(shapes1.geometry.distance(shapes2.geometry)); assertEquals(point1.distance(point2), distance, 0.0001); } }
@Test public void point_methods2() { QShapes shapes1 = QShapes.shapes; QShapes shapes2 = new QShapes("shapes2"); List<Expression<?>> expressions = Lists.newArrayList(); expressions.addAll(createExpressions(shapes1.geometry.asPoint(), shapes2.geometry.asPoint())); expressions.addAll(createExpressions(shapes1.geometry.asPoint(), ConstantImpl.create((Point) Wkt.fromWkt("Point(2 2)")))); for (Expression<?> expr : expressions) { boolean logged = false; for (Object row : query().from(shapes1, shapes2) .where(shapes1.id.loe(5), shapes2.id.loe(5)).select(expr).fetch()) { if (row == null && !logged) { System.err.println(expr.toString()); logged = true; } } } }
@Test public void multiPoint_methods() { MultiPointPath<MultiPoint> multipoint = shapes.geometry.asMultiPoint(); List<Expression<?>> expressions = Lists.newArrayList(); add(expressions, multipoint.asBinary(), H2); add(expressions, multipoint.asText()); add(expressions, multipoint.boundary(), MYSQL); add(expressions, multipoint.convexHull(), MYSQL); add(expressions, multipoint.dimension()); add(expressions, multipoint.envelope(), H2); add(expressions, multipoint.geometryType(), H2); add(expressions, multipoint.isEmpty()); add(expressions, multipoint.isSimple()); // multipoint specific add(expressions, multipoint.numGeometries(), H2); add(expressions, multipoint.geometryN(1), H2); for (Expression<?> expr : expressions) { boolean logged = false; for (Object row : withMultipoints().select(expr).fetch()) { if (row == null && !logged) { System.err.println(expr.toString()); logged = true; } } } }
@Test public void multiPolygon_methods() { MultiPolygonPath<MultiPolygon> multipolygon = shapes.geometry.asMultiPolygon(); List<Expression<?>> expressions = Lists.newArrayList(); add(expressions, multipolygon.asBinary(), H2); add(expressions, multipolygon.asText()); add(expressions, multipolygon.boundary(), MYSQL); add(expressions, multipolygon.convexHull(), MYSQL); add(expressions, multipolygon.dimension()); add(expressions, multipolygon.envelope(), H2); add(expressions, multipolygon.geometryType(), H2); add(expressions, multipolygon.isEmpty()); add(expressions, multipolygon.isSimple()); // multipolygon specific add(expressions, multipolygon.numGeometries(), H2); add(expressions, multipolygon.geometryN(1), H2); for (Expression<?> expr : expressions) { boolean logged = false; for (Object row : withMultiPolygons().select(expr).fetch()) { if (row == null && !logged) { System.err.println(expr.toString()); logged = true; } } } }
@Test public void multiLineString_methods() { MultiLineStringPath<MultiLineString> multilinestring = shapes.geometry.asMultiLineString(); List<Expression<?>> expressions = Lists.newArrayList(); add(expressions, multilinestring.asBinary(), H2); add(expressions, multilinestring.asText()); add(expressions, multilinestring.boundary(), MYSQL); add(expressions, multilinestring.convexHull(), MYSQL); add(expressions, multilinestring.dimension()); add(expressions, multilinestring.envelope(), H2); add(expressions, multilinestring.geometryType(), H2); add(expressions, multilinestring.isEmpty()); add(expressions, multilinestring.isSimple()); // multicurve specific add(expressions, multilinestring.isClosed(), H2); add(expressions, multilinestring.length(), H2); // multilinestring specific add(expressions, multilinestring.numGeometries(), H2); add(expressions, multilinestring.geometryN(1), H2); for (Expression<?> expr : expressions) { boolean logged = false; for (Object row : withMultiLineStrings().select(expr).fetch()) { if (row == null && !logged) { System.err.println(expr.toString()); logged = true; } } } }
@Test public void polygon_methods() { PolygonPath<Polygon> polygon = shapes.geometry.asPolygon();
@Test public void lineString_methods() { LineStringPath<LineString> lineString = shapes.geometry.asLineString();
@Override public <A extends Geometry> GeometryPath<A> createGeometry(String property, Class<? extends A> type) { return add(new GeometryPath<A>(type, forProperty(property))); }
@Test @ExcludeIn(H2) public void point_x_y() { PointPath<Point> point = shapes.geometry.asPoint(); List<Tuple> results = withPoints().select(point, point.x(), point.y()).fetch(); assertFalse(results.isEmpty()); for (Tuple row : results) { assertEquals(Double.valueOf(row.get(point).getX()), row.get(point.x())); assertEquals(Double.valueOf(row.get(point).getY()), row.get(point.y())); } }
@Test public void convert() { GeometryPath<Geometry> geometry = new GeometryPath<Geometry>("geometry"); assertEquals(new GeometryCollectionPath<GeometryCollection>("geometry"), geometry.asCollection()); assertEquals(new LinearRingPath<LinearRing>("geometry"), geometry.asLinearRing()); assertEquals(new LineStringPath<LineString>("geometry"), geometry.asLineString()); assertEquals(new MultiLineStringPath<MultiLineString>("geometry"), geometry.asMultiLineString()); assertEquals(new MultiPointPath<MultiPoint>("geometry"), geometry.asMultiPoint()); assertEquals(new MultiPolygonPath<MultiPolygon>("geometry"), geometry.asMultiPolygon()); assertEquals(new PointPath<Point>("geometry"), geometry.asPoint()); assertEquals(new PolygonPath<Polygon>("geometry"), geometry.asPolygon()); assertEquals(new PolyhedralSurfacePath<PolyHedralSurface>("geometry"), geometry.asPolyHedralSurface()); } }
@Test public void point_methods() { PointPath<Point> point = shapes.geometry.asPoint();