private LinearRing[] getHoles(int n, double originX, double originY, double width) { List holeList = new ArrayList(); addHoles(n, originX, originY, width, holeList ); return GeometryFactory.toLinearRingArray(holeList); }
seqIndex++; LinearRing[] holeArray = GeometryFactory.toLinearRingArray(holes); polys.add(geometryFactory.createPolygon(shell, holeArray));
public Polygon getResult() { GeometryFactory gf = poly.getFactory(); Polygon shell = gf.createPolygon(poly.getExteriorRing()); List holes = new ArrayList(); for (int i = 0; i < poly.getNumInteriorRing(); i++) { LinearRing hole = poly.getInteriorRingN(i); if (! isRemoved.value(hole)) { holes.add(hole); } } // all holes valid, so return original if (holes.size() == poly.getNumInteriorRing()) return poly; // return new polygon with covered holes only Polygon result = gf.createPolygon(poly.getExteriorRing(), GeometryFactory.toLinearRingArray(holes)); return result; }
private Polygon clean(Polygon poly) { Coordinate[] shellCoords = removeDuplicatePoints(poly.getExteriorRing().getCoordinates()); LinearRing shell = fact.createLinearRing(shellCoords); List holes = new ArrayList(); for (int i = 0; i < poly.getNumInteriorRing(); i++) { Coordinate[] holeCoords = removeDuplicatePoints(poly.getInteriorRingN(i).getCoordinates()); holes.add(fact.createLinearRing(holeCoords)); } return fact.createPolygon(shell, GeometryFactory.toLinearRingArray(holes)); }
public Polygon getResult() { GeometryFactory gf = poly.getFactory(); Polygon shell = gf.createPolygon(poly.getExteriorRing()); PreparedGeometry shellPrep = PreparedGeometryFactory.prepare(shell); List holes = new ArrayList(); for (int i = 0; i < poly.getNumInteriorRing(); i++) { LinearRing hole = poly.getInteriorRingN(i); if (shellPrep.covers(hole)) { holes.add(hole); } } // all holes valid, so return original if (holes.size() == poly.getNumInteriorRing()) return poly; // return new polygon with covered holes only Polygon result = gf.createPolygon(poly.getExteriorRing(), GeometryFactory.toLinearRingArray(holes)); return result; }
/** * Removes duplicated coordinates within a Polygon. * * @param polygon the input polygon * @param tolerance to delete the coordinates * @return * @throws java.sql.SQLException */ public static Polygon removeDuplicateCoordinates(Polygon polygon, double tolerance) throws SQLException { Coordinate[] shellCoords = CoordinateUtils.removeRepeatedCoordinates(polygon.getExteriorRing().getCoordinates(),tolerance,true); LinearRing shell = FACTORY.createLinearRing(shellCoords); ArrayList<LinearRing> holes = new ArrayList<LinearRing>(); for (int i = 0; i < polygon.getNumInteriorRing(); i++) { Coordinate[] holeCoords = CoordinateUtils.removeRepeatedCoordinates(polygon.getInteriorRingN(i).getCoordinates(), tolerance, true); if (holeCoords.length < 4) { throw new SQLException("Not enough coordinates to build a new LinearRing.\n Please adjust the tolerance"); } holes.add(FACTORY.createLinearRing(holeCoords)); } return FACTORY.createPolygon(shell, GeometryFactory.toLinearRingArray(holes)); }
/** * Removes duplicated coordinates within a Polygon. * * @param poly * @return */ public static Polygon removeCoordinates(Polygon poly) { Coordinate[] shellCoords = CoordinateUtils.removeDuplicatedCoordinates(poly.getExteriorRing().getCoordinates(),true); LinearRing shell = FACTORY.createLinearRing(shellCoords); ArrayList<LinearRing> holes = new ArrayList<LinearRing>(); for (int i = 0; i < poly.getNumInteriorRing(); i++) { Coordinate[] holeCoords = CoordinateUtils.removeDuplicatedCoordinates(poly.getInteriorRingN(i).getCoordinates(),true); holes.add(FACTORY.createLinearRing(holeCoords)); } return FACTORY.createPolygon(shell, GeometryFactory.toLinearRingArray(holes)); }