public BasicPreparedGeometry(Geometry geom) { baseGeom = geom; representativePts = ComponentCoordinateExtracter.getCoordinates(geom); }
/** * Extracts the linear components from a single geometry. * If more than one geometry is to be processed, it is more * efficient to create a single {@link ComponentCoordinateExtracter} instance * and pass it to multiple geometries. * * @param geom the Geometry from which to extract * @return a list of Coordinates */ public static List getCoordinates(Geometry geom) { List coords = new ArrayList(); geom.apply(new ComponentCoordinateExtracter(coords)); return coords; }
/** * Tests whether all components of the test Geometry * are contained in the interior of the target geometry. * Handles both linear and point components. * * @param geom a geometry to test * @return true if all components of the argument are contained in the target geometry interior */ protected boolean isAllTestComponentsInTargetInterior(Geometry testGeom) { List coords = ComponentCoordinateExtracter.getCoordinates(testGeom); for (Iterator i = coords.iterator(); i.hasNext(); ) { Coordinate p = (Coordinate) i.next(); int loc = targetPointLocator.locate(p); if (loc != Location.INTERIOR) return false; } return true; }
/** * Tests whether all components of the test Geometry * are contained in the target geometry. * Handles both linear and point components. * * @param geom a geometry to test * @return true if all components of the argument are contained in the target geometry */ protected boolean isAllTestComponentsInTarget(Geometry testGeom) { List coords = ComponentCoordinateExtracter.getCoordinates(testGeom); for (Iterator i = coords.iterator(); i.hasNext(); ) { Coordinate p = (Coordinate) i.next(); int loc = targetPointLocator.locate(p); if (loc == Location.EXTERIOR) return false; } return true; }
/** * Tests whether any component of the test Geometry intersects * the interior of the target geometry. * Handles test geometries with both linear and point components. * * @param geom a geometry to test * @return true if any component of the argument intersects the prepared area geometry interior */ protected boolean isAnyTestComponentInTargetInterior(Geometry testGeom) { List coords = ComponentCoordinateExtracter.getCoordinates(testGeom); for (Iterator i = coords.iterator(); i.hasNext(); ) { Coordinate p = (Coordinate) i.next(); int loc = targetPointLocator.locate(p); if (loc == Location.INTERIOR) return true; } return false; }
/** * Tests whether any component of the test Geometry intersects * the area of the target geometry. * Handles test geometries with both linear and point components. * * @param geom a geometry to test * @return true if any component of the argument intersects the prepared area geometry */ protected boolean isAnyTestComponentInTarget(Geometry testGeom) { List coords = ComponentCoordinateExtracter.getCoordinates(testGeom); for (Iterator i = coords.iterator(); i.hasNext(); ) { Coordinate p = (Coordinate) i.next(); int loc = targetPointLocator.locate(p); if (loc != Location.EXTERIOR) return true; } return false; }
/** * Tests whether any representative point of the test Geometry intersects * the target geometry. * Only handles test geometries which are Puntal (dimension 0) * * @param geom a Puntal geometry to test * @return true if any point of the argument intersects the prepared geometry */ protected boolean isAnyTestPointInTarget(Geometry testGeom) { /** * This could be optimized by using the segment index on the lineal target. * However, it seems like the L/P case would be pretty rare in practice. */ PointLocator locator = new PointLocator(); List coords = ComponentCoordinateExtracter.getCoordinates(testGeom); for (Iterator i = coords.iterator(); i.hasNext(); ) { Coordinate p = (Coordinate) i.next(); if (locator.intersects(p, prepLine.getGeometry())) return true; } return false; }