public PreparedPolygon(Polygonal poly) { super((Geometry) poly); isRectangle = getGeometry().isRectangle(); }
if (isRectangle()) { return RectangleIntersects.intersects((Polygon) this, g); if (g.isRectangle()) { return RectangleIntersects.intersects((Polygon) g, this);
return false; if (isRectangle()) {
return false; if (isRectangle()) { return RectangleContains.contains((Polygon) this, g);
/** * Returns true if the given geometry is a rectangle. * * @param geometry Geometry * @return True if the given geometry is a rectangle */ public static Boolean isRectangle(Geometry geometry) { if(geometry == null){ return null; } return geometry.isRectangle(); } }
/** * Returns true if the given geometry is a rectangle. * * @param geometry Geometry * @return True if the given geometry is a rectangle */ public static Boolean isRectangle(Geometry geometry) { if(geometry == null){ return null; } return geometry.isRectangle(); } }
public boolean isRectangle() { return geometry.isRectangle(); }
public PreparedPolygon(Polygonal poly) { super((Geometry) poly); isRectangle = getGeometry().isRectangle(); }
public static String polygonToBBox( String wkt ) throws ParseException { LOGGER.trace( "Trying to convert the wkt [{}] into a bounding box", wkt ); WKTReader reader = new WKTReader(); Geometry geo = reader.read( wkt ); if ( !geo.isRectangle() ) { geo = geo.getEnvelope(); WKTWriter writer = new WKTWriter(); String bbox = writer.write( geo ); LOGGER.debug( "Convert the following wkt [{}] into a bounding box wkt [{}]", wkt, bbox ); wkt = bbox; } return wkt; }
@Override public T intersects( String propertyName, String wkt ) { logEntry( "intersects", propertyName, wkt ); boolean isBbox = false; try { WKTReader reader = new WKTReader(); isBbox = reader.read( wkt ).isRectangle(); } catch ( ParseException e ) { LOGGER.warn( "WKT could not be parsed into geometry object [{}]: " + e.getMessage() ); } return callHandleGeoMethod( propertyName, wkt, null, isBbox ? GeospatialFilterOptions.BBOX : GeospatialFilterOptions.INTERSECTS, null ); }
if (isRectangle()) { return RectangleIntersects.intersects((Polygon) this, g); if (g.isRectangle()) { return RectangleIntersects.intersects((Polygon) g, this);
return false; if (isRectangle()) {
/** * Parses a POLYGON shape from the raw string. It might return a * {@link com.spatial4j.core.shape.Rectangle} if the polygon is one. * * <pre> * coordinateSequenceList * </pre> */ protected Shape parsePolygonShape(WKTReader.State state) throws ParseException { Geometry geometry; if (state.nextIfEmptyAndSkipZM()) { GeometryFactory geometryFactory = ctx.getGeometryFactory(); geometry = geometryFactory .createPolygon(geometryFactory.createLinearRing(new Coordinate[] {}), null); } else { geometry = polygon(state); if (geometry.isRectangle()) { return ctx.makeRectFromRectangularPoly(geometry); } } return ctx.makeShapeFromGeometry(geometry); }
return false; if (isRectangle()) { return RectangleContains.contains((Polygon) this, g);
/** * Parses a POLYGON shape from the raw string. It might return a * {@link com.spatial4j.core.shape.Rectangle} if the polygon is one. * * <pre> * coordinateSequenceList * </pre> */ protected Shape parsePolygonShape(WKTReader.State state) throws ParseException { Geometry geometry; if (state.nextIfEmptyAndSkipZM()) { GeometryFactory geometryFactory = ctx.getGeometryFactory(); geometry = geometryFactory .createPolygon(geometryFactory.createLinearRing(new Coordinate[] {}), null); } else { geometry = polygon(state); if (geometry.isRectangle()) { return ctx.makeRectFromRectangularPoly(geometry); } } return ctx.makeShapeFromGeometry(geometry); }
/** * Reads WKT from the {@code str} via JTS's {@link com.vividsolutions.jts.io.WKTReader}. * @param str * @param reader <pre>new WKTReader(ctx.getGeometryFactory()))</pre> * @return Non-Null */ protected Shape parseIfSupported(String str, WKTReader reader) throws ParseException { try { Geometry geom = reader.read(str); //Normalizes & verifies coordinates checkCoordinates(geom); if (geom instanceof com.vividsolutions.jts.geom.Point) { com.vividsolutions.jts.geom.Point ptGeom = (com.vividsolutions.jts.geom.Point) geom; if (ctx.useJtsPoint()) return new JtsPoint(ptGeom, ctx); else return ctx.makePoint(ptGeom.getX(), ptGeom.getY()); } else if (geom.isRectangle()) { return super.ctx.makeRectFromRectangularPoly(geom); } else { return super.ctx.makeShapeFromGeometry(geom); } } catch (InvalidShapeException e) { throw e; } catch (Exception e) { throw new InvalidShapeException("error reading WKT: "+e.toString(), e); } }
/** * Reads WKT from the {@code str} via JTS's {@link com.vividsolutions.jts.io.WKTReader}. * @param str * @param reader <pre>new WKTReader(ctx.getGeometryFactory()))</pre> * @return Non-Null */ protected Shape parseIfSupported(String str, WKTReader reader) throws ParseException { try { Geometry geom = reader.read(str); //Normalizes & verifies coordinates checkCoordinates(geom); if (geom instanceof com.vividsolutions.jts.geom.Point) { com.vividsolutions.jts.geom.Point ptGeom = (com.vividsolutions.jts.geom.Point) geom; if (ctx.useJtsPoint()) return new JtsPoint(ptGeom, ctx); else return ctx.makePoint(ptGeom.getX(), ptGeom.getY()); } else if (geom.isRectangle()) { return super.ctx.makeRectFromRectangularPoly(geom); } else { return super.ctx.makeShapeFromGeometry(geom); } } catch (InvalidShapeException e) { throw e; } catch (Exception e) { throw new InvalidShapeException("error reading WKT: "+e.toString(), e); } }
/** * INTERNAL: Returns a Rectangle of the JTS {@link Envelope} (bounding box) of the given {@code geom}. This asserts * that {@link Geometry#isRectangle()} is true. This method reacts to the {@link DatelineRule} setting. * @param geom non-null * @return null equivalent Rectangle. */ public Rectangle makeRectFromRectangularPoly(Geometry geom) { // TODO although, might want to never convert if there's a semantic difference (e.g. // geodetically)? Should have a setting for that. assert geom.isRectangle(); Envelope env = geom.getEnvelopeInternal(); boolean crossesDateline = false; if (isGeo() && getDatelineRule() != DatelineRule.none) { if (getDatelineRule() == DatelineRule.ccwRect) { // If JTS says it is clockwise, then it's actually a dateline crossing rectangle. crossesDateline = !CGAlgorithms.isCCW(geom.getCoordinates()); } else { crossesDateline = env.getWidth() > 180; } } if (crossesDateline) return makeRectangle(env.getMaxX(), env.getMinX(), env.getMinY(), env.getMaxY()); else return makeRectangle(env.getMinX(), env.getMaxX(), env.getMinY(), env.getMaxY()); } }
/** * INTERNAL: Returns a Rectangle of the JTS {@link Envelope} (bounding box) of the given {@code geom}. This asserts * that {@link Geometry#isRectangle()} is true. This method reacts to the {@link DatelineRule} setting. * @param geom non-null * @return null equivalent Rectangle. */ public Rectangle makeRectFromRectangularPoly(Geometry geom) { // TODO although, might want to never convert if there's a semantic difference (e.g. // geodetically)? Should have a setting for that. assert geom.isRectangle(); Envelope env = geom.getEnvelopeInternal(); boolean crossesDateline = false; if (isGeo() && getDatelineRule() != DatelineRule.none) { if (getDatelineRule() == DatelineRule.ccwRect) { // If JTS says it is clockwise, then it's actually a dateline crossing rectangle. crossesDateline = !CGAlgorithms.isCCW(geom.getCoordinates()); } else { crossesDateline = env.getWidth() > 180; } } if (crossesDateline) return makeRectangle(env.getMaxX(), env.getMinX(), env.getMinY(), env.getMaxY()); else return makeRectangle(env.getMinX(), env.getMaxX(), env.getMinY(), env.getMaxY()); } }